
This action allows you to send requests from Synerise to external systems. This node can reuse existing [outgoing integrations](/docs/automation/integration/outgoing-webhook) or you can define a custom webhook that is configurable only in a specific workflow and node.  


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Take a look at how you can [integrate with Adform](/use-cases/adform-integration) using the Outgoing Integration node.

</div></div></div>


## Node configuration
---

### Select outgoing integration type

1. Click on the node.
2. Select the type of the Outgoing Integration.
    - **Existing integrations** - If you prepared an [outgoing integration](/docs/automation/integration/outgoing-webhook) earlier, you can use this option.
        1. From the dropdown list, select the outgoing integration prepared earlier.
        2. Confirm with the **Apply** button.   
    - **Custom webhook** - Use this option if you want to create outgoing integration from scratch.


   <div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

   The following instructions apply to the **Custom webhook** integration type only - testing requests are available exclusively for this type within the Outgoing Integration node.

   </div></div></div>


### Set up a connection

In this part of the process, you must define how you access your source. By selecting the authentication method and providing the required information, you establish a connection.

1. On the pop-up, select the authentication method: 
- **No authentication** - No authentication is required.
- **Login & Password** - This method lets you use basic authentication to authenticate with the remote server.

  <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>In the connection list:<ul> <li>If the connection you want to use is in the list, select it and proceed to <a href="#define-the-endpoint">defining the endpoint</a>.</li> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li>At the bottom of the dropdown list, click <strong>Add connection</strong>. </li> <li>In the <strong>Connection name</strong> field, enter the name of your connection (it&#39;s visible only on the <strong>Select connection</strong> dropdown list).</li> <li>In the <strong>Login</strong> field, enter a login.</li> <li>In the <strong>Password</strong> field, enter the password.</li> <li>Click <strong>Create</strong>.<br> The connection you created is saved and can be used later in other nodes and workflows.</li> </ol> </li> </ul> </li> </ol></div></details>

- **Custom connection** - This method sends an authentication token request before executing the main request defined in the Outgoing integration node settings. The token is fetched when the request data is uncached, then cached according to its TTL, and added to the target request.  

  <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>In the connection list:<ul> <li>If the connection you want to use is in the list, select it and proceed to Defining the request section in this article.</li> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li><p>At the bottom of the dropdown list, click <strong>Add connection</strong>. </p> </li> <li><p>In the <strong>Authorization request</strong> tab, click <strong>Define</strong>.<br> <strong>Result</strong>: </p> <figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/custom-connection-request-empty.png" class="large" alt="The Request section in the configuration of a custom connection"><figcaption>The Request section in the configuration of a custom connection</figcaption></figure></li> <li><p>In the <strong>Connection name</strong> field, enter the name of your connection (it&#39;s visible only on the <strong>Select connection</strong> dropdown list or on the list of connections in <strong>Settings &gt; Connections</strong>).</p> </li> <li><p>In <strong>Secret</strong>, enter a value which is required in the request to obtain a token. This value will be anonymized and displayed as asterisks. </p> </li> <li><p>In the <strong>Headers</strong> section, add request headers (in the left field, enter the key; in the right, enter its value).</p> </li> <li><p>In the <strong>Body</strong> field, enter the request body.<br> For example: </p> <pre><code class="language-json">{ "api-key": "{{secret}}" }</code></pre> <p> where <code>{{secret}}</code> retrieves the value of the <strong>Secret</strong> field to anonymize the token. </p> </li> <li><p>Confirm the settings in the <strong>Authorization request</strong> tab by clicking <strong>Apply</strong>. </p> </li> <li><p>In the <strong>Token placement settings</strong> section, click <strong>Define</strong>. </p> </li> <li><p>Click <strong>Retrieve response</strong>.<br> <strong>Result</strong>: </p> <figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/custom-connection-response.png" class="large" alt="Retrieved token in the Response section in the custom connection configuration form"><figcaption>Retrieved token in the Response section in the custom connection configuration form</figcaption></figure></li> <li><p>If you:</p> </li> </ol> <ul> <li><p>specify the value in the <strong>Headers</strong> section, the extracted authorization data from the response will be added as a header to the target request. </p> </li> <li><p>provide the value in the <strong>URL Parameters</strong> section, the data will be appended to the target request’s URL as a parameter.<br> You can use the following values to retrieve values from the response: </p> <ul> <li><p><code>authResponseBody</code> - a variable that contains the full body of an authentication response</p> </li> <li><p><code>authResponseStatusCode</code> - a variable that contains the status code of an authentication response</p> </li> <li><p><code>authResponseHeaders</code>- a variable that contains the headers of an authentication response<br> For example: </p> <pre><code class="language-jinjava">Bearer {{ authResponseBody | fromjson | attr("token") }}</code></pre></li> </ul> <p> It takes the <code>JSON</code> response body stored in <code>authResponseBody</code>, parses it into a usable structure, and extracts the value of the <code>token</code> field. Outputs a string like: <code>Bearer &quot;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...&quot;</code></p> </li> </ul> <ol start="10"> <li>In <strong>TTL</strong> field, specify the how long the cached response from the external request will be valid.<br>If you leave this field empty, it&#39;s 60 seconds.</li> <li>Confirm by clicking <strong>Apply</strong>.</li> </ol> </li> </ul> </li> </ol></div></details>

- **Synerise API key** - This method is particularly recommended for the users who use Synerise REST API. It lets you select a connection that includes an [API key](/docs/settings/tool/api) with the required permissions. This way, the requests to Synerise API are executed by this integration and a JWT is not required as it is generated while sending requests and attached to the request headers.

  <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>If the connection you want to use is in the list, select it and proceed to <a href="#define-the-endpoint">defining the endpoint</a>.<ul> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li>At the bottom of the dropdown list, click <strong>Add connection</strong>. </li> <li>In the <strong>Connection name</strong> field, enter the name of your connection (it&#39;s visible only on the <strong>Select connection</strong> dropdown list).</li> <li>From <strong>API Key</strong> dropdown, select API key you want to use. If you don&#39;t see any API Keys on the list, verify if you are assigned with a user role that includes permissions to preview API keys.</li> <li>Click <strong>Create</strong>.<br> The connection you created can be used later in other nodes and workflows.</li> </ol> </li> </ul> </li> </ol></div></details>

- **OAuth2 Client Credentials** - This method lets you use your OAuth2 credentials to authorize.

  <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>In the connection list:<ul> <li>If the connection you want to use is in the list, select it and proceed to <a href="#define-the-endpoint">defining the endpoint</a>.</li> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li>At the bottom of the dropdown list, click <strong>Add connection</strong>. </li> <li>In the <strong>Connection name</strong> field, enter the name of your connection (it&#39;s visible only on the <strong>Select connection</strong> dropdown list).</li> <li>In the <strong>Token endpoint URL</strong> field, enter the URL used to obtain an access token from the authorization server.</li> <li>In the <strong>Client ID</strong> field, enter a unique identifier assigned to your application by the service provider.</li> <li>In the <strong>Client secret</strong> field, enter a confidential key issued alongside the Client ID. It is used to securely authenticate your application.</li> <li>Optionally, in the <strong>Scope</strong> field, define the level of access your application is requesting. Scopes specify which actions or data your application can access (for example, read user data, send messages). Refer to the API documentation for the correct scope values.</li> <li>Click <strong>Create</strong>.<br> The connection you created is saved and can be used later in other nodes and workflows.</li> </ol> </li> </ul> </li> </ol></div></details>
  

- **API Key** - This method lets you authenticate using an API secret by including it in a header of your choice or in a URL parameter — example outputs:
    - the authorization header: `Authorization: Bearer [secret]`
    - URL parameter: `client_id=[rendered secret]`.  
    When you use this connection in the Outgoing Integration node, the token will be automatically added to either the request header or the request URL with every request.  

    
      <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>If the connection you want to use is in the list, select it and proceed to Defining the request section in this article.<ul> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li>At the bottom of the dropdown list, click <strong>Add connection</strong>. </li> <li>In the <strong>Connection name</strong> field, enter the name of your connection (it&#39;s visible only on the <strong>Select connection</strong> dropdown list).</li> <li>In the <strong>Secret</strong> field, enter an API Key.</li> <li>If you:<ul> <li>specify the value in the <strong>Headers</strong> section, the API key will be added as a header to the request. For example, <code>x-api-key: {{secret}}</code> where <code>{{secret}}</code> retrieves the value of the Secret field to anonymize the API key value.</li> <li>provide the value in the <strong>URL Parameters</strong> section, the API key will be appended to the request’s URL as a parameter.</li> </ul> </li> <li>Click <strong>Create</strong>.<br> The connection you created can be used later in other nodes and workflows.</li> </ol> </li> </ul> </li> </ol></div></details>
  

- **SHA256-based authentication** - *This method is recommended exclusively for connecting with Eagle Eye*. This method lets you authenticate using the SHA256 algorithm. When a target request is sent, the following headers are added to the request:  
    - **X-EES-AUTH-CLIENT-ID** – the value is taken from the Client ID field.
    - **X-EES-AUTH-HASH** – the value is generated by concatenating the endpoint URI, request body, and client secret, and then hashing the result using SHA256.  

    
      <details class="accordion"><summary>Click here to see the instructions</summary><div class="accordion-content"><ol> <li>Click <strong>Select connection</strong>.</li> <li>In the connection list:<ul> <li>If the connection you want to use is in the list, select it and proceed to <a href="#define-the-endpoint">Defining the endpoint</a> section in this article.</li> <li>If the connection list is empty or you don&#39;t see a connection, you must:<ol> <li>In the <strong>Connection name</strong> field, enter the name of the connection.<br> It&#39;s used to find the connection on the list.</li> <li>In <strong>Client ID</strong>, enter a unique identifier assigned to your application by the service provider.</li> <li>In <strong>Client secret</strong>, enter client secret assigned to your application by the service provider. </li> <li>Confirm by clicking <strong>Create</strong>.</li> </ol> </li> </ul> </li> </ol></div></details>




### Define the endpoint

<figure>
<img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/outgoing-integration-definition.png" alt="A blank configuration form of the Ougtoing integration node" class="medium">
<figcaption>A blank configuration form of the Ougtoing integration node</figcaption>
</figure>  


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

All fields that contain <img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/icons/snippet-icon.png" alt="Snippet icon" class="icon" > accept [snippets](/docs/assets/snippets) or [inserts](/developers/inserts). If you create a [business workflow](/docs/glossary#business-workflow), profile-related inserts cannot be used.

</div></div></div>


If you have a cURL command ready, you can use the **Import cURL** option to populate all fields automatically. See [Import and export cURL](#import-and-export-curl).

1. In the **Webhook name** field, enter the value that will be displayed in the `name` parameter of the event which will be generated when a request from this node will be executed.
2. **Optional, recommended:** In the **Event name** field, choose an action name for the [event that will be generated when Synerise receives a response](/docs/assets/events/event-reference/integration#webhookresponse-and-custom-webhook-response-names) from your selected endpoint. We recommend using a meaningful name instead of the default one.
    - from the dropdown list, you can select the name of the event (event action) that will be generated when a request from this node will be executed. 
    - at the bottom of the dropdown list, you can create a new event using the **Create new event** option.  
        **Result**: A pop-up appears. Fill out the configuration form on the pop-up, according to instructions in step 3 in the [Adding event definitions - in the Web application](/docs/assets/events/event-definitions#in-the-web-application) section. 
    - If you leave the field blank, the action defaults to `webhook.response`.
3. In the **URL** section, define the HTTP method and enter the URL address to which the data is transmitted. 
    
   <div class="admonition admonition-warning"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z" /></svg></div><div class="admonition-body"><div class="admonition-content">

   This field requires a defined domain (for example, `https://example.com`) and the HTTPS protocol. You can't use an IP (for example, `192.0.2.0`) or use Jinjava for defining the domain as a dynamic value.

   </div></div></div>
  
4. **Optional**: Add key-value pairs for headers.
5. **Optional:** In the **Body** section, enter the body of the request.


   <div class="admonition admonition-important"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

   If the webhook requests are used in the workflows triggered by an event, they will be processed in real-time. In the case of webhooks used in the workflows triggered by the [Audience node](/docs/automation/triggers/audience-node), they will be added to a separate queue and the time of processing will depend on load.

   </div></div></div>


### Import and export cURL

In the **Definition** section, you can use the **Import cURL** and **Export cURL** buttons to configure the webhook from a cURL command or to generate a cURL based on the current configuration. This is useful when working from API documentation that provides ready-to-use cURL examples, as it eliminates the need to manually re-enter headers, parameters, and body content.

#### Import

1. Click **Import cURL**.
2. In the **cURL command** field, paste the cURL command.
3. Click **Import**.
    **Result**: The URL, HTTP method, headers, body, and parameters in the configuration form are populated based on the pasted command.
4. Fill out **Webhook name** and optionally **Event name**.  
    Explanation to the fields is available in the ["Define the endpoint" section](#define-the-endpoint).

- If the node already contains a configuration, an **Overwrite settings?** confirmation pop-up appears. Review the **Changes list** to see which fields will be updated, then to apply the changes, click **Yes, overwrite** or to keep the current settings, click **No, cancel**. If the imported command is identical to the current configuration, the **Changes list** displays **No changes**.
- The syntax of the pasted command is validated. If it is invalid, an error is displayed and the import is blocked.

#### Export

This is only possible when the form is filled out.  


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

The exported cURL command contains only data from **URL**, **Headers**, and **Body**. Other fields in the configuration form — such as **Additional event parameters** — are not part of the outgoing request itself, but supplement it by enriching the response event.

</div></div></div>


To export the configuration of the webhook, click **Export cURL**.  
**Result**: A cURL command representing the current webhook configuration is copied to the clipboard.



### Custom response event parameters
You can add up to 10 custom parameters in each event that is generated from the response to the request that was sent. This solution allows for even more precise identification of response events, the creation of more detailed analyses and reports, and more accurate error handling.  

1. To define the custom event parameters, in the **Additional event parameters** section, click **Add parameter**.  
3. In the **Parameter** field, enter the name of the parameter.  
    - The name must not contain special characters or exceed 128 characters
    - The following parameters cannot be sent:
      - `eventUUID`
      - `status`
      - `statusDescription`
      - `uuid`
      - `clientId`
      - `diagramId`
      - `diagramName`
      - `blockId`
      - `blockName`
      - `req`
      - `name`
      - `body`

4. In the **Value** field, enter the parameter value.  
    - The value is always sent as a string when the event's JSON payload is generated. The maximum length of the value is 230 characters.
    - You can use dynamic values in the **Value** field.  

5. If you want to add more parameters, click **Add parameter**, and repeat steps 3-4.  
6. After finishing the configuration of the node, at the bottom of the pop-up, click **Apply**.

### Test integration
---

You can run a test request. If the request body contains a dynamic reference to a profile attribute and/or an event data from preceding nodes, then you can define the context using [test profile data](/docs/settings/configuration/test-profiles). 


<div class="admonition admonition-note"><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2.5"><path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg></div><div class="admonition-body"><div class="admonition-content">

Complete description of the feature is available in [Testing outgoing integrations](/docs/automation/test-requests-for-outgoing-integrations).

</div></div></div>



1. In the **Test integration** section, click **Send test request**.  
    **Result**: A test request builder opens. If:
    - a request body contains dynamic references, the request preview appears after you select the context of test profiles and events.
    - a request body contains static data, the preview of the body request appears immediately.
    <figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/test-request-builder-empty.png" class="large" alt="An empty test request builder"><figcaption>An empty test request builder</figcaption></figure>
2. If your request contains dynamic references (otherwise, the options aren't available):   
    - From the **Test profile** dropdown, select a test profile in the context of whom the test request will be performed.  
    - From the **Event context** dropdown list, you can select a particular occurrence of an event  whose values/information will be used for the test request.  
        1. Select a test profile.  
            **Result**: A history of test profile events appears.  
            <figure><img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/event-stream-test-profile.png" class="large" alt="A stream of events of a test profile"><figcaption>A stream of events of a test profile</figcaption></figure> 
        2. From the list of events, select one whose data you want use as a context. If there is no event you can use, in the upper-right corner of the pop-up, click **Define own event** and provide the body of the event.
        3. Confirm by clicking **Apply**. 
3. Verify the request body. If there is something you want to change, come back to the node settings from previous steps.  
3. If the request body is ready to test, in the upper-right corner, click **Send request**.  
    **Result**: The response section appears and the **Update response event** button becomes active.  
4. Optionally, you can update response event with new parameters by clicking **Update response event** in the upper-right corner.

## Example of use
---



- [Send offline events to Facebook](/docs/automation/sending-offline-transactions-facebook)
- [Send customers to Custom Audience in Facebook](/docs/automation/send-custom-audience-webhook)



<figure>
<img src="/api/docs/image/54176ad07f146575310749eba44b7c2f42c1b327/docs/automation/_gfx/webhook-node-example.png" alt="Example of use" class="large">
<figcaption>Example of an automation process that uses the Outgoing Integration action</figcaption>
</figure>

The purpose of this automation is to send a notification on a Slack channel every time a user submits a form on a website.

1. It starts with a **Profile Event** trigger node. In the settings of the trigger, select the `form.submit` event. This event may not be the Synerise default event. In such case, you need to add this event to Synerise on your own in **Data Modeling Hub > Events**.
2. Add the **Outgoing Integration** action. Configure the Webhook settings by defining the Endpoint URL, body request, and so on.
3. When the message is sent to the Slack channel, the automation process is completed. 

        