Reference

Errors

Every error the API returns has an HTTP status and a stable code. General codes can come from any call; the others belong to one product.

General error codes

Every error is a flat JSON object: code, message (follows Accept-Language), messageEn, messageFr, statusCode, and an optional details field with more about what failed. A malformed request, such as a missing field or a value outside its documented bounds, returns 422 VALIDATION_ERROR with details naming the field. A request the framework itself rejects before your code runs, such as invalid JSON (400), a body over the size limit (413) or an unsupported content type (415), returns a Fastify FST_ERR_* code with an English-only message instead.

HTTPCodeMeaning
401UNAUTHORIZEDMissing or invalid API key
401API_KEY_REVOKEDThis API key has been revoked. Use a different key.
402INSUFFICIENT_BALANCEAccount balance too low
402RENT_OWEDRent is owed on a number released while suspended. Paid sends and number requests are refused until a top-up pays it
402PAYMENT_REQUIREDThe account has not completed its first top-up. Live keys are blocked until then except a few account and pricing reads; test keys are unaffected.
403FORBIDDENThe API key lacks the permission this action needs, skip_consent_check was sent with a live key, the account is suspended or closed (see details.reason), or the id in the path belongs to another account
403LIVE_KEY_REQUIREDA test key was used for something only a live key can do.
403PERMISSION_ESCALATIONA new or rotated key asked for permissions broader than the caller's own, without a password step-up.
403KEY_FENCEDThis key is restricted by its own allow or deny lists or by default-deny, so it cannot change those lists or the groups and contacts they include, change any key’s list settings, create keys, or rotate any key but itself.
403ACCOUNT_NOT_VERIFIEDThe account has not verified an owner phone number yet, required before a live send.
403ACCOUNT_EMAIL_NOT_VERIFIEDThe account has not verified its email address yet, required before creating or rotating an API key, live or test, or connecting an app in live mode.
403BUSINESS_VERIFICATION_REQUIREDRequests for more numbers, a higher sending volume, higher top-up limits and toll-free verification need a verified business.
403SENDING_PAUSEDLive sending is paused on this account (details show when it resumes and why)
404NOT_FOUNDNo resource matches the given id.
409DEAD_LETTER_ALREADY_REPLAYEDThis event was already replayed, or a replay of it is in progress. Nothing was sent, and retrying won't help.
409CONFLICTA resource with that identifier already exists, or a key rotation failed because the key was already revoked, is a session key, or another request rotated it first
409BUSINESS_VERIFICATION_NOT_EDITABLEThe business verification profile is in review, verified or revoked, so it cannot be changed or submitted.
409TOPUP_CAP_REQUEST_PENDINGA top-up limit request is already pending.
422VALIDATION_ERRORRequest body or query failed validation (see details)
422IDEMPOTENCY_KEY_RESERVEDThe Idempotency-Key starts with notify:, a prefix HonkIO reserves for its own sends. Use a key with a different prefix.
422SIGNUP_CHALLENGE_REQUIREDSignup needs a solved, unused signup challenge from GET /v1/accounts/signup-challenge, sent as altcha (details.reason: missing, invalid or reused)
422WEBHOOK_LIMIT_REACHEDReached the limit of 10 webhook endpoints per account. Delete one before registering another
422TEMPLATE_CHANNEL_MISSINGA send named a template that has no part for its channel in any language. details.channel names the channel. A missing translation never causes it: the default language's part is used instead.
422EMAIL_TEMPLATE_NOT_PUBLISHEDThe template has no published version yet. Publish it before sending with it from a live key. A test key sends the draft and never gets this error.
422EMAIL_TEMPLATE_VARIABLE_MISSINGA template variable has no value and no fallback. details.keys lists the missing ones.
422EMAIL_RENDER_FAILEDThe content could not be rendered: a variable uses syntax other than the plain double-brace form, or the text grew past its size limit once the variables were filled in.
422TEMPLATE_LIMIT_REACHEDThis account has reached the limit of 200 templates. Delete one to create another.
422LIVE_MODE_REQUIREDThis action needs a live key. Toll-free verification, for one, exists in live mode only.
429RATE_LIMITEDToo many requests. Slow down
500INTERNAL_ERRORAn unexpected server error occurred. Retry
502WEBHOOK_REPLAY_FAILEDThe endpoint did not accept the replay. The event stays in the dead-letter queue
503SERVICE_UNAVAILABLENew registrations are temporarily disabled (POST /v1/accounts), or phone verification is temporarily unavailable (POST /v1/accounts/:id/phone-verification). Retry later

Codes that belong to one product have their own sections below: SMS error codes and email error codes.

Getting 500 or 503 answers you can’t explain? status.honkio.ca shows live checks of the API and sending, and any incident we are working on.

SMS error codes

The codes below are specific to SMS, phone numbers, verification and CASL. Any call can also answer with the codes in the general section above, such as VALIDATION_ERROR, INSUFFICIENT_BALANCE and NOT_FOUND.

HTTPCodeMeaning
403NUMBER_LIMIT_REACHEDAccount has reached its phone number limit
403PHONE_NUMBER_NOT_OWNEDThe from number is not provisioned on this account.
403ALLOW_LIST_BLOCKEDRecipient is not on the API key's ALLOW list
403DENY_LIST_BLOCKEDRecipient is on the API key's DENY list
403SEND_LIMIT_REQUEST_TOO_EARLYVolume requests open once the account's probation period is over.
403TOLL_FREE_NOT_VERIFIEDThe toll-free number is not verified for SMS yet. Apply for verification, then send once it is approved.
403BUSINESS_NUMBER_REQUIREDToll-free verification needs a CRA business number on your verified business profile.
404VERIFICATION_NOT_FOUNDVerification ID not found or not owned by this account
404CONTACT_NOT_FOUNDContact not found
404CONTACT_GROUP_NOT_FOUNDContact group not found
404CONTACT_GROUP_MEMBER_NOT_FOUNDThat contact is not a member of this group
404CONTACT_LIST_NOT_FOUNDContact list not found
404CONTACT_LIST_ENTRY_NOT_FOUNDContact list entry not found
409VERIFICATION_ALREADY_VERIFIEDThis number has already been verified
409PURCHASE_IN_PROGRESSAnother number purchase is in flight. Retry shortly
409ALLOWANCE_REQUEST_PENDINGAn allowance request is already awaiting review
409PHONE_NUMBER_SUSPENDEDThis number's monthly charge could not be collected. Top up to reactivate it.
409CONSENT_REVOKED_BY_REVIEWConsent not recorded: HonkIO revoked this recipient's consent after reviewing the upload it came from. It cannot be recorded again, by any route, unless HonkIO lifts the block.
409SEND_LIMIT_REQUEST_PENDINGA volume request is already awaiting review.
409NUMBER_IN_OPEN_VERIFICATIONThe number already belongs to another open toll-free verification application.
409COMPED_TOLL_FREEToll-free numbers aren't available on this account.
409VERIFICATION_NOT_EDITABLEThe toll-free verification application cannot be changed or submitted in its current status.
409IDEMPOTENCY_KEY_REUSEDThe same Idempotency-Key was sent with a different to, from or body.
409CONTACT_ALREADY_EXISTSA contact with that phone number or email already exists
409CONTACT_IN_USERemove the contact from its groups and lists before clearing its phone number
409CONTACT_GROUP_ALREADY_EXISTSA contact group with that name already exists
409CONTACT_GROUP_MEMBER_EXISTSContact is already a member of this group
409CONTACT_LIST_ALREADY_EXISTSA contact list with that name already exists
409CONTACT_LIST_ENTRY_EXISTSThis entry already exists in the list
410VERIFICATION_EXPIREDThe verification code has expired
422NON_CANADIAN_NUMBERNot a valid Canadian E.164 number
422UNDELIVERABLE_NUMBERThe number failed at the carrier three times running (for any customer); refused without charge for 90 days.
422NOT_A_MOBILE_NUMBERThe destination is a landline or VoIP number. The carrier refuses it before sending; nothing is charged.
422RESERVED_DESTINATIONThe destination is in a reserved exchange (555-XXXX, N11, carrier test codes). Refused before anything is sent; nothing is charged.
422MESSAGE_TOO_LONGBody would exceed the carrier limit of 10 SMS segments (≈1,530 GSM-7 or 670 Unicode characters). Nothing is charged
422MESSAGE_NOT_SCHEDULEDOnly a SCHEDULED message can be moved or cancelled. details.current_status says what it is now
422VERIFICATION_INVALID_CODEIncorrect code. attempts_remaining shows how many tries are left
422INVALID_ALLOWANCE_REQUESTRequested allowance must exceed your current limit
422LINK_SHORTENER_BLOCKEDLink shorteners are refused because carriers filter them. Use the full URL
422BROADCAST_TOO_LARGEContact group too large for one broadcast (250 members by default). Split it and send in batches
422CANNOT_ERASE_OWN_NUMBERThat number belongs to your account. Erasure is only for a subscriber's number
422TOO_MANY_AREA_CODESSearch at most 25 area codes at a time
422INVALID_PHONE_NUMBERNot a valid E.164 phone number
422CONTACT_LIST_ENTRY_INVALIDEach entry must specify exactly one of phone_number, contact_id or contact_group_id
422CONTACT_HAS_NO_PHONEThe contact has no phone number, so it cannot join an SMS group or list
422NOT_A_TOLL_FREE_NUMBERThe number is not one of your toll-free numbers, so it cannot be verified or send opt-in confirmations.
429RECIPIENT_RATE_LIMITEDMore than 30 messages to one recipient in an hour or 100 in a day; retry after the Retry-After header.
429VERIFICATION_MAX_ATTEMPTSToo many wrong attempts. This verification is locked
429DAILY_LIMIT_REACHEDDaily sending limit reached (details show your limit and count). Request a higher volume once eligible
429FANOUT_LIMIT_REACHEDThis exact message already reached the maximum number of distinct recipients allowed in 24 hours
429NUMBER_RATE_LIMITEDThis sending number already has a full minute’s worth of message segments waiting for the carrier. Retry after the Retry-After delay
429NUMBER_QUEUE_FULLA broadcast would overfill a local sending number’s carrier queue (1,200 message segments; toll-free numbers have no such cap). Retry-After is set when waiting would make room; otherwise split the group or shorten the message
429BROADCAST_LIMIT_REACHEDBroadcast limit reached for this account in the last 24 hours
429SCHEDULED_LIMIT_REACHEDThe account already holds 10,000 scheduled live messages or 1,000 scheduled test messages (details carry mode, limit, scheduled and requested). Nothing was scheduled or charged; cancel some, or wait for them to go out
429OPT_IN_CONFIRMATION_LIMITAlready 3 opt-in confirmations to this recipient in the last 24 hours. Try again later.
451OPT_OUT_BLOCKEDRecipient has opted out, so the send is legally blocked
451NO_CONSENTNo valid CASL consent on file
451CONSENT_EXPIREDImplied consent expired (CASL s. 10(10))
451DOUBLE_OPT_IN_REQUIREDToll-free send to a recipient who has not confirmed double opt-in. Send an opt-in confirmation and wait for their YES.
501DNCL_COMING_SOONThe /v1/compliance/dncl endpoints are not in service. Texts are governed by CASL consent, not the DNCL, which covers telemarketing calls and faxes.
501TOLLFREE_800_COMING_SOON1-800 numbers are not available yet. Choose another toll-free prefix or a local number.
502CARRIER_ERRORThe carrier returned an error while sending.
502PROVISIONING_FAILEDThe carrier could not complete this number purchase. Nothing was charged.
502NUMBER_SEARCH_FAILEDNumber search is temporarily unavailable.
502RELEASE_FAILEDThe carrier did not accept the release. The number is still yours; retry shortly
503CARRIER_UNAVAILABLEThe carrier could not be reached; nothing was sent or charged. Retry shortly.
503CARRIER_THROTTLEDThe carrier asked us to slow down and did not take the message. Nothing was charged; retry after the Retry-After delay with the same Idempotency-Key. As the error_code of a FAILED message, it means the carrier took the message and then dropped it from a full queue: that message is refunded, and resending it needs a new Idempotency-Key
503CARRIER_TIMEOUTThe carrier did not answer in time, so the message may or may not have been sent. Its charge is held, and refunded once the carrier's records show it was not sent. Check the message status before sending again: a retry with the same Idempotency-Key returns the failed message instead of sending it again.

Email error codes

Email calls can also answer with the codes in the general section above, such as VALIDATION_ERROR, INSUFFICIENT_BALANCE and NOT_FOUND.

HTTPCodeMeaning
403EMAIL_DOMAIN_NOT_ALLOWEDThe API key is restricted to certain sending domains, and this one isn't in its list.
403TEST_KEY_REQUIREDOnly a test key can call this endpoint.
404RECEIVED_EMAIL_NOT_FOUNDNo received email with that id.
409EMAIL_DOMAIN_ALREADY_EXISTSThe domain is already on this account.
409EMAIL_DOMAIN_IN_USEAnother account holds this domain. details.retry_after says when an unverified claim lapses; a verified domain stays with its owner.
409EMAIL_DOMAIN_HAS_INFLIGHTThe domain still has queued, scheduled or sending email.
409EMAIL_IDEMPOTENCY_IN_PROGRESSA request with this Idempotency-Key is still being processed. Retry the same key shortly rather than using a new one.
409EMAIL_SUPPRESSION_NOT_REMOVABLEThe address unsubscribed or reported your email as spam. Only the recipient can reverse that, so it cannot be removed through the API.
409EMAIL_TEMPLATE_ALIAS_TAKENAnother template on this account already uses this alias.
409EMAIL_TEMPLATE_IN_USEA scheduled email uses this template. Cancel it, or wait until it's sent, then delete the template.
409RECEIVING_REQUIRES_VERIFIED_DOMAINThe domain must be verified for sending before receiving can be turned on.
410ATTACHMENT_EXPIREDThe attachment or raw message is past its 40 day retention window.
413EMAIL_ATTACHMENT_TOO_LARGEAttachments exceed 25 MB.
422EMAIL_INVALID_ADDRESSAn address is not a valid email address.
422EMAIL_DOMAIN_NOT_VERIFIEDThe from domain is not a verified sending domain on this account.
422EMAIL_DOMAIN_INVALIDNot a valid domain name.
422EMAIL_DOMAIN_LIMIT_REACHEDThis account has reached its sending-domain limit (5 by default; failed domains do not count). Answered to adding a domain, or to verifying a failed domain that would take a slot back. Remove one or ask support to raise it.
422EMAIL_TEST_ADDRESS_LIVE_KEYA live key can't send to an address on test.honkio.ca; those addresses are for test keys only.
422EMAIL_HEADER_INVALIDThe from address or a header is malformed, or is one honkio sets itself.
422EMAIL_ATTACHMENT_FETCH_FAILEDAn attachment given by path could not be fetched. details.reason says why: blocked_address, http_status, timeout, too_large or network.
422EMAIL_ATTACHMENT_TYPE_BLOCKEDThe attachment is an executable or script type (.exe, .js, .bat, .jar and the like) that receiving mail servers reject. details.filename names it. Nothing is charged.
422EMAIL_BATCH_TOO_LARGEToo many recipients in one call.
422EMAIL_COMMERCIAL_MULTI_RECIPIENTA commercial email goes to exactly one recipient. Use a batch to reach several.
422EMAIL_NOT_SCHEDULEDOnly a scheduled email can be moved or cancelled.
422EMAIL_TEMPLATE_UNDECLARED_VARIABLEThe template body uses a variable it doesn't declare. Add it to variables; details.keys lists them.
422EMAIL_TEMPLATE_LIMIT_REACHEDThis account has reached the limit of 200 templates, counting those made through /v1/templates. Delete one to create another.
422SIMULATE_RECIPIENT_NOT_OWNEDEvery simulated recipient must be your test address or a domain this account owns in test mode.
422INBOUND_ADDRESS_DISABLEDYour managed inbound address is switched off. Turn it on before sending to it.
429EMAIL_DAILY_LIMIT_REACHEDA new account's live email reached its limit of recipients for the last 24 hours. The details show the limit and when it lifts.
429TEST_EMAIL_QUOTA_EXCEEDEDA test key has created 200 emails, or simulated 200 received emails, in the last 24 hours. Live keys are not affected.
451EMAIL_SUPPRESSEDThe recipient is on your suppression list.
451EMAIL_NO_CONSENTCommercial email needs CASL consent on file for the recipient.
451EMAIL_OPT_OUT_BLOCKEDThe recipient unsubscribed from this sender.
503EMAIL_ATTACHMENTS_UNCONFIGUREDAttachment storage isn't configured, so emails with attachments can't be sent right now.

Delivery failure codes

These never come back as an HTTP response: the call already answered 201 before SES tried to send. If delivery still fails, one of these appears as failure_code on the email.failed or email.rejected webhook, and the charge is refunded. A scheduled email is checked again when it comes due: if the account has been suspended or closed by then, or no longer holds the verified from domain, the email fails with ACCOUNT_SUSPENDED, ACCOUNT_CLOSED or EMAIL_DOMAIN_NOT_VERIFIED and is refunded the same way.

CodeMeaning
SES_THROTTLINGSES throttled the send; the email failed and was refunded; send it again.
SES_MESSAGE_REJECTEDSES rejected the message outright, for example malformed content; the email failed and was refunded; fix the content and send it again.
SES_DOMAIN_NOT_VERIFIEDSES had not finished verifying the from domain, even though honkio's own check passed; the email failed and was refunded; wait for verification to finish, then send it again.
SES_ERRORAn SES error that doesn't fit the other codes; the email failed and was refunded; send it again.
EMAIL_ATTACHMENTS_UNAVAILABLEThe stored attachment bytes could not be read at send time; the email failed and was refunded; send it again.

HonkIO Auth codes

Codes from the HonkIO Auth management API (/v1/auth-apps). It also returns the general codes.

HTTPCodeMeaning
409AUTH_APP_HOSTNAME_TAKENAnother app already holds this hostname.
422AUTH_APP_HOSTNAME_INVALIDThe hostname can’t be a sign-in page: use a subdomain you own, not an apex domain or a HonkIO domain.
422AUTH_APP_REDIRECT_INVALIDA redirect URI isn’t valid: HTTPS, exact, no wildcard, fragment or credentials; localhost on test apps only.
422AUTH_APP_NAME_INVALIDThe app name or brand colour isn’t valid.
422AUTH_APP_NAME_PROTECTEDThe app name is too close to a protected brand.
422AUTH_APP_PUBLIC_CLIENTThe app is a public client and has no secret to rotate.
422AUTH_APP_FREE_LIMITThe account already has a live Free app. Move that one to a paid plan, or make this one a test app.
422AUTH_APP_LIMITThe account has as many apps in this mode as it can: 10 test apps, 25 live apps. Delete one you no longer use.
422AUTH_APP_HOSTNAME_LIMITThe hostname needs a certificate, and the account’s apps already hold as many as they can at once: 3 for test apps, 25 for live apps. Delete an app you no longer use.
503AUTH_APP_DOMAIN_UNAVAILABLEDomain and certificate setup is briefly unavailable. Retry shortly.
422AUTH_APP_PLAN_FEATUREThe app’s plan doesn’t include that sign-in method. Change the plan first.
422AUTH_APP_METHODS_INVALIDThe method settings aren’t valid: keep at least one method on, and on a live app, pick a number to send from before turning on text sign-in.
422AUTH_APP_NUMBER_INVALIDThat number can’t send sign-in texts. Use an active, SMS-capable number on this account.
422AUTH_APP_SEND_FROM_INVALIDSign-in email can only come from a verified live email domain on this account that the key may use.
422AUTH_APP_HOSTNAME_CHANGE_NEEDS_FALLBACKMoving to this hostname would stop passkeys working, and passkeys are the app’s only sign-in method. Turn on email or text sign-in first.
422AUTH_APP_LOGO_INVALIDThe logo must be a PNG, JPEG, WebP or GIF of at least 16×16 pixels, in the multipart part named logo. SVG isn’t accepted.
413AUTH_APP_LOGO_TOO_LARGEThe logo is larger than 1 MB.
503AUTH_APP_LOGO_UNAVAILABLELogo upload is briefly unavailable. Retry shortly.
403AUTH_SECURITY_FEATURE_UNAVAILABLEThat security setting needs a plan the app isn’t on. VoIP blocking starts on Pro.
409AUTH_SECURITY_BLOCKLIST_DUPLICATEThe value is already on the app’s blocklist.
422AUTH_SECURITY_BLOCKLIST_INVALIDThe blocklist value doesn’t fit its kind. The details say which form it needs.
422AUTH_SECURITY_BLOCKLIST_FULLThe app already has 1,000 blocklist entries. Remove some, or block a whole domain, prefix or range instead.
403AUTH_SECURITY_TEXTS_PAUSED_BY_HONKIOThe app’s sign-in texts are paused by HonkIO. Only HonkIO can resume them; contact support.
409AUTH_SECURITY_TEXTS_PAUSE_CHANGEDThe app’s sign-in texts were paused again while they were being resumed. Check why they are paused, then retry.
402AUTH_PLAN_INSUFFICIENT_BALANCEThe balance can’t cover the plan change and any unpaid sign-in charges. Top up, then retry.
404AUTH_PLAN_NO_SCHEDULED_CHANGEThe app has no scheduled plan change to cancel.
422AUTH_PLAN_DOWNGRADE_OVER_LIMITThe app has more returning users than the Free plan includes (this billing cycle or the last), so it can’t move to Free. details.active_users and details.limit give the figures.
403AUTH_ORG_PLAN_REQUIREDOrganizations, roles and organization invitations need the Business plan.
403AUTH_ORG_TWO_STEP_PLAN_REQUIREDThe plan doesn’t include that two-step setting: two-step needs Pro, and requiring it per organization or role needs Business.
409AUTH_ORG_SLUG_TAKENAnother organization in the app already uses this slug.
409AUTH_ORG_ROLE_IN_USEA member or a pending invitation still holds the role. Change their role first.
409AUTH_ORG_MEMBERSHIP_EXISTSThe user is already a member of the organization.
422AUTH_ORG_NAME_INVALIDThe organization name or slug isn’t valid: a plain name of up to 100 characters with no link in it (no web address, / or :), and a slug of lowercase letters, digits and dashes.
422AUTH_ORG_ROLE_INVALIDThe role isn’t valid here: use admin, member or a role made for the organization. Built-in roles can’t be deleted.
422AUTH_ORG_SIGN_UP_DOMAINS_INVALIDSign-up domains must be up to 50 domain names, and the domains mode needs at least one.
409AUTH_INVITATION_NOT_PENDINGThe invitation was already accepted, revoked or has expired.
422AUTH_INVITATION_INVALIDAn invitation needs exactly one valid email or mobile number, a role only with an organization, and a redirect_url on one of the app’s redirect origins.
409AUTH_USER_IDENTIFIER_TAKENAnother user of the app already has this email address or mobile number.
422AUTH_USER_IDENTIFIER_REQUIREDA user must keep an email address or a mobile number.
422AUTH_USER_IDENTIFIER_INVALIDThe email address or mobile number isn’t valid. Mobile numbers must be Canadian.
403STEP_UP_REQUIREDThis action needs a fresh confirmation that it’s you: get a step-up token for the scope named in details.scope, then retry with it. Deleting users in bulk always needs one (auth_users:bulk_delete); an export needs one from a dashboard session.
403AUTH_APP_STEP_UP_REQUIREDReplacing the client secret, changing the hostname, changing a user’s email or phone, deleting a user or removing a user’s passkey from a dashboard session needs a fresh confirmation that it’s you. API keys don’t.
403AUTH_EXPORT_STEP_UP_REQUIREDAn export needs an auth_users:export step-up token in the X-Step-Up-Token header.
409AUTH_EXPORT_IN_PROGRESSAn export of the app is already being prepared. Wait for it to finish.
409AUTH_EXPORT_NOT_READYThe export is still being prepared. Try the link again in a minute.
410AUTH_EXPORT_LINK_INVALIDThe download link expired or was already used. Start a new export.
503AUTH_EXPORT_UNAVAILABLEExports are briefly unavailable. Retry later.

Push error codes

Errors specific to push, besides the usual validation and authentication errors:

HTTPCodeMeaning
403PUSH_DISABLEDPush is turned off for this account. Nothing was sent or charged; contact support.
404PUSH_APP_NOT_FOUNDNo push app with that id on this account, or the app was deleted. Sending with its app_id, registering a device to it and managing it all answer this.
404PUSH_DEVICE_NOT_FOUNDNo push device with that id in this key’s mode.
409PUSH_IDEMPOTENCY_IN_PROGRESSThe same Idempotency-Key was replayed while the first call was still being accepted. Retry shortly with the same key.
409PUSH_DEVICE_LIMITRegistering a device: the app already has its maximum of active devices in this mode (1,000,000 live, 1,000 test). Unregister devices you no longer send to.
409DPA_PUSH_ACCEPTANCE_REQUIREDCreating a push app: the account accepted HonkIO’s data processing agreement before it covered push notifications. Accept the current version in Settings, Data processing agreement. An account that never accepted the agreement is not asked.
422PUSH_NO_TARGETGive exactly one of to.user_id and to.device_id.
422PUSH_PAYLOAD_TOO_LARGEThe final payload is over 4096 bytes. details.bytes_over says by how much. Nothing is charged.
422PUSH_NO_CREDENTIALThe app has no credential for the platform of any targeted device, and there is no fallback.
422PUSH_CREDENTIAL_INVALIDAdding or replacing a credential: Apple or Google rejected it, or it is not the kind of key they issue. details give the provider, the environment when known, and the reason.
422PUSH_NOT_SCHEDULEDOnly a scheduled push can be moved or cancelled.
429PUSH_DAILY_CAPThe account reached its daily push limit.
501PUSH_COMING_SOONPush is not switched on for the platform yet.
503PUSH_PROVIDER_UNAVAILABLEReturned when you upload or replace a credential and Apple or Google could not be reached to check it. Retry shortly.

Notify error codes

Refusals come back as the usual error body. These codes belong to Notify; the others are in the error reference.

HTTPCodeMeaning
404RECIPIENT_NOT_FOUNDNo profile with that user_id in the key's mode, and no active push device for it.
409RECIPIENT_LIMIT_REACHEDThe account already holds its maximum of profiles in this mode: 1,000,000 live, 1,000 test. details.limit gives it.
422NOTIFY_SENDER_REQUIREDA channel that can reach the person has no sender. details.channel names it.
422NOTIFY_CONTENT_REQUIREDNothing to send: give text (and a subject to email), or a template. details.field names what is missing.
422NOTIFY_CONTENT_TOO_LARGEWhat the notification would send on the channels that can reach the person, rendered, is over 2 MB. details.bytes and details.limit give the sizes.
501NOTIFY_COMING_SOONNotify is not switched on for the platform yet.