Use Case
Sixtyfour POSTs to your URL when work completes — so you can react in real time instead of polling. Outgoing webhooks come from two sources, both delivered through the same signed, retried HTTP pipeline:
Headers, signing, retry behavior, and verification are identical for both sources — only the payload shape differs.
Source 1: Async-job webhooks
All async enrichment endpoints accept an optionalwebhook_url parameter. When the job finishes, Sixtyfour POSTs the result to that URL instead of requiring you to poll /job-status/{task_id}.
Supported endpoints
Request
Add the optionalwebhook_url parameter to your async request:
task_id:
Payload — successful job
Payload — failed job
Payload fields
Source 2: Workflow outgoing_webhook block
Add an outgoing_webhook block to a workflow to POST the full run result to an external URL when the workflow completes. One request per workflow run, not per row.
Block specs
The block also adds three columns to the workflow output dataset:
webhook_status_code, webhook_response, and webhook_success.
Payload envelope
Payload fields
Shared delivery infrastructure
Everything below applies to both sources above.Headers
When your org has a signing secret configured, every delivery includes:
Until you create a signing secret, deliveries are sent unsigned for backward compatibility.
Signing and verification
One signing secret per organization covers all outgoing webhook traffic — async-job webhooks andoutgoing_webhook blocks alike. Generate it in the dashboard at Settings → Webhooks.
See Signing Secrets & Verification for the full HMAC-SHA256 verification algorithm, working Python (Flask) and Node.js (Express) code samples, rotation behavior, and fail-closed semantics.
Retry behavior
If your endpoint is unavailable or returns a non-2xx status code, we retry delivery with exponential backoff:
If all retries fail, the webhook is marked as undelivered. The job or workflow itself remains successful and results can still be retrieved via the polling endpoints.
Best practices
- Return a 2xx status code within 10 seconds. Process the payload asynchronously if needed — returning non-2xx triggers retries even for events you intend to ignore.
- Dedupe with
Sixtyfour-Event-Id. Retries can cause the same event to arrive more than once, so treat the event ID as your idempotency key. - Use HTTPS endpoints for payload security. The
outgoing_webhookblock enforces this through its URL validation. - Match incoming deliveries against the
task_idorrun_idyou initiated and drop unexpected payloads silently with a 2xx response.
Fallback: polling
Webhooks are optional. You can always poll for results if:- Your infrastructure doesn’t support inbound webhooks
- Webhook delivery fails after all retries
- You need to retrieve results at a later time