ActionBoxDOCS

Webhook Operations

Inspect, secure, and recover ActionBox terminal callback deliveries.

An ActionBox callback is a durable, signed delivery of a terminal Action event. The delivery is queued in the same transaction as the terminal state change, so a receiver outage cannot undo a decision.

Delivery lifecycle

StatusMeaningYour action
pendingQueued and waiting for a delivery attemptKeep the receiver available.
retryingA transient attempt failed and another attempt is scheduledFix the receiver and honor the next attempt.
sendingA worker currently owns the delivery leaseDo not start a parallel manual retry.
deliveredThe receiver returned HTTP 2xxDeduplicate the event and apply it once.
failedThe destination or response is permanently invalidFix the receiver/destination, then ask an owner or admin to retry if the delivery is retryable.

Network errors, timeouts, HTTP 429, and HTTP 5xx responses are retried with bounded backoff. Other non-2xx responses fail permanently. A valid Retry-After can postpone the next attempt. The retry window follows the plan (Developer: one day; Pro, Founder, and Team: seven days).

Delivery is at least once. Treat the event id in the JSON body as your replay key and make the handler safe if the same event arrives again. Action outcome and callback delivery are separate records: a callback failure does not change the Action's terminal state.

Inspect the queue

These endpoints require a user session, not a Source key:

curl -fsS "https://api.actionbox.cloud/v1/webhooks?environment=live&status=failed" \
  -H "Authorization: Bearer $ACTIONBOX_USER_TOKEN"

curl -fsS https://api.actionbox.cloud/v1/webhooks/summary \
  -H "Authorization: Bearer $ACTIONBOX_USER_TOKEN"

curl -fsS https://api.actionbox.cloud/v1/webhooks/<delivery_id> \
  -H "Authorization: Bearer $ACTIONBOX_USER_TOKEN"

The list supports environment=live|test|all, an optional delivery status, and a bounded limit. Detail includes the Action ID, event ID, destination scheme/host/path, attempt number, status, HTTP status, error code, timestamps, and attempt history. Query data is sanitized; the response body and callback secret are not exposed.

Retry a failed delivery

After the receiver is ready, an owner or admin can request a retry:

curl -fsS -X POST \
  https://api.actionbox.cloud/v1/webhooks/<delivery_id>/retry \
  -H "Authorization: Bearer $ACTIONBOX_USER_TOKEN"

409 WEBHOOK_IN_PROGRESS means a worker currently holds the delivery lease; read it again later. 409 WEBHOOK_NOT_RETRYABLE means the delivery was already marked delivered and cannot be replayed through this endpoint. A failed delivery can be requeued after the receiver is fixed. Do not create a new Action just to force a callback retry.

Receiver requirements

  1. Accept a public HTTPS request without credentials in the URL.
  2. Read the exact raw body and verify X-Actionbox-Signature using the per-Source webhook secret before parsing JSON.
  3. Reject stale X-Actionbox-Timestamp values and compare signatures in constant time.
  4. Persist the event ID transactionally and return a quick 2xx after accepting it. Duplicate IDs should return a safe 2xx without repeating side effects.
  5. Keep the secret out of logs, traces, browser code, and error responses.

The signature is HMAC-SHA256 over "{timestamp}." + raw_request_body and is sent as X-Actionbox-Signature: v1=<hex>. The complete verification example is in Webhooks and callbacks.

Common delivery issues

SymptomLikely causeFix
Many retrying deliveriesReceiver timeout, 429, or 5xxReturn a fast 2xx after durable acceptance; move slow work to a queue.
Immediate failed deliveryInvalid URL, redirect, credential in URL, or non-retryable responseUse a public HTTPS endpoint with no redirect or URL credential.
Receiver says “bad signature”JSON was parsed/re-serialized before verification, wrong Source secret, or stale timestampVerify the original bytes and timestamp; rotate the Source webhook secret if exposure is suspected.
Event appears twiceAt-least-once delivery or a manual retryDedupe by event id; do not dedupe by arrival time.
Test callback never arrivesTest-key callbacks are not delivered by the hosted production serviceInspect the test Action explicitly. Use a live Action against a controlled receiver when you need to verify callback delivery.
Callback is delivered but operation did not runReceiver acknowledged before durable processingStore the event before returning 2xx and reconcile failed downstream work separately.

These are application callbacks

The deliveries documented here are terminal callbacks for your Actions. They are Source-scoped and use the X-Actionbox-* headers shown above. Point this receiver only at the callback URL configured for the Action.

On this page