Skip to main content

Errors worth branching on

These five failures cover the pool-claim (POST /api/v1/sender-pools//claim), per-send. Each block below is a full { error, meta } envelope as the API returns it, and the matrix at the bottom answers retry vs surface for the same five classes. For the platform-wide decision table these branches plug into, see the error handling guide.

401 β€” Unauthorized

A 401 on this page is the bearer key failing before the route ran β€” it never means the resource is wrong. Rotate the key or re-mint the scoped token; retrying the same request changes nothing.

403 β€” Forbidden

A 403 means the key authenticated but the operation is gated by scope β€” check the key’s scopes on the developer page; a 403 is never a data-not-found shape.

422 β€” Schema

A 422 means the payload did not match the request schema β€” branch on error.details.field and resend with an upper-case ISO-3166 alpha-2 country code instead of blind-retrying the same body.

429 β€” Rate

The Retry-After header and error.details.retry_after are both set on every 429 β€” resend the SAME request after the lower of the two.

409 β€” Conflict

Refill the pool from the dashboard β€” an idempotent retry changes nothing.

60-second retry matrix