Skip to main content

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 optional webhook_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 optional webhook_url parameter to your async request:
The async endpoint immediately returns a 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 and outgoing_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_webhook block enforces this through its URL validation.
  • Match incoming deliveries against the task_id or run_id you 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
For async jobs:
For workflow runs, see the status and download endpoints in Workflow Execution.