Error catalog
Every API errCode, its HTTP status and what it means.
Every API response has the shape { errCode, errMsg, data, meta }. errCode: 0 means success; any other value is an error and errMsg explains it (in Spanish). Code against the errCode (it is stable), not against the text or only the HTTP status.
For validation errors, errors tells you the field and the reason, for example {"errors": {"content": ["blocked"]}}.
Authentication and access
| errCode |
HTTP |
Name |
Meaning |
1001 |
401 |
Unauthenticated |
Authentication required |
1002 |
401 |
InvalidToken |
Invalid token |
1003 |
401 |
KeyRevoked |
The API key was revoked or expired |
1004 |
403 |
IpNotAllowed |
Access not allowed from this IP address |
1005 |
403 |
InsufficientScope |
You don't have permission for this action |
1006 |
403 |
PublicKeyOnSecretEndpoint |
This endpoint requires a secret key (sk_); the public key (pk_) only registers devices |
1101 |
401 |
TokenExpired |
The session expired |
1102 |
403 |
MfaRequired |
Two-factor authentication required |
1103 |
401 |
InvalidCredentials |
Incorrect email or password |
1104 |
403 |
EmailNotVerified |
You must verify your email to continue |
1105 |
403 |
AccountLocked |
Account temporarily locked after failed attempts |
1106 |
401 |
InvalidMfaCode |
Invalid verification code |
1107 |
409 |
IdentityLinkRequired |
An account with that email already exists: sign in with your current method and link the provider from Security |
1108 |
422 |
CaptchaInvalid |
Complete the security check (captcha) |
1109 |
401 |
LinkExpired |
The link or code expired or was already used |
1110 |
422 |
WeakPassword |
The password doesn't meet the security policy |
1111 |
403 |
ReauthRequired |
You must authenticate again to continue |
1112 |
403 |
CompanyRequiresMfa |
This company requires two-step verification: enable it in Security to continue |
1113 |
409 |
LastLoginMethod |
You can't remove your last sign-in method |
1114 |
401 |
IdentityTokenInvalid |
Sign-in with the provider couldn't be validated |
1115 |
401 |
PasskeyInvalid |
The passkey couldn't be verified: try again or use another method |
Validation
| errCode |
HTTP |
Name |
Meaning |
2001 |
422 |
FieldRequired |
A required field is missing |
2002 |
422 |
InvalidFormat |
Invalid data format |
2003 |
413 |
PayloadTooLarge |
The request is too large |
2004 |
422 |
PlatformNotSupported |
Unsupported platform |
2005 |
422 |
TokenProviderMismatch |
The token format doesn't match the given provider or platform |
2006 |
422 |
ExpoTokenNotSupported |
Expo tokens (ExponentPushToken) aren't supported: use the native token with getDevicePushTokenAsync() |
2008 |
422 |
PairingCodeInvalid |
Invalid or expired pairing code |
2011 |
422 |
ScheduleInvalid |
Invalid schedule |
2012 |
422 |
TimezoneInvalid |
Invalid time zone |
Limits and plan
| errCode |
HTTP |
Name |
Meaning |
3001 |
429 |
QuotaExceeded |
Your plan's monthly send quota is used up |
3002 |
403 |
DeviceLimitReached |
You reached your plan's device limit |
3003 |
429 |
RateLimited |
Too many requests, try again later |
3004 |
403 |
FeatureNotInPlan |
Your plan doesn't include this feature |
3005 |
403 |
TenantSuspended |
The company is suspended |
3006 |
429 |
TestLimitReached |
You reached this app's daily limit of test sends |
3008 |
422 |
CouponInvalid |
Invalid or expired coupon, or not applicable to this plan |
3009 |
409 |
DowngradeNotAllowed |
Your current usage doesn't fit in that plan |
3010 |
409 |
ExemptionLocked |
The exempt subscription doesn't allow this action: change the exemption |
3011 |
403 |
PlanLimitReached |
You reached a limit of your plan |
3012 |
402 |
SubscriptionInactive |
The company's subscription isn't active: choose a plan to keep sending |
Resources
| errCode |
HTTP |
Name |
Meaning |
4001 |
404 |
AppNotFound |
App not found |
4002 |
404 |
DeviceNotFound |
Device not found |
4003 |
404 |
NotificationNotFound |
Notification not found |
4004 |
409 |
NotCancellable |
The notification can no longer be cancelled |
4005 |
409 |
IdempotencyConflict |
The Idempotency-Key was already used with different content |
4006 |
404 |
CompanyNotFound |
Company not found or no access |
4009 |
409 |
Conflict |
The operation conflicts with the current state |
4098 |
405 |
MethodNotAllowed |
Method not allowed |
4099 |
404 |
NotFound |
Resource not found |
Push credentials
| errCode |
HTTP |
Name |
Meaning |
5001 |
422 |
CredentialMissing |
The app has no credential for this platform |
5002 |
422 |
CredentialInvalid |
The credential isn't valid |
5003 |
422 |
CertificateExpired |
The certificate expired |
5004 |
422 |
BundleIdMismatch |
The bundle ID doesn't match the app's |
5005 |
422 |
P12PasswordWrong |
The .p12 password is incorrect |
| errCode |
HTTP |
Name |
Meaning |
9001 |
500 |
Internal |
Internal server error |
9002 |
503 |
Unavailable |
Service unavailable |