Getting Started

Errors & Rate Limits

Stable error codes returned in the error.code field of the API envelope.

Error codes

CodeHTTPDescription
unauthorized 401 Missing or invalid credentials.
invalid_credentials 401 client-id / client-secret do not match.
invalid_token 401 OAuth bearer token expired or revoked.
ip_not_whitelisted 401 Caller IP is not on the account whitelist (API key auth).
insufficient_scope 403 Token or key lacks the required scope.
subscription_required 403 Active plan with API access is required.
billing_blocked 403 WhatsApp Cloud billing is not eligible for this number.
rate_limit_exceeded 429 More than 120 requests per minute for this account.
not_found 404 Resource not found or not owned by the account.
validation_error 422 Request parameters failed validation.
duplicate_contact 409 Contact with this phone already exists.
marketing_suppressed 422 Contact opted out of marketing messages.
capability_error 422 Operation not supported on this channel type.
feature_disabled 403 The channel type (Cloud / Device QR / Coexistence) is not available in the account plan or platform config.
limit_reached 403 The plan's WhatsApp account quota (account_limit) is exhausted.
duplicate_device 409 This phone number is already connected as a device channel.
invalid_channel_type 422 Operation only applies to Device (QR) channels.
unsupported_type 422 POST /devices only creates type=device. Cloud numbers use hosted onboarding sessions.
return_url_not_allowed 422 return_url host is not among the redirect URIs registered on your developer app.
gowa_error 502 The WhatsApp device service failed to process the request. Retry later.
qr_failed 422 QR code generation failed for this device.
pairing_failed 422 Pairing code generation failed — try the QR code instead.
invalid_phone 422 Phone number could not be normalized or is invalid.
user_error 401 Credentials did not resolve to an API user.
send_failed 422 Upstream WhatsApp send failed; inspect message details / Meta error.
exception 500 Unexpected server exception while processing the request.

Rate limiting

Default: 120 requests / minute / account. Back off exponentially when you receive 429 / rate_limit_exceeded.

Billing gate

Cloud API payment eligibility Outbound Cloud sending may return billing_blocked when Meta payment eligibility for the WhatsApp number is not satisfied. Resolve billing in Meta Business Manager, then retry.

Marketing opt-out

marketing_suppressed MARKETING template sends may return marketing_suppressed when the contact opted out for that WhatsApp number. Do not retry the same MARKETING template until the contact opts back in; use UTILITY / AUTHENTICATION for transactional traffic instead.

Pagination

List endpoints return a pagination object with current_page, last_page, and total. Pass page and per_page (max 100 where documented).