2026 API client checklist from three open specs, and where Sume stands

Three public specs shape a 2026 API client: RateLimit headers, Idempotency-Key, Standard Webhooks. What each says, and what Sume's API does instead.

4 min readSume
All posts

A 2026 API client needs three habits that three public specs describe: read rate-limit headers instead of guessing, send an idempotency key on every unsafe retry, and verify signed webhooks against the raw body. Sume supports the intent of all three but not the exact wire formats, so write the client against Sume's documented headers.

None of the three specs is a finished standard this week. The RateLimit header draft is still an Internet-Draft, the Idempotency-Key draft has expired, and Standard Webhooks is a community specification, so copying a header name from one of them into a Sume client will not work.

What each spec says, and what Sume does

The first three columns come from the vendor pages linked in the sources (read 2026-10-03). The last column is from Sume's errors and rate limits and webhooks pages.

Three API-client specs against Sume's documented behavior (read 2026-10-03)
TopicWhat the spec definesWhat Sume does
Rate limitsRateLimit-Policy carries a quota q and optional window w; RateLimit carries remaining r and optional reset t. Draft 11 is dated May 23, 2026Responses can carry ratelimit-limit, ratelimit-remaining, ratelimit-reset and, on a 429, retry-after
IdempotencyAn Idempotency-Key header; a missing key is a 400, a reused key with a different payload a 422, a concurrent duplicate a 409. The draft expired April 18, 2026Idempotency-Key on submits; the same key on a different payload is 409 idempotency_conflict
Webhook headerswebhook-id, webhook-timestamp and webhook-signature, signed over id, timestamp and payloadx-sume-webhook-timestamp and x-sume-webhook-signature, signed over timestamp and raw body, plus a secret fingerprint
Signature formatv1 is HMAC-SHA256 as base64 with a whsec_ secret prefix; v1a is Ed25519sume-v1= followed by a hex HMAC-SHA256, with several comma-separated entries during rotation
DedupeUse the webhook-id headerUse job_id for job events and request_id (equal to run_id) for run events

What this means in code

Rate limits: read ratelimit-remaining instead of counting requests, back off on retry-after, and note that a 429 names its bucket in error.details.scope, either read or write. Reads and writes have separate budgets, so a poll loop cannot 429 your submits; the numbers are in the per-plan table.

Idempotency: generate the key once per business intent, persist it before the first attempt and reuse it for every retry. Reuse a key only for the same payload, because a changed body is a conflict, not a replay. Deriving the key from a business key and a payload hash shows one way.

Webhooks: verify the HMAC over <timestamp>.<raw_body>, reject stale timestamps, accept any one entry of the signature header, and dedupe on the id field named above. If you later add a Standard Webhooks provider, keep the verifiers separate, because the header names, the signed string and the encoding all differ.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume