Developer docs

Rate limits & idempotency

Per-key rate limits with standard headers, and Idempotency-Key support so retries never double-send.

Two request-level features make automating against the API safe: rate limits tell you how much budget you have, and idempotency lets you retry sending endpoints without sending twice.

Rate limiting

Each API key is limited to 300 requests per 60 seconds (5 req/s sustained). Every response carries the current budget:

HeaderMeaning
X-RateLimit-LimitThe per-window ceiling.
X-RateLimit-RemainingRequests left in the current window.
X-RateLimit-ResetSeconds until the window frees a slot.

Going over the limit returns 429 Too Many Requests with a Retry-After header (in seconds). Wait that long, then retry.

Idempotency

Creating a conversation and replying both send email, so a blind retry after a network blip could send twice. Prevent that by sending an Idempotency-Key header — any string unique to the operation (a UUID is ideal):

POST /conversations/:id/reply
Authorization: Bearer rp_live_…
Idempotency-Key: 3f9c1e7a-9b2d-4c8e-a1f0-6d5b4c3a2e10
Content-Type: application/json
  • The first request runs normally; its response is stored against the key.
  • A retry with the same key and body replays that stored response — no second email.
  • Reusing the key with a different body returns 409 Conflict.
  • A retry sent while the first is still in flight returns 409 — wait, then retry.

Keys are remembered for 24 hours. A request without the header is processed normally (not deduplicated), so always send one whenever a retry is possible.