Skip to main content
HITL can tell your server when a run finishes, so you do not have to poll. There are two ways, with the same body, signature and retries: A run with both gets both.
This page is about HITL calling you. To start a workflow from another system, POST to its webhook trigger URL, or call POST /workflows/:id/run.

The request

status is completed, failed or timed_out. Decisions carry reviewers’ names, not their emails.

Verify the signature

Every delivery is signed with the workflow’s webhook secret (in the editor’s Settings tab). X-HITL-Signature is t=<unix seconds>,v1=<hex>, where v1 is the HMAC-SHA256 of "<t>.<raw body>" keyed with the secret. Compare in constant time, and reject a t more than 5 minutes from your clock.
Use the raw body exactly as received, before any JSON parsing.

Delivery

  • Answer with any 2xx. 408, 429, 5xx and network errors are retried with backoff (10 seconds, growing to an hour between tries) for 24 hours. Any other status stops delivery.
  • A delivery can arrive more than once: deduplicate on the execution id.
  • Only https URLs on public addresses are accepted. Redirects are not followed.
  • GET /executions/:id shows the callback’s delivery under callback: state (queued, delivered, failed), attempts, last_status, last_error.

Managing subscriptions

Revoking the API key that created a subscription ends its deliveries. Make’s Watch Workflow Runs trigger subscribes and unsubscribes itself this way.