Error codes
Every error has the same shape:
{"errors": [{"code": "application_credit_exhausted", "message": "The application OTP wallet is empty. Transfer credit from the company wallet."}]}| Code | HTTP | Meaning |
|---|---|---|
invalid_key |
401 | Missing, malformed or revoked API key |
rate_limited |
429 | Too many requests for this key (see Retry-After) |
target_required |
422 | The key covers several apps; send target |
target_invalid |
422 | target isn't app or app:branch |
target_mismatch |
422 | app_id and target name different apps |
application_credit_exhausted |
402 | OTP only: this app's balance is empty; transfer credit from the company wallet |
quota_exceeded |
402 | OTP only: a company or legacy monthly quota cannot cover the request |
platform_credit_exhausted |
503 | Takeed's provider inventory is temporarily empty; contact support—the app is not charged |
platform_credit_closed |
409 | The same provider reservation was already refunded; retry only with a new request |
invalid_request |
422 | A field is missing or malformed |
not_found |
404 | No such app, branch or resource for this key (SDK: no app with this App ID, or no such subscription) |
invalid_ip |
422 | user_ip is missing, private, reserved, or your own server's IP |
invalid_phone |
422 | phone isn't E.164 |
blocked_country |
422 | The app doesn't send to that country code |
phone_rate_limited |
429 | Too many codes for this number |
ip_rate_limited |
429 | Too many codes from this IP |
ip_blocked |
429 | Too many refused requests from this IP |
app_rate_limited |
429 | The app is sending too many codes right now |
code_required |
422 | Managed mode is off: send code |
invalid_code_format |
422 | code must be 4–10 letters or digits |
sender_suspended |
503 | The app's sender is suspended and fallback is off |
not_managed |
422 | Verify deliver-mode codes on your side |
code_invalid |
422 | Wrong code |
code_expired |
410 | The code expired |
code_not_delivered |
410 | The code was never delivered |
too_many_attempts |
429 | Too many wrong attempts |
already_verified |
409 | The code was already used |
no_audience |
422 | Choose segments, filters or External IDs |
segment_not_found |
422 | Unknown segment name |
segment_exists |
409 | A segment with that name exists |
invalid_filter |
422 | Unsupported filter |
invalid_send_after |
422 | Bad date, or more than 30 days ahead |
not_cancelable |
409 | Only scheduled or sending notifications can be canceled |
payload_too_large |
413 | (SDK) The request body is over 64 KB |
too_many_tags |
422 | A user holds at most 100 tags |
segment_limit |
422 | An app holds at most 500 segments |
origin_not_allowed |
403 | (SDK) The website isn't in the app's allowed origins |
invalid_token |
422 | (SDK) The push token or endpoint is invalid |
unknown_platform_config |
422 | (SDK) No Firebase project or Bundle ID in the app or the device's branch matches the device |
identity_verification_failed |
401 | (SDK) Missing or wrong identity_hash |
invalid_external_id |
422 | (SDK) External IDs are 1–128 characters |