Retries that never double-charge, double-run, or double-send.
RFC-compliant Idempotency-Key on every mutation. 24h replay window, body-hash conflict detection, Stripe-grade guarantees.
Networks are unreliable. Your platform shouldn't punish you for admitting it.
A request times out. You retry. Did it execute? Was a run created? Did the webhook fire? Did the customer get charged? Most AI APIs give you no way to know — and no way to replay safely.
Appstrate implements idempotency the way Stripe does, because Stripe got it right a decade ago. Pass Idempotency-Key on any mutating request. First call is executed and cached. Replays return the cached response. Different body with the same key? You get a conflict, not a silent second run.
Set the header. The platform does the rest.
On POST routes (create a run, create a webhook, trigger a schedule), pass Idempotency-Key. The platform acquires a Redis lock, hashes your body, caches the response for 24h. Replay the exact same request and you get the cached result plus Idempotent-Replayed: true. Replay with a different body and you get 409 Conflict.
# First call
POST /api/agents/@acme/refund-triage/run HTTP/1.1
Host: app.appstrate.com
Authorization: Bearer ask_...
Idempotency-Key: 01HX6RTQMXR3H7QKWSJF2E8VCG
Content-Type: application/json
{ "input": { "email_id": "msg_9qp" } }
→ HTTP/1.1 200 OK
Idempotent-Replayed: false
{ "runId": "run_cm1abc123def456" }
# Replay within 24h — same key, same body
→ HTTP/1.1 200 OK
Idempotent-Replayed: true
{ "runId": "run_cm1abc123def456" }What makes it work.
24h replay window
Redis-backed cache. Replay exactly, get exactly the same response back.
Body-hash conflict detection
SHA-256 of the request body. Different body, same key → 409, not silent double-run.
Concurrent-safe
Two simultaneous requests with the same key — one executes, the other waits for the result.
Observable replays
Idempotent-Replayed header on every cached response. Your logs tell the truth.
An API you can retry without flinching.
One header. 24h window. Zero duplicate runs. The boring thing done right.