Skip to main content
Webhooks connect Sixtyfour to your systems in both directions: external events start workflows, and Sixtyfour posts results to your server when work completes.

Trigger a workflow from an external event

Build a workflow whose first block is a webhook source, then POST the event data to /workflows/run with your API key:
Each object in webhook_payload becomes a row. Payload rules and the response are in Incoming Webhooks.

Receive async results at your URL

Add webhook_url to any async endpoint. Sixtyfour POSTs the result when the job completes.
Store the task_id so you can match the callback and fall back to GET /job-status/{task_id} if no callback arrives. The supported endpoints and payload fields are in Outgoing Webhooks. To post workflow output instead, end the workflow with an outgoing_webhook block. See Workflow outgoing_webhook block.

Handle deliveries

A receiver verifies the signature, acknowledges fast and processes later:
verify is the function in Signing Secrets. Verify against the raw body before parsing JSON. Use a persistent store for seen_deliveries in production. delivery_key dedupes on the job or run, not event_id: monitor notifications carry no event_id, and Sixtyfour can deliver the same result again with a new event_id.

Test locally

Sixtyfour only delivers to public hosts, and async-job callbacks and test deliveries require HTTPS. Expose your local server through a tunnel such as ngrok or Cloudflare Tunnel and use the tunnel’s HTTPS URL as webhook_url.

Test deliveries

Send a sample delivery to your receiver to check its signature verification and parsing before a real job runs. A test delivery runs no job and uses no credits. GET /webhooks/test-events lists the samples. Each entry has a type, a description, and an example payload. Add ?type=find_email to get that one example payload on its own. POST /webhooks/test-events sends one sample to your URL with the same signing and retries as a real delivery:
delivered is true only when your receiver returned 2xx. status_code is the last attempt’s HTTP status, or null when no response arrived. The call waits for every retry and can take up to 100 seconds. Each call sends a new event, so don’t retry it automatically. Test deliveries carry these headers on top of the delivery headers: The catalog also lists other samples. These type values match deliveries Sixtyfour sends: Test deliveries are rate limited. For error responses, see Handling Errors.

Production checklist

  • Create a signing secret in Settings → Webhooks and reject unsigned deliveries.
  • Return 2xx within 10 seconds, including for events you ignore.
  • Dedupe on the job or run, as delivery_key does above.
  • Poll GET /job-status/{task_id} when a callback is late. Failed jobs send no callback.