Aller au contenu principal

Erreurs

Toutes les erreurs API retournent un corps de réponse JSON cohérent. Il existe deux formats d'erreur selon la source de l'erreur.

Erreurs de validation

Retourné lorsque la définition du document a des problèmes structuraux — JSON invalide, propriétés non reconnues ou incompatibilités de type. Ceux-ci sont détectés avant le début de la génération de PDF.

{
"code": "SCHEMA_ERROR",
"path": "$.document.content[0].tabel",
"message": "Invalid value or unrecognized property at '$.document.content[0].tabel'."
}
ChampTypeDescription
codestringCode d'erreur lisible par machine
pathstringChemin JSON vers la propriété problématique
messagestringDescription lisible par l'humain

Codes d'erreur de validation

CodeDescription
INVALID_JSONLe corps de la requête n'est pas un JSON valide
MISSING_ROOTPropriété racine document manquante et aucun tableau content à encapsuler automatiquement
INVALID_DEFINITIONLa définition du document est nulle après la désérialisation
EMPTY_CONTENTLe tableau de contenu est présent mais vide
SCHEMA_ERRORNom de propriété non reconnu ou incompatibilité de type au chemin donné

Exemples

Faute de frappe dans le nom de la propriété :

// Request: { "document": { "content": [{ "tabel": {} }] } }

{
"code": "SCHEMA_ERROR",
"path": "$.document.content[0].tabel",
"message": "Invalid value or unrecognized property at '$.document.content[0].tabel'."
}

Type incorrect :

// Request: { "document": { "pageSetup": { "margins": "50" }, "content": [{ "p": "Hi" }] } }

{
"code": "SCHEMA_ERROR",
"path": "$.document.pageSetup.margins",
"message": "Invalid value or unrecognized property at '$.document.pageSetup.margins'."
}

Pas JSON :

{
"code": "INVALID_JSON",
"path": "$",
"message": "Content does not appear to be JSON."
}

Contenu vide :

{
"code": "EMPTY_CONTENT",
"path": "document.content",
"message": "Content array must contain at least one element."
}

Encapsulation automatique

Si vous envoyez une définition de document nue sans l'enveloppe document, l'API l'encapsulera automatiquement pour vous :

// This works:
{ "content": [{ "p": "Hello" }] }

// The API treats it as:
{ "document": { "content": [{ "p": "Hello" }] } }

Si ni document ni content n'est trouvé à la racine, l'API retourne une erreur MISSING_ROOT.

Erreurs serveur

Retourné par le gestionnaire d'exception global pour les erreurs d'infrastructure, d'autorisation et d'exécution. Utilise le format RFC 7807 Problem Details.

{
"status": 503,
"title": "Service Unavailable",
"detail": "Database service is temporarily unavailable.",
"instance": "/api/v1/{tenantId}/documents/generate-from-payload",
"traceId": "00-abc123def456-789012-00",
"errorCode": "DATABASE_UNAVAILABLE",
"isRetryable": true,
"retryAfterSeconds": 30
}
ChampTypeDescription
statusintegerCode de statut HTTP
titlestringPhrase de raison HTTP standard
detailstringDescription lisible par l'humain
instancestringChemin de la requête qui a déclenché l'erreur
traceIdstringID de trace unique pour les demandes de support
errorCodestringCode d'erreur lisible par machine
isRetryablebooleanSi la requête peut être relancée
retryAfterSecondsintegerSecondes à attendre avant de relancer (si relançable)

Codes de statut HTTP

ÉtatQuandRelançable
400JSON invalide, erreurs de schéma, contenu vide, paramètres de requête incorrectsNon
401Clé API manquante ou invalideNon
403Permissions insuffisantes ou incompatibilité de locataireNon
404Modèle ou document non trouvéNon
429Limite de débit dépasséeOui — vérifiez l'en-tête X-RateLimit-Reset
500Échec de la génération de PDF ou erreur serveur inattenduePeut-être — relancer une fois
503Base de données, stockage ou service externe temporairement indisponibleOui — vérifiez retryAfterSeconds

Codes d'erreur serveur

CodeÉtatDescription
VALIDATION_ERROR400Paramètres de requête invalides
INVALID_OPERATION400Opération non valide à l'état actuel
ACCESS_DENIED401Échec de l'authentification
TENANT_CLAIM_MISSING403Informations de locataire manquantes du jeton
TENANT_MISMATCH403Accès à une ressource d'un locataire différent
FILE_NOT_FOUND404Le fichier demandé n'existe pas
REQUEST_CANCELLED400Le client a annulé la requête
DATABASE_UNAVAILABLE503Base de données temporairement indisponible (relançable)
AZURE_SERVICE_ERROR503Service de stockage temporairement indisponible (relançable)
EXTERNAL_SERVICE_ERROR503Dépendance externe temporairement indisponible (relançable)
NETWORK_ERROR503Problème de connectivité réseau (relançable)
SERVICE_TIMEOUT503Délai d'attente de la requête dépassé
INTERNAL_ERROR500Erreur serveur inattendue

Limitation du débit

Les en-têtes de limite de débit sont inclus dans chaque réponse :

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1711843200
En-têteDescription
X-RateLimit-LimitRequêtes maximales par minute pour votre plan
X-RateLimit-RemainingRequêtes restantes dans la fenêtre actuelle
X-RateLimit-ResetHorodatage Unix lorsque la limite de débit se réinitialise

Bonnes pratiques

  1. Vérifiez le code de statut HTTP en premier avant d'analyser le corps de la réponse.
  2. Utilisez code pour la gestion programmatique — correspondsur les codes d'erreur, pas sur les chaînes de message.
  3. Utilisez path pour localiser le problème dans les erreurs de validation — il pointe vers la propriété JSON exacte.
  4. Relancez sur 429 et 503 avec backoff. Utilisez retryAfterSeconds ou X-RateLimit-Reset pour déterminer le temps d'attente.
  5. Ne relancez pas sur 400, 401, 403 ou 404 — corrigez d'abord la requête.
  6. Enregistrez traceId pour les erreurs serveur — incluez-le lors de la prise de contact avec le support.
  7. Validez localement avec le schéma JSON pour détecter les erreurs avant d'envoyer à l'API.