Stafett hosts the queue and delivery machinery for you. Send us a payload and an HTTPS callback URL; we handle retries, exponential backoff, Standard Webhooks signing, delivery history, and the dead-letter queue.
curl -X POST https://api.stafett.dev/enqueue \
-H 'Authorization: Bearer stf_…' \
-H 'Content-Type: application/json' \
-d '{"callback_url":"https://api.example.com/hooks/ship","payload":{"order":42}}'
Delivery is at-least-once: a callback can arrive more than once, so your handler must be idempotent.
Five attempts by default, exponential backoff, applied only to failures worth repeating. Every attempt records its status code, latency, and response.
Standard Webhooks HMAC over the exact bytes we send. Verify with an off-the-shelf library, not hand-rolled crypto.
Exhausted jobs are held, not dropped. Replay one or a whole selection once the endpoint is healthy again.
GET /jobs/{id} reports queued, delivering, delivered, retrying, or dead. Call now, fetch later.
Inspect the queue we run for you: live throughput and failure metrics, a searchable job ledger, delivery logs, and dead-letter replay.
HTTPS-only callbacks. Payloads up to 1 MiB of JSON. Up to 50 forwarded headers. API tokens are shown once and revocable.
Every delivery carries the three Standard Webhooks headers. The webhook-id is the job id and stays the same across retries: use it as your idempotency key.
POST /hooks/ship HTTP/1.1
webhook-id: 018f3b7c-6c4a-7b32-9f21-2c0a5e4d9b11
webhook-timestamp: 1770000000
webhook-signature: v1,g0hM9SsE+OTPJTGt/tmIKtSyZlE3uFJELVlNIOLJ1OE=
content-type: application/json
{"order":42}
Stafett is a delivery queue, not a compute platform or a workflow engine. We store the job and POST to your HTTPS callback; your service does the work. Reach for something else when you need: