Aller au contenu
Sandbox

Erreurs

Chaque erreur est un objet Problem Details (RFC 9457) dont seul le code est un contrat machine. Le format, le catalogue complet des codes par statut, et la conduite à tenir pour chacun.

Voir en Markdown

Toute erreur de Noryo Merchant API est un document Problem Details (RFC 9457), servi en application/problem+json.

{
  "type": "https://developer.noryo.app/errors/idempotency_key_reuse",
  "title": "Idempotency key reused",
  "status": 409,
  "code": "idempotency_key_reuse",
  "detail": "this Idempotency-Key is bound to a different request for the remainder of its TTL",
  "request_id": "req_01a07784-d343-75f8-b0ae-b0629b305cd4"
}
JSON

Les champs

ChampContenuStable ?
typeL'adresse de la page du code dans le catalogue des erreursLe lien peut changer de domaine ; le code, non
titleUn titre court, en anglais, pour un humainNon : peut être reformulé
statusLe statut HTTP de la réponse, pour tous les codes
codeLe code machine, en snake_caseOui : c'est le contrat
detailUne phrase en anglais, parfois plus précise que le titreNon : peut être reformulée
request_idL'identifiant de la tentative, identique à l'en-tête Noryo-Request-Id

Une 410 ajoute enrichment_id, et une 503 engine_error aussi : il y désigne la tentative échouée, pas un résultat. Aucun autre membre n'est ajouté.

Important

Bâtissez votre logique sur code, et sur le statut HTTP. title et detail sont écrits pour des humains et peuvent être reformulés à tout moment sans changement de version : un client qui les analyse cassera à la première relecture.

Les corps d'erreur ne portent jamais de SQLSTATE, de nom de table, de trace d'appels, de nom d'hôte interne, ni la valeur de votre clé ou de votre Idempotency-Key. Un 500 ne porte que code et request_id comme informations utiles.

Le catalogue

Chaque code a sa page dans le catalogue des erreurs.

StatutCodeQuandConduite
400invalid_requestCorps hors schéma, champ inconnu, external_transaction_id sur un rafraîchissement, hôte inconnuCorriger la requête
400invalid_jsonCorps qui n'est pas du JSON valideCorriger la requête
400identifier_requiredCréation sans Idempotency-Key ni external_transaction_id ; rafraîchissement sans Idempotency-KeyAjouter l'identifiant
400invalid_idempotency_keyEn-tête Idempotency-Key vide, trop long, répété ou hors ASCII visibleCorriger la clé
400invalid_inputNon rendu par les routes actuellesAucune
400refresh_requires_transaction_idNon rendu par les routes actuelles : le rafraîchissement d'un enrichissement sans external_transaction_id rend 409 refresh_not_availableVoir Rafraîchir
400target_enrichment_requiredNon rendu par les routes actuelles : le chemin nomme toujours la cibleAucune
400unsupported_canonicalizationNon rendu par les routes actuellesContacter le support avec le request_id
401invalid_api_keyClé absente, mal formée, inconnue, révoquée ou de mauvais préfixeCorriger la clé
402sandbox_quota_exhaustedDotation Sandbox épuiséePasser en Production
402no_active_subscriptionAucun abonnement actif ne couvre l'opérationRégulariser le compte
403insufficient_scopeLa clé n'a pas le scope de la routeUtiliser une clé avec le bon scope
403account_inactiveOrganisation ou workspace inactifContacter Noryo
403production_not_enabledLa clé n'est pas autorisée en ProductionVoir Passage en production
404enrichment_not_foundenrichment_id inconnu, mal formé, d'un autre workspace ou environnementVérifier l'identifiant, la clé, l'environnement
404transaction_not_foundRafraîchissement d'une transaction sans résultat enregistréCréer un enrichissement d'abord
409idempotency_key_reuseMême Idempotency-Key, autre requête, dans les 24 heuresNouvelle clé pour une nouvelle requête
409transaction_id_conflictMême external_transaction_id, autre entrée économiqueCorriger l'entrée ou l'identifiant
409input_mismatchRafraîchissement dont l'entrée diffère de celle de la transactionRenvoyer l'entrée d'origine
409refresh_not_availableEnrichissement d'origine sans external_transaction_idRelire en GET, ou créer avec un identifiant
410result_content_expiredContenu purgé après 90 joursVoir Rétention et 410
413request_entity_too_largeCorps de plus de 16 KioRéduire le corps
415unsupported_media_typeContent-Type autre que application/jsonEnvoyer du JSON
429rate_limitedSeau de débit videReprendre après Retry-After
500internal_errorErreur inattendueReprendre avec la même clé ; citer le request_id
503engine_errorLe moteur de résolution n'a pas répondu ; rien n'est facturé ni mémoriséReprendre avec la même clé
503busyContention passagère, ou requête identique en coursReprendre après Retry-After
503pricing_not_activatedFacturation pas encore activée pour l'opérationReprendre après Retry-After

Politique de reprise

StatutReprendre ?
429Oui, après Retry-After
503Oui, avec la même Idempotency-Key : rien n'a été facturé ni mémorisé
500Oui, avec la même Idempotency-Key
409Non : corrigez la charge utile ou la clé
Autres 4xxNon

Le détail est dans Reprises.

L'identifiant de tentative

Chaque réponse porte Noryo-Request-Id, et chaque corps d'erreur le répète dans request_id. Une tentative a exactement un identifiant : le même dans l'en-tête, dans le corps et dans les journaux de Noryo, y compris sur un 500. Citez-le au support et nous retrouvons la tentative exacte. Voir Identifiants de requête.

Publié le 2026-10-09 10:18 UTC (version 2).

Cette page vous a-t-elle aidé ?