Toute erreur a la même forme : {"error": {"code", "message", "docs"}}. Branchez votre code sur code, jamais sur message.
Un même marqueur peut porter deux statuts selon la route. Les tableaux ci-dessous le précisent.
| Marqueur | Statut | Quand | Conduite |
|---|
API_KEY_MISSING | 401 | en-tête Authorization absent ou vide | envoyez Authorization: Bearer fpk_... |
API_KEY_INVALID | 401 | secret inconnu | vérifiez le secret. Il a peut-être été renouvelé |
API_KEY_REVOKED | 403 | la clé a été révoquée | créez-en une nouvelle |
API_KEY_EXPIRED | 403 | la clé a passé sa date | créez-en une nouvelle. Une clé expirée ne se renouvelle pas |
API_KEY_IP_NOT_ALLOWED | 403 | appel hors de la liste d'adresses | ajoutez l'adresse, ou vérifiez d'où part l'appel |
API_ACCOUNT_DISABLED | 403 | le compte n'est plus disponible | contactez le support |
API_SCOPE_MISSING:<scope> | 403 | la clé n'a pas cette permission | ajoutez la permission nommée par le suffixe |
API_ACTION_NOT_ALLOWED:<action> | 403 | action fournisseur inconnue de la plateforme, ou sans permission publique | voir la table des actions dans Gérer vos services |
API_KEY_SPENDING_CAP_EXCEEDED | 403 | le débit dépasserait le plafond sur 30 jours | relevez le plafond, puis réessayez avec une nouvelle clé d'idempotence |
API_RATE_LIMITED | 429 | un compteur de débit est plein | attendez Retry-After secondes |
API_HEADER_NOT_ALLOWED | 400 | en-tête X-Acting-Account envoyé | retirez-le |
API_KEY_IN_QUERY | 400 | clé passée dans l'URL | envoyez-la dans l'en-tête, et renouvelez-la : l'URL est déjà dans des journaux |
| Marqueur | Statut | Quand |
|---|
VALIDATION_ERROR:<champ> | 400 | champ ou paramètre absent, mal typé ou hors énumération. Le suffixe le nomme |
IDEMPOTENCY_KEY_REQUIRED | 400 | en-tête absent sur une route qui l'exige |
IDEMPOTENCY_KEY_INVALID | 400 | clé vide ou au-delà de 128 caractères |
IDEMPOTENCY_KEY_REUSED | 409 | même clé, requête différente |
IDEMPOTENCY_IN_PROGRESS | 409 | même clé pendant que le premier appel tourne. Retry-After |
INTERNAL_ERROR | 500 | de notre côté. Citez le X-Request-Id au support |
Les suffixes de VALIDATION_ERROR employés sur la surface : limit, cursor, status, page, action, command, method, subject, message, category, priority, payment.method, customerNote, lines.product, lines.quantity, lines.addons.quantity.
| Marqueur | Statut | Routes | Quand |
|---|
SERVICE_NOT_FOUND | 404 | toutes les routes de service | code inconnu, service d'un autre compte, ou hors de la restriction de la clé |
SERVICE_NOT_ACTIVE | 409 | /power, /console/command, /actions/{action}, /renew | service suspendu ou résilié |
SERVICE_NOT_ACTIVE | 400 | /backups, /backups/restore, /reinstall | idem, sur les routes déléguées |
SERVICE_IN_DUNNING | 400 | /backups, /backups/restore, /reinstall | facture impayée en recouvrement |
INSTANCE_NOT_PROVISIONED | 409 | /status, /metrics/history, /power, /actions/{action} | l'infrastructure n'existe pas encore |
INSTANCE_NOT_PROVISIONED | 400 | /backups, /backups/restore, /reinstall | idem, sur les routes déléguées |
ACTION_UNSUPPORTED | 400 | /power, /console/command | kill sur un VPS, console sur un VPS |
INVALID_ACTION | 400 | /actions/{action} | action vide ou commençant par _ |
CUSTOM_NAME_TOO_LONG | 400 | PATCH /services/{code} | au-delà de 32 caractères |
RENEWAL_CANCELLATION_NOT_AVAILABLE_VIA_API | 400 | PATCH /services/{code} | autoRenew: false |
NOTE_TOO_LONG | 400 | POST /backups | note au-delà de 200 caractères |
MISSING_FIELDS | 400 | /backups/restore, /reinstall | un champ obligatoire manque |
BACKUP_NOT_FOUND | 400 | DELETE /backups/{id}, /backups/restore | identifiant de sauvegarde inconnu |
BACKUP_IN_PROGRESS | 400 | /backups, /backups/restore | une opération de sauvegarde tourne déjà |
LIMIT_REACHED | 409 | POST /backups | quota de sauvegardes atteint |
INVALID_OS, OS_FAMILY_MISMATCH | 400 | /reinstall | os hors catalogue, ou famille et version incompatibles |
INVALID_AUTH_TYPE | 400 | /reinstall | authType hors de PASSWORD et SSH_KEY |
| Marqueur | Statut | Quand | Conduite |
|---|
INSUFFICIENT_BALANCE | 402 | le solde ne couvre pas le montant | rechargez, puis réessayez avec la même clé d'idempotence |
NO_PAYMENT_METHOD | 402 | account_default sans moyen utilisable | enregistrez un moyen, puis réessayez avec la même clé |
PAYMENT_METHOD_ID_REQUIRED | 400 | saved_method sans paymentMethodId | corrigez le corps, réessayez avec la même clé |
PAYMENT_METHOD_NOT_FOUND | 404 | ce moyen n'est pas sur le compte | idem |
PAYMENT_METHOD_NOT_ACTIVE | 400 | commandes et factures | moyen expiré ou bloqué |
PAYMENT_METHOD_NOT_ACTIVE | 402 | /renew | le même cas, sur le renouvellement |
PAYMENT_METHOD_DECRYPTION_FAILED, PAYMENT_METHOD_VAULT_ID_MISSING | 400 | le moyen enregistré est inutilisable | contactez le support |
PAYMENT_DENIED | 402 | la banque a refusé | changez de moyen. Le rejeu de la même clé rendra le même refus |
RENEWAL_FAILED | 402 | /renew | le débit a échoué pour une autre raison |
PAYMENT_FAILED | 400 | échec de règlement sans code plus précis | |
PAYMENT_RECORDED_MISMATCH | 409 | anomalie de rapprochement | ne réessayez pas. Contactez le support avec le X-Request-Id |
PAYMENT_IN_PROGRESS | 409 | un autre paiement du même document tourne | attendez, puis réessayez avec la même clé |
PAYMENT_METHOD_REQUIRED | 400 | le document exige un moyen de paiement | |
ORDER_NOT_FOUND | 404 | numéro de commande inconnu | |
ORDER_NOT_PAYABLE, ORDER_ALREADY_SETTLED, ORDER_ALREADY_PAID, AMOUNT_INVALID | 400 | il n'y a rien à payer sur cette commande | |
ORDER_CONCURRENT_UPDATE | 409 | la commande a changé pendant l'écriture | réessayez |
NO_ITEMS, TOO_MANY_ITEMS | 400 | 0 ligne, ou plus de 20 | |
PRODUCT_NOT_FOUND:<x>, PRODUCT_NOT_ORDERABLE:<x>, RECURRENCE_REQUIRED:<x>, RECURRENCE_NOT_OFFERED:<x> | 400 | la ligne ne correspond pas au catalogue | relisez GET /catalog/products |
MISSING_REQUIRED:<clé>, INVALID_METADATA_KEY:<clé>, INVALID_METADATA_VALUE:<clé> | 400 | la configuration de la ligne | relisez characteristics du produit |
ADDON_NOT_AVAILABLE:<x>, ADDON_MAX_QUANTITY:<x> | 400 | l'option demandée | relisez addons du produit |
RENEWAL_IN_PROGRESS | 409 | un renouvellement du même service tourne | attendez, puis réessayez avec la même clé |
RENEWAL_TOO_FREQUENT | 429 | moins d'une minute depuis le précédent | attendez une minute, réessayez avec la même clé |
| Marqueur | Statut | Quand |
|---|
INVOICE_NOT_FOUND | 404 | code de facture inconnu |
CREDIT_NOTE_NOT_FOUND | 404 | code d'avoir inconnu |
INVOICE_ALREADY_PAID, INVOICE_VOID, INVOICE_REFUNDED, INVOICE_NOT_ISSUED, INVOICE_BALANCE_ZERO | 400 | rien à payer sur ce document |
CURRENCY_UNSUPPORTED | 400 | devise non prise en charge |
PDF_NOT_AVAILABLE | 503 | le PDF n'est pas encore rendu. Retry-After: 5 |
| Marqueur | Statut | Quand |
|---|
TICKET_NOT_FOUND | 404 | numéro de ticket inconnu |
SUBJECT_TOO_SHORT | 400 | sujet trop court |
TICKET_REJECTED, MESSAGE_REJECTED | 400 | le support a refusé la création ou le message |
SSH_KEY_NOT_FOUND | 404 | identifiant de clé SSH inconnu |
SSH_KEY_FORMAT_INVALID | 400 | ce n'est pas une ligne de clé publique |
DUPLICATE_KEY:<id> | 400 | la clé est déjà sur le compte |
PRODUCT_NOT_FOUND | 404 | GET /catalog/products/{shortname} sur un shortname inconnu |
La passerelle d'actions relaie les refus de l'infrastructure.
| Réponse | Statut | Sens |
|---|
un marqueur du fournisseur, ex. FIREWALL_INVALID_ARGUMENT, RDNS_INVALID_ARGUMENT | 409 | le fournisseur a compris la demande et l'a refusée. Le marqueur est propre à lui |
ACTION_FAILED | 502 | le fournisseur a échoué, ou n'a rien renvoyé d'exploitable |
PROVIDER_TIMEOUT | 502 | le fournisseur n'a pas répondu à temps |
| Statut | Réessayer ? |
|---|
400, 404 | non avant d'avoir corrigé la requête |
401, 403 | non. C'est la clé ou ses permissions |
402 | après avoir levé la cause. Voir la colonne « conduite » ci-dessus |
409 | selon le marqueur : PAYMENT_IN_PROGRESS et ORDER_CONCURRENT_UPDATE oui, PAYMENT_RECORDED_MISMATCH non |
429 | oui, après Retry-After |
500, 502, 503 | oui, avec un recul exponentiel. Sur une route idempotente, gardez la même clé |