How webhooks work
- A call completes (or a run finishes)
- Dograh executes any
webhooknodes in the workflow asynchronously - The payload template is rendered with the run’s context and sent as a JSON
POST(or your configured method) to your endpoint - Non-200 responses are logged but do not block or retry by default (configure
retry_configto change this)
Payload context variables
The following variables are available in yourpayload_template using double-brace syntax (e.g. {{workflow_run_id}}):
| Variable | Type | Description |
|---|---|---|
workflow_run_id | integer | ID of the completed run |
workflow_run_name | string | Name of the run |
workflow_id | integer | ID of the workflow |
workflow_name | string | Name of the workflow |
initial_context | object | Context passed when the call was initiated |
gathered_context | object | Data extracted during the call by agent nodes |
cost_info | object | Call cost breakdown |
annotations | object | QA analysis results (if a qa node is configured) |
recording_url | string | null | Public download URL for the call recording |
transcript_url | string | null | Public download URL for the call transcript |
Example payload template
Authentication
Webhook requests support the following authentication methods, configured via a stored credential:| Type | Description |
|---|---|
NONE | No authentication |
API_KEY | Sends the key in a custom header (e.g. X-API-Key) |
BEARER_TOKEN | Sends Authorization: Bearer <token> |
BASIC_AUTH | HTTP Basic authentication (username + password) |
CUSTOM_HEADER | Any custom header key-value pair |
Receiving webhooks
Your endpoint should:- Accept
POSTrequests withContent-Type: application/json - Respond with a
2xxstatus code promptly (within 30 seconds) - Handle duplicate deliveries idempotently (retries may deliver the same payload more than once)