Browse the documentation

Error reference

Every error has the same shape: {"error": {"code", "message", "docs"}}. Branch your code on code, never on message.

The same marker can carry two statuses depending on the route. The tables below say which.

Key and access

MarkerStatusWhenWhat to do
API_KEY_MISSING401Authorization header absent or emptysend Authorization: Bearer fpk_...
API_KEY_INVALID401secret not recognisedcheck the secret. It may have been rotated
API_KEY_REVOKED403the key was revokedcreate a new one
API_KEY_EXPIRED403the key is past its datecreate a new one. An expired key cannot be rotated
API_KEY_IP_NOT_ALLOWED403call from outside the address allowlistadd the address, or check where the call starts from
API_ACCOUNT_DISABLED403the account is no longer availablecontact support
API_SCOPE_MISSING:<scope>403the key lacks that permissionadd the permission the suffix names
API_ACTION_NOT_ALLOWED:<action>403provider action the platform does not classify, or one with no public permissionsee the action table in Managing services
API_KEY_SPENDING_CAP_EXCEEDED403the charge would pass the 30-day capraise the cap, then retry with a new idempotency key
API_RATE_LIMITED429a rate counter is fullwait Retry-After seconds
API_HEADER_NOT_ALLOWED400X-Acting-Account header sentremove it
API_KEY_IN_QUERY400key passed in the URLsend it in the header, and rotate it: the URL is already in logs

Request

MarkerStatusWhen
VALIDATION_ERROR:<field>400field or parameter absent, mistyped or outside its enum. The suffix names it
IDEMPOTENCY_KEY_REQUIRED400header absent on a route that needs it
IDEMPOTENCY_KEY_INVALID400key blank or beyond 128 characters
IDEMPOTENCY_KEY_REUSED409same key, different request
IDEMPOTENCY_IN_PROGRESS409same key while the first call is running. Retry-After
INTERNAL_ERROR500on our side. Quote the X-Request-Id to support

The VALIDATION_ERROR suffixes used across the surface: limit, cursor, status, page, action, command, method, subject, message, category, priority, payment.method, customerNote, lines.product, lines.quantity, lines.addons.quantity.

Services

MarkerStatusRoutesWhen
SERVICE_NOT_FOUND404every service routeunknown code, another account's service, or outside the key's restriction
SERVICE_NOT_ACTIVE409/power, /console/command, /actions/{action}, /renewservice suspended or cancelled
SERVICE_NOT_ACTIVE400/backups, /backups/restore, /reinstallthe same, on the delegated routes
SERVICE_IN_DUNNING400/backups, /backups/restore, /reinstallunpaid invoice in dunning
INSTANCE_NOT_PROVISIONED409/status, /metrics/history, /power, /actions/{action}the infrastructure does not exist yet
INSTANCE_NOT_PROVISIONED400/backups, /backups/restore, /reinstallthe same, on the delegated routes
ACTION_UNSUPPORTED400/power, /console/commandkill on a VPS, console on a VPS
INVALID_ACTION400/actions/{action}action empty or starting with _
CUSTOM_NAME_TOO_LONG400PATCH /services/{code}beyond 32 characters
RENEWAL_CANCELLATION_NOT_AVAILABLE_VIA_API400PATCH /services/{code}autoRenew: false
NOTE_TOO_LONG400POST /backupsnote beyond 200 characters
MISSING_FIELDS400/backups/restore, /reinstalla required field is missing
BACKUP_NOT_FOUND400DELETE /backups/{id}, /backups/restoreunknown backup id
BACKUP_IN_PROGRESS400/backups, /backups/restorea backup operation is already running
LIMIT_REACHED409POST /backupsbackup quota reached
INVALID_OS, OS_FAMILY_MISMATCH400/reinstallos outside the catalogue, or family and version mismatched
INVALID_AUTH_TYPE400/reinstallauthType outside PASSWORD and SSH_KEY

Payments, orders and renewals

MarkerStatusWhenWhat to do
INSUFFICIENT_BALANCE402the balance does not cover the amounttop up, then retry with the same idempotency key
NO_PAYMENT_METHOD402account_default with no usable methodregister a method, then retry with the same key
PAYMENT_METHOD_ID_REQUIRED400saved_method without paymentMethodIdfix the body, retry with the same key
PAYMENT_METHOD_NOT_FOUND404that method is not on the accountsame
PAYMENT_METHOD_NOT_ACTIVE400orders and invoicesmethod expired or blocked
PAYMENT_METHOD_NOT_ACTIVE402/renewthe same case, on a renewal
PAYMENT_METHOD_DECRYPTION_FAILED, PAYMENT_METHOD_VAULT_ID_MISSING400the stored method is unusablecontact support
PAYMENT_DENIED402the bank refusedchange method. Replaying the same key returns the same refusal
RENEWAL_FAILED402/renewthe charge failed for another reason
PAYMENT_FAILED400settlement failed with no more precise code
PAYMENT_RECORDED_MISMATCH409reconciliation anomalydo not retry. Contact support with the X-Request-Id
PAYMENT_IN_PROGRESS409another payment of the same document is runningwait, then retry with the same key
PAYMENT_METHOD_REQUIRED400the document needs a payment method
ORDER_NOT_FOUND404unknown order number
ORDER_NOT_PAYABLE, ORDER_ALREADY_SETTLED, ORDER_ALREADY_PAID, AMOUNT_INVALID400there is nothing to pay on that order
ORDER_CONCURRENT_UPDATE409the order changed during the writeretry
NO_ITEMS, TOO_MANY_ITEMS4000 lines, or more than 20
PRODUCT_NOT_FOUND:<x>, PRODUCT_NOT_ORDERABLE:<x>, RECURRENCE_REQUIRED:<x>, RECURRENCE_NOT_OFFERED:<x>400the line does not match the cataloguere-read GET /catalog/products
MISSING_REQUIRED:<key>, INVALID_METADATA_KEY:<key>, INVALID_METADATA_VALUE:<key>400the line's configurationre-read the product's characteristics
ADDON_NOT_AVAILABLE:<x>, ADDON_MAX_QUANTITY:<x>400the add-on asked forre-read the product's addons
RENEWAL_IN_PROGRESS409a renewal of the same service is runningwait, then retry with the same key
RENEWAL_TOO_FREQUENT429less than a minute since the previous onewait a minute, retry with the same key

Billing

MarkerStatusWhen
INVOICE_NOT_FOUND404unknown invoice code
CREDIT_NOTE_NOT_FOUND404unknown credit note code
INVOICE_ALREADY_PAID, INVOICE_VOID, INVOICE_REFUNDED, INVOICE_NOT_ISSUED, INVOICE_BALANCE_ZERO400nothing to pay on that document
CURRENCY_UNSUPPORTED400currency not supported
PDF_NOT_AVAILABLE503the PDF is not rendered yet. Retry-After: 5

Support and account

MarkerStatusWhen
TICKET_NOT_FOUND404unknown ticket number
SUBJECT_TOO_SHORT400subject too short
TICKET_REJECTED, MESSAGE_REJECTED400support refused the creation or the message
SSH_KEY_NOT_FOUND404unknown SSH key id
SSH_KEY_FORMAT_INVALID400not a public key line
DUPLICATE_KEY:<id>400the key is already on the account
PRODUCT_NOT_FOUND404GET /catalog/products/{shortname} on an unknown shortname

Provider

The action gateway relays the infrastructure's refusals.

AnswerStatusMeaning
a provider marker, e.g. FIREWALL_INVALID_ARGUMENT, RDNS_INVALID_ARGUMENT409the provider understood the request and refused it. The marker is its own
ACTION_FAILED502the provider failed, or returned nothing usable
PROVIDER_TIMEOUT502the provider did not answer in time

What to do by status

StatusRetry?
400, 404not before fixing the request
401, 403no. It is the key or its permissions
402after clearing the cause. See the "what to do" column above
409depends on the marker: PAYMENT_IN_PROGRESS and ORDER_CONCURRENT_UPDATE yes, PAYMENT_RECORDED_MISMATCH no
429yes, after Retry-After
500, 502, 503yes, with exponential backoff. On an idempotent route, keep the same key
    Error reference | FreshPerf