Skip to content

Errors & rate limits ​

Error format ​

Every error has the same shape:

json
{
  "error": {
    "code": "validation_failed",
    "message": "to: Invalid phone number",
    "requestId": "req_01J…",
    "details": [{ "path": "to", "message": "Invalid phone number" }]
  }
}

Log requestId and include it when you contact support.

Error codes ​

HTTPcodeMeaning
400bad_requestMalformed JSON or request
422validation_failedBody failed validation; see details
401unauthorizedMissing, invalid, expired or revoked API key
403forbiddenKey is missing the required scope
404not_foundResource doesn't exist in this workspace
409conflictState conflict: no WhatsApp number linked, resending an answered order, resending a verification that is no longer pending
413payload_too_largeBody too large
429rate_limitedToo many requests; retry later
500internal_errorUnexpected error; safe to retry with the same Idempotency-Key
503service_unavailableWhatsApp sending temporarily unavailable

Rate limits ​

LimitValue
New OTP verifications per recipient5 per 10 minutes
New OTP verifications per workspace300 per hour
OTP resend cooldown30 seconds
OTP sends per verification5
Wrong OTP attempts5, then failed
Order confirmation resends5 per order / hour

Messages also use plan credits (1 credit ≈ 1 delivered WhatsApp message). Retries never count twice.

otpera.com · WhatsApp order confirmation & OTP