Skip to main content
Every error has the same shape:
message is at most 200 characters and never echoes your input. retryable: true means the same request may succeed later. next is a short instruction for your next step (at most 200 characters). For actions, check whether anything happened before retrying; keep the same Idempotency-Key. effect: "none" means nothing was sent, charged or created: every source refused before acting, or the request was refused before anything ran (validation, approval, credit, limits). It is safe to change the request and try again. When effect is absent, a send, payment or purchase may have happened: check before retrying, and retry with the same Idempotency-Key. A failed job’s error carries the same field.

In the SDK

The SDK throws PramaanError with code, message, next, retryable, requestId, status, effect ("none" or absent) and, for connection_required, slot.
The SDK retries 429 and 5xx responses (and network failures) for read-only capabilities, up to two times with backoff, sending the same Idempotency-Key each time (a retry that finds the first attempt still in progress reports the first attempt’s error). It never retries capabilities with an external effect, such as sending an email; you decide when to retry those.

Default next instructions

When retryable is false, these codes get a default that never asks for a retry: