Skip to main content
Instead of polling GET /v2/action-runs/{id} for every result, you can include a callback_url in your request. When the run reaches a terminal state, Zapier POSTs the result directly to your endpoint. This is the recommended approach at high volumes — polling creates one request per run, while callbacks let Zapier push results to you.

Adding a Callback URL

Include the optional callback_url field in your POST /v2/action-runs request:
The response is unchanged — you receive a run ID immediately while Zapier executes the action asynchronously:

Validation Rules

The callback_url must meet these requirements, or the request returns 400 Bad Request:

Callback Payload

When the action reaches a terminal state, Zapier sends a POST to your callback_url. Your endpoint must return a 2xx response to acknowledge receipt.

Success

The id in the payload matches the run ID returned by the original POST /v2/action-runs response. You can use the same callback_url for every action run and dispatch on id to correlate each callback with its originating request.

Error


Security

Verifying Callback Authenticity

Each callback includes a Zapier-Callback-Signature header containing a JWT signed with Zapier’s private key. Verify it using Zapier’s public keys from our JWKS endpoint:

Replay Protection

The JWT includes iat and exp claims. Both PyJWT and jose validate exp automatically and will throw on an expired token — no manual timestamp check required. Callbacks are valid for 5 minutes from issuance.

Reliability

Retry Behavior

Zapier retries on 5xx responses and network errors using exponential backoff, up to 3 total attempts. Retries happen quickly (within seconds). 4xx responses are not retried. If your endpoint returns a 4xx, the callback is immediately marked failed — fix the endpoint issue and fall back to polling to retrieve the result. After all retries are exhausted, the callback is marked failed. You can still retrieve the result by polling GET /v2/action-runs/{id}.

Idempotency

Network issues may occasionally cause your endpoint to receive the same callback more than once. Deduplicate on the run id in the payload body.

Failure Modes


Fallback: Polling

Callbacks are best-effort. If your endpoint is unavailable and retries are exhausted, fall back to polling:
See Retrieving Action Run Results for full details.