Erreurs
Chaque erreur a la même enveloppe : { "error": "<code>", "message": "…", "details": { … } }. Branchez-vous sur error, jamais sur message ; details.path désigne le champ lorsqu’un champ est en cause.
Les chemins, noms de champs, codes d’erreur, noms d’en-têtes et exemples de code restent en anglais : ils font partie du contrat.
Quand réessayer
429 et 503 arrivent avec un en-tête Retry-After : attendez ce nombre de secondes et renvoyez la même requête. 504 solve_timeout peut réussir à la nouvelle tentative avec une tâche plus petite. Tout 4xx autre que 429 signale un problème de la requête elle-même et échoue de nouveau si elle est inchangée.
Codes
| Code | Statut | Signification |
|---|---|---|
| invalid_request | 400 | Le corps ou un paramètre est mal formé : pas du JSON, pas un objet, ou un champ de forme incorrecte. |
| idempotency_key_required | 400 | L’appel de commande n’a pas d’en-tête Idempotency-Key valide. |
| quote_invalid | 400 | Le jeton de devis n’appartient pas à ce devis, a expiré ou a été modifié, ou test et production ont été mélangés. |
| unknown_workflow | 400 | La boutique n’a aucun workflow avec cet identifiant. |
| workflow_disabled | 400 | Le workflow existe mais est désactivé. |
| mode_mismatch | 400 | Le mode envoyé n’est pas celui de ce workflow. |
| unknown_mode | 400 | Le mode envoyé n’est pas un mode connu. |
| unsupported_mode | 400 | Le mode du workflow n’est pas encore disponible sur ce service. |
| limit_exceeded | 400 | Trop ou trop peu de lignes, trop de pièces, ou une pièce hors des limites de taille de la boutique. |
| outside_catalog_slice | 400 | Un matériau n’est pas proposé dans ce workflow. |
| unknown_reference | 400 | Un matériau, un chant ou un autre article du catalogue est inconnu ou désactivé. |
| required_field_missing | 400 | Un champ que la boutique a marqué comme obligatoire est manquant. |
| unauthorized | 401 | La clé est absente, mal formée, inconnue ou révoquée, ou une clé de test a expiré. |
| project_token_required | 401 | Un appel de projet exige l’en-tête du jeton de projet. |
| project_token_invalid | 401 | L’en-tête du jeton de projet est mal formé ou a été envoyé deux fois. |
| quota_exceeded | 402 | Le quota mensuel de devis de la boutique est épuisé. |
| customer_context_required | 403 | Un groupe de clients autre que celui par défaut exige la clé secrète, donc un appel depuis votre serveur. |
| origin_not_allowed | 403 | L’origine de la page ne figure pas dans la liste de la clé publique. |
| sandbox_expired | 403 | La boutique bac à sable a expiré et est en lecture seule. |
| not_found | 404 | Aucune route, aucun devis, aucune commande ni aucun projet de ce type, ou un élément qui appartient à une autre boutique. |
| not_configured | 404 | La boutique n’a pas encore publié de configuration. |
| idempotency_conflict | 409 | Cette Idempotency-Key a déjà été utilisée pour un autre devis. |
| quote_already_redeemed | 409 | Ce devis a déjà été commandé. |
| quote_requote | 409 | Le devis a été signé avec une clé qui a depuis fait l’objet d’une rotation : demandez un nouveau devis. |
| too_large | 413 | Le corps de la requête est plus grand que ce que la route accepte. |
| unsupported_media_type | 415 | Le corps n’a pas été envoyé en application/json. |
| plan_incomplete | 400 / 422 | Certaines pièces ne tiennent sur aucun panneau, il n’y a donc rien à chiffrer. |
| project_not_reorderable | 422 | Le projet enregistré ne contient aucune liste de découpe pouvant être chiffrée. |
| rate_limited | 429 | Une limite de débit a été atteinte : attendez le nombre de secondes indiqué dans Retry-After. |
| busy | 429 | La file du solveur est pleine : réessayez après le nombre de secondes indiqué dans Retry-After. |
| test_limit | 429 | Les clés de test ont atteint leur plafond quotidien de devis ou de commandes. |
| sandbox_order_limit | 429 | La boutique bac à sable a atteint son plafond de commandes pour la période. |
| project_limit | 429 | La boutique stocke déjà le nombre ou la taille maximum de projets enregistrés. |
| internal | 500 | Une erreur inattendue de notre côté. |
| service_unavailable | 503 | Une partie du service n’a pas répondu : réessayez plus tard. |
| config_invalid | 503 | La configuration de la boutique ne peut pas être chargée. |
| tenant_unconfigured | 503 | La boutique n’a aucune clé de signature de devis active. |
| final_engine_unavailable | 503 | Ce workflow chiffre avec le moteur max, qui n’est pas disponible ici. |
| solve_timeout | 504 | Le calcul du plan a pris trop de temps. |
Codes de tarification
Ces codes viennent du moteur de tarification. Ils répondent 400 sur POST /cfg/v1/quote et sur une recommande ; sur POST /cfg/v1/preview, l’appel réussit et le code arrive dans priceError, de sorte que l’aperçu en direct peut montrer le plan alors que le prix ne peut pas être calculé.
invalid_config · invalid_job · invalid_request · unknown_workflow · workflow_disabled · unknown_mode · mode_unavailable · unsupported_mode · unknown_reference · item_disabled · outside_catalog_slice · unpriced_item · no_strategy · unpriced_sheet · cut_length_unattributable · plan_incomplete · bonded_unpriced · bonded_not_allowed · template_value_invalid · machining_length_missing · machining_invalid · unknown_customer_group · shipping_unavailable · delivery_below_minimum · weight_unavailable · rule_budget · amount_overflow
Il n’y a volontairement pas de bouton « essayer » ici : la clé secrète appartient à votre serveur, jamais à un navigateur. La boutique de démonstration montre l’intégration et la transmission de la commande de bout en bout.
Mentions légalesConditions du configurateur (EN) ·Accord de traitement des données (EN) ·Notice de confidentialité pour les acheteurs ·Licences tierces (EN)