# Receive callback from external system

Receive workflow completion callback from external systems (e.g., n8n).
URL format: /hooks/{projectKey}/executions/{executionId}/callback
Security:
- Project key identifies tenant (RLS enforces isolation)
- Execution ID is UUIDv4 (unguessable)
- Execution must be < 1 hour old
- Execution cannot receive multiple callbacks
No authentication required - security via execution ID secrecy + RLS.

Endpoint: POST /hooks/{projectKey}/executions/{executionId}/callback
Version: 2.0.53
Security: projectKey

## Path parameters:

  - `executionId` (string, required)
    Webhook execution ID

  - `projectKey` (any, required)
    Project API key (same as in JWT callbackUrl)

## Request fields (application/json):

  - `status` (string, required)
    Callback status from external workflow
    Enum: "NONE", "SUCCESS", "FAILED", "CANCELLED"

  - `result` (object)
    Result data from external workflow

  - `error` (string)
    Error message if workflow failed

## Response 200 fields (application/json):

  - `id` (string, required)
    Execution ID

  - `webhookId` (object)
    Webhook ID (set for proxy executions)

  - `outboxEventId` (object)
    Outbox event ID (set for outbox dispatcher deliveries)

  - `method` (string, required)
    HTTP method
    Example: POST

  - `targetUrl` (string, required)
    Target URL at time of execution

  - `status` (string, required)
    Execution status
    Enum: "PENDING", "SUCCESS", "FAILED", "BLOCKED"

  - `responseStatusCode` (number)
    HTTP response status code

  - `durationMs` (number)
    Duration in milliseconds

  - `sourceIp` (string, required)
    Source IP of the request

  - `message` (string)
    Error or status message

  - `startedAt` (string, required)
    When execution started

  - `completedAt` (object)
    When execution completed

  - `callbackStatus` (string)
    Callback status from external workflow
    Enum: "NONE", "SUCCESS", "FAILED", "CANCELLED"

  - `callbackResult` (object)
    Callback result data from external workflow

  - `callbackReceivedAt` (object)
    When callback was received

## Response 201 fields (application/json):

  - `id` (string, required)
    Execution ID

  - `webhookId` (object)
    Webhook ID (set for proxy executions)

  - `outboxEventId` (object)
    Outbox event ID (set for outbox dispatcher deliveries)

  - `method` (string, required)
    HTTP method
    Example: POST

  - `targetUrl` (string, required)
    Target URL at time of execution

  - `status` (string, required)
    Execution status
    Enum: "PENDING", "SUCCESS", "FAILED", "BLOCKED"

  - `responseStatusCode` (number)
    HTTP response status code

  - `durationMs` (number)
    Duration in milliseconds

  - `sourceIp` (string, required)
    Source IP of the request

  - `message` (string)
    Error or status message

  - `startedAt` (string, required)
    When execution started

  - `completedAt` (object)
    When execution completed

  - `callbackStatus` (string)
    Callback status from external workflow
    Enum: "NONE", "SUCCESS", "FAILED", "CANCELLED"

  - `callbackResult` (object)
    Callback result data from external workflow

  - `callbackReceivedAt` (object)
    When callback was received

