Outbound Webhook Step

Sends HTTP requests to external endpoints as part of a workflow. Use this step to integrate with third-party APIs, push data to external systems, or trigger actions in other services.

Top-level properties

nametyperequiredconstraints
requestRequestyesSee Request Object below
listeningModeEnabledbooleannodefault: false
requestPayloadstringnoExample request payload for design-time testing
responsePayloadstringnodefault: empty string; example response payload for design-time
mappableFieldsarray[ExtractedField]nodefault: empty array
waitForResponsebooleannodefault: false

Notes

  • listeningModeEnabled toggles whether the step exposes mappableFields for downstream mapping.
  • requestPayload stores an example request payload for design-time testing and documentation purposes.
  • responsePayload stores an example response payload (default: empty string) for design-time testing and documentation purposes.
  • waitForResponse determines if the workflow should wait for the HTTP response before continuing.
  • mappableFields describe fields extracted from the response that can be mapped in later steps.

When to use

  • Send data to, and pull data in from, external APIs using GET, POST, PUT, or DELETE methods
  • Upload files to external endpoints using binary or multipart requests
  • Integrate with services that do not have a dedicated workflow step
  • Extract and map response fields for use in downstream steps

Request Object

Base properties shared by all HTTP methods.

nametyperequiredconstraints
methodstringyesenum: GET, POST, PUT, DELETE
urlstringyesSupports path placeholders like {userId}
authenticationAuthenticationyesSee Authentication below
pathParamsarray[KeyValueMapping]noPath parameter substitutions
queryParamsarray[KeyValueMapping]noQuery string parameters
headersarray[KeyValue]noCustom HTTP headers
bodyRequestBodyvariesSee Body Requirements below

KeyValueMapping

nametyperequiredconstraints
keystringyes
valuestringyesSupports mapping syntax

KeyValue (for headers)

nametyperequiredconstraints
keystringyes
valuestringyes

Note: Unlike pathParams and queryParams, headers do not support mapping placeholders and must be static string values.

Body Requirements by Method

methodbody
GETNot allowed
POSTRequired
PUTRequired
DELETEOptional

Authentication

nametyperequiredconstraints
typestringyesenum: NONE, AUTHENTICATED
connectionIdstring or nullyesReference to a stored connection

Notes

  • NONE indicates no authentication is applied.
  • AUTHENTICATED uses a pre-configured connection identified by connectionId.

Request Body Modes

The body field uses a discriminated union based on requestMode.

RAW Mode

Send raw content as JSON or plain text.

nametyperequiredconstraints
requestModestringyesliteral: RAW
contentTypestringyesenum: JSON, TEXT
contentstring or objectnoSupports mapping placeholders

Notes

  • When contentType is JSON, content can be a string with mapping placeholders, a JSON object with nested values (all string values support mapping), or omitted entirely.
  • When contentType is TEXT, content must be a string (with mapping support) or omitted.
  • String values support {{Step.Field}} mapping placeholders.

MULTIPART Mode

Send form data as multipart content.

nametyperequiredconstraints
requestModestringyesliteral: MULTIPART
contentarray[KeyValueMapping]yesKey-value pairs for form fields

RAW_BINARY Mode

Send a file as the raw request body.

nametyperequiredconstraints
requestModestringyesliteral: RAW_BINARY
rawBinaryFileContextFile or mappingyesFile to upload (can be a ContextFile object or a mapping placeholder)

ContextFile

ContextFile has two variants. Use variant A (with id) or variant B (with downloadUrl), not both.

nametyperequirednotes
idstringyes (variant A only)Required if using variant A
downloadUrlstringyes (variant B only)Required if using variant B
namestringyes
metadataFileMetadatano

FileMetadata

nametyperequired
contentTypestringno
sizenumberno
createdAtstringno
updatedAtstringno

ExtractedField

Fields extracted from the response for downstream mapping.

nametyperequired
keystringyes
labelstringyes
typestringyes
exampleValuestring, number, boolean, or nullno

Mapping Format

String values throughout the configuration support dynamic placeholders using the format:

{{`StepName`.`FieldName`}}

For example: {{Form.userName}} or {{DataCapture.email}}

Minimal example (JSON) — GET

{
  "request": {
    "method": "GET",
    "url": "https://api.example.com/users",
    "authentication": { "type": "NONE", "connectionId": null }
  }
}

Minimal example (JSON) — POST with RAW body

{
  "request": {
    "method": "POST",
    "url": "https://api.example.com/webhook",
    "authentication": { "type": "NONE", "connectionId": null },
    "body": {
      "requestMode": "RAW",
      "contentType": "JSON",
      "content": "{\"message\": \"Hello\"}"
    }
  }
}

Full example (JSON) — POST with JSON object body

{
  "request": {
    "method": "POST",
    "url": "https://api.example.com/users/{userId}",
    "authentication": { "type": "AUTHENTICATED", "connectionId": "my-api-connection" },
    "pathParams": [
      { "key": "userId", "value": "{{`Form`.`userId`}}" }
    ],
    "queryParams": [
      { "key": "format", "value": "json" }
    ],
    "headers": [
      { "key": "X-Custom-Header", "value": "custom-value" }
    ],
    "body": {
      "requestMode": "RAW",
      "contentType": "JSON",
      "content": {
        "name": "{{`Form`.`userName`}}",
        "email": "{{`Form`.`userEmail`}}",
        "metadata": {
          "source": "workflow",
          "requestId": "{{`Form`.`requestId`}}"
        }
      }
    }
  },
  "waitForResponse": true,
  "listeningModeEnabled": true,
  "mappableFields": [
    { "key": "id", "label": "User ID", "type": "string", "exampleValue": "usr-12345" },
    { "key": "status", "label": "Status", "type": "string", "exampleValue": "created" }
  ]
}

Example (JSON) — MULTIPART body

{
  "request": {
    "method": "POST",
    "url": "https://api.example.com/submit",
    "authentication": { "type": "NONE", "connectionId": null },
    "body": {
      "requestMode": "MULTIPART",
      "content": [
        { "key": "name", "value": "{{`Form`.`userName`}}" },
        { "key": "description", "value": "Static description" }
      ]
    }
  }
}

Example (JSON) — RAW_BINARY file upload

{
  "request": {
    "method": "POST",
    "url": "https://api.example.com/upload",
    "authentication": { "type": "AUTHENTICATED", "connectionId": "file-api" },
    "body": {
      "requestMode": "RAW_BINARY",
      "rawBinaryFile": {
        "id": "file-123",
        "name": "document.pdf",
        "metadata": {
          "contentType": "application/pdf",
          "size": 1024000
        }
      }
    }
  }
}

Example (JSON) — RAW_BINARY with mapped file

{
  "request": {
    "method": "PUT",
    "url": "https://api.example.com/files",
    "authentication": { "type": "NONE", "connectionId": null },
    "body": {
      "requestMode": "RAW_BINARY",
      "rawBinaryFile": "{{`DataCapture`.`uploadedDocument`}}"
    }
  }
}

Example (JSON) — DELETE with optional body

{
  "request": {
    "method": "DELETE",
    "url": "https://api.example.com/resources/{resourceId}",
    "authentication": { "type": "AUTHENTICATED", "connectionId": "api-connection" },
    "pathParams": [
      { "key": "resourceId", "value": "{{`Form`.`resourceId`}}" }
    ],
    "body": {
      "requestMode": "RAW",
      "contentType": "JSON",
      "content": "{\"reason\": \"cleanup\"}"
    }
  }
}