Aller au contenu principal

Erreurs

Cette page rassemble les erreurs décrites dans les autres pages pour que vous puissiez les traiter à un seul endroit. L'API répond à chaque erreur avec la même enveloppe JSON ; les endpoints OAuth utilisent la forme de la RFC 6749.

L'enveloppe d'erreur de l'API​

{
"error": { "code": "forbidden", "message": "Missing scope: orders:write" },
"meta": { "request_id": "8f2c1a9d4b7e6035", "api_version": "v1" }
}

error.code est stable et destiné à votre code. error.message est destiné aux humains et peut changer. Citez meta.request_id quand vous écrivez à DZBuild au sujet d'un appel. Certaines erreurs ajoutent des champs dans error, par exemple retry_after sur un 429.

Codes de statut de l'API​

Statuterror.codeMessageCause et action
400bad_requestvariableL'en-tête Idempotency-Key manque ou est mal formé sur un POST, PATCH ou DELETE, le corps n'est pas du JSON valide, ou un identifiant du chemin n'est pas numérique. Corrigez la requête ; envoyez une nouvelle clé.
401unauthorizedMissing Authorization headerPas d'en-tête Authorization.
401unauthorizedUnsupported Authorization schemeL'en-tête ne commence pas par Bearer.
401unauthorizedInvalid or revoked API keyLe jeton est faux, ou le marchand a désinstallé votre application. Traitez-le comme une désinstallation sauf si vous savez le contraire.
402no_creditLe portefeuille WhatsApp de la boutique est vide. Rien n'a été mis en file ni facturé. Réessayer ne sert à rien ; le marchand recharge depuis son tableau de bord.
402quota_exceededLa boutique a atteint un quota mensuel de requêtes fixé par DZBuild. Réessayer ne sert à rien.
403forbiddenMissing scope: <scope>Le jeton n'a pas le scope que l'endpoint demande. Certaines écritures exigent aussi le scope de lecture ; voir Scopes.
403forbiddenApps cannot use this endpoint/v1/keys, /v1/webhooks et /v1/changes sont fermés aux jetons d'installation.
403app_uninstalledThis app is no longer installed on this storeL'installation n'est plus active. Cessez d'utiliser le jeton et supprimez les données de la boutique.
403app_suspendedThis app has been suspended by DZBuildDZBuild a suspendu ou refusé l'application. Les appels reprennent quand la suspension est levée.
403app_not_approvedThis app is in test mode and only runs on its developer's storesL'application n'a encore jamais été approuvée et la boutique ne vous appartient pas.
403app_plan_requiredThis app requires the ... planLe plan de la boutique, ou un plan payant expiré, est inférieur au plan minimum de l'application. Dites au marchand quel plan est nécessaire.
403addon_not_activeWhatsApp uniquement. Le marchand n'a pas activé l'extension WhatsApp Sender.
403plan_requiredSections de la page d'accueil uniquement. L'écriture laisserait plus de sections que le plan de la boutique n'en autorise. error porte plan et cap.
404not_foundAucun enregistrement avec cet identifiant sur cette boutique.
404section_not_foundSections de la page d'accueil uniquement. Aucune section avec cet identifiant sur la page d'accueil de la boutique.
409already_sentWhatsApp uniquement. Ce modèle a déjà été envoyé pour cette commande. error porte l'id et le status du message existant.
409write_conflictSections de la page d'accueil uniquement. Une autre écriture a changé la mise en page avant, ou la version envoyée sur PUT n'est pas l'actuelle. Quand error porte sections et version, repartez d'elles ; sinon, relisez la mise en page.
422idempotency_key_reuseLa même Idempotency-Key a été envoyée avec une autre méthode, un autre chemin ou un autre corps. Une clé par opération.
422codes WhatsAppunknown_template, invalid_language, invalid_number, suppressed, template_not_approved, empty_param. Rien n'a été facturé. Corrigez la cause et rappelez avec une nouvelle clé. Voir API WhatsApp.
422codes des sections de l'accueilinvalid_settings (error.fields liste les réglages refusés, sur PUT ceux de la première section refusée), invalid_section_type, limit_reached, invalid_order, no_changes. Corrigez la requête et rappelez avec une nouvelle clé. Voir Sections de la page d'accueil.
429rate_limitedPer-minute API limit exceeded for this app installLe budget de votre installation, 120 requêtes par minute, est épuisé. Attendez retry_after secondes (aussi dans l'en-tête Retry-After) et renvoyez avec la même Idempotency-Key.
429rate_limitedPer-minute API limit exceeded for this storeLe budget partagé de la boutique est épuisé. Même traitement.
429rate_limitedPer-minute API limit exceeded for this keyLe plafond de la passerelle, 600 requêtes par minute et par boutique. Même traitement.
429too_many_concurrentTrop d'opérations coûteuses en même temps (envoi d'images, appels aux transporteurs, écritures des sections de l'accueil). retry_after vaut 5 secondes.
500send_failedWhatsApp uniquement. Le message n'a pas pu être mis en file. Réessayez plus tard.
502server_errorKey lookup failed, retry shortlyLa passerelle n'a pas pu vérifier le jeton auprès de DZBuild. Réessayez après une courte attente avec la même Idempotency-Key.

Réessayer ou non​

RéponseRéessayerAvec
429Oui, après retry_after secondesLa même Idempotency-Key
5xx et 502Oui, après une courte attenteLa même Idempotency-Key ; ces réponses ne sont jamais conservées, la requête s'exécute donc
400, 401, 403, 404, 422Non. Corrigez d'abord la causeUne nouvelle Idempotency-Key, car une réponse 4xx conservée est rejouée pendant 24 heures
402Non. Le marchand doit agir
409 already_sentNon. Le message existe
409 write_conflictOui, à partir des sections et de la version de error, ou après avoir relu la mise en pageUne nouvelle Idempotency-Key

Erreurs OAuth​

Tant que DZBuild n'a pas fait correspondre votre client_id et votre redirect_uri, il affiche une page d'erreur au marchand et ne redirige jamais. Ensuite, il redirige vers votre redirect_uri avec un paramètre error :

errorCause
unsupported_response_typeresponse_type n'est pas code.
invalid_requeststate manquant ou plus long que 1024 caractères, code_challenge qui ne fait pas 43 caractères base64url, ou code_challenge_method différent de S256.
invalid_scopeUn scope non enregistré sur l'application, non autorisé pour les applications, ou un paramètre scope plus long que 512 caractères.
access_deniedLe marchand a cliqué sur Refuser.

L'endpoint de jeton répond en JSON avec error et error_description :

HTTPerrorCause
401invalid_clientclient_id ou client_secret manquant ou faux.
400unsupported_grant_typegrant_type n'est pas authorization_code.
400invalid_grantCode inconnu, expiré ou déjà utilisé, code émis pour une autre application, redirect_uri différente, vérificateur qui ne correspond pas, ou aucune boutique sélectionnée n'a pu être installée.
500server_errorUne panne de la plateforme. Renvoyez le marchand vers l'étape d'autorisation.
403aucun, corps HTMLLa requête ne portait pas d'en-tête User-Agent : dzbuild.com répond à un POST sans cet en-tête par une page de vérification au lieu de JSON. Envoyez-en un, par exemple my-app/1.0 (+https://example.com).

Un code réclamé est consommé même quand l'échange échoue ; lancez une nouvelle demande d'autorisation au lieu de réessayer avec le même code. L'ordre complet des contrôles et les pages d'erreur sont sur la page OAuth.

Échecs de livraison des webhooks​

Une livraison réussit quand votre serveur répond 2xx en moins de 10 secondes. Tout autre statut, une redirection, un délai dépassé ou une erreur de connexion compte comme une tentative échouée. DZBuild tente chaque livraison jusqu'à 5 fois avec des attentes croissantes, puis la marque comme abandonnée. Après 10 tentatives échouées d'affilée sur une installation, cet endpoint est désactivé ; appuyez sur Vérifier dans la console développeur pour le réactiver. Les détails et le calendrier sont sur la page Webhooks.

Votre propre vérification doit répondre 401 quand la signature ou le contrôle de l'horodatage échoue. Comme ce n'est pas une réponse 2xx, DZBuild la compte comme une tentative échouée et réessaie ; une requête qui échoue toujours à la vérification ne vient pas de DZBuild, ou votre secret de signature n'est plus à jour.

Cette page pour les outils IAVoir en MarkdownOuvrir dans ChatGPTOuvrir dans Claude