Traduite de l'anglais. En cas de différence, la page en anglais fait foi. Lire en anglais
Erreurs
L'enveloppe d'erreur, chaque code d'erreur, et que faire pour chacun.
Chaque réponse d'erreur a la même forme :
{
"error": {
"type": "invalid_request_error",
"code": "photo_required_for_channel",
"message": "Product 66a1… has no images: channel \"etsy\" requires at least one image. Add an image, then publish again.",
"param": null,
"doc_url": "https://developers.nembol.com/docs/getting-started/errors#photo_required_for_channel"
},
"request_id": "req_9f83…"
}type: l'une des quatre familles (ci-dessous). Basez votre logique de relance dessus.code: chaîne stable, lisible par une machine. Basez dessus le traitement spécifique.message: lisible par un humain, en anglais, il explique comment corriger. Ne l'analysez jamais.param: le champ en cause pour les erreurs de validation (par ex.variants[2].price).request_id: indiquez-le quand vous contactez le support.
Types d'erreur
Codes courants
| Code | HTTP | Signification |
|---|---|---|
invalid_api_key | 401 | Clé absente, mal formée, révoquée ou renouvelée |
insufficient_scope | 403 | La clé n'a pas le scope requis pour cet endpoint |
plan_not_eligible | 403 | Le plan de la boutique n'inclut pas l'accès à l'API (pendant l'essai : seules les clés de test fonctionnent) |
product_not_found / order_not_found / variant_not_found / listing_not_found / action_not_found / operation_not_found / event_not_found / import_not_found / channel_account_not_found / channel_connection_not_found / ignored_listing_not_found / webhook_endpoint_not_found / redirect_url_not_found / promotion_not_found / discount_not_found / bundle_not_found / notification_not_found | 404 | Cette ressource n'existe pas dans cette boutique. listing_not_found apparaît aussi par élément dans les résultats batch des annonces |
validation_failed | 422 | Voir param et message |
invalid_json | 400 | Le corps n'est pas un JSON valide (un guillemet, une virgule ou un crochet manquant). Rien n'a été lu ni modifié |
payload_too_large | 413 | Le corps dépasse 25 Mo. Envoyez les images sous forme d'URL ou via POST /files, ou divisez le batch |
unsupported_encoding | 415 | Le jeu de caractères ou l'encodage du corps n'est pas pris en charge. Envoyez du JSON en UTF-8 (gzip est accepté) |
subscription_inactive | 402 | L'abonnement Nembol de la boutique n'est pas actif : les canaux ne peuvent être ni connectés ni déconnectés (POST /channel_connections, POST /channel_accounts/{id}/disconnect). Le même code peut arriver sur return_url à l'ouverture du lien |
photo_required_for_channel | 422 | Publication d'un produit sans image sur un canal qui exige des images |
billing_managed_by_nembol | 409 | Un lien de facturation sur une boutique facturée directement par Nembol (billing_source: "manual") : les modifications passent par billing@nembol.com |
no_items_applied | 422 | POST /inventory/batch et POST /products/batch : aucun élément n'a pu être appliqué (chaque SKU est inconnu, ambigu, sur un produit qui requiert une attention, ou invalide). Raisons dans error.details.rejected_items ; rien n'a été modifié |
image_unreachable | 422 | L'url d'une image n'a pas pu être téléchargée (l'hôte a refusé ou l'URL est incorrecte ; param indique quelle image). Utilisez une URL publique ou envoyez le fichier en base64 |
channel_not_connected | 422 | Publication/retrait, ou promotion, sur un canal que la boutique n'a pas connecté |
not_supported_for_channel | 422 | Cet endpoint ne fonctionne que pour certains canaux. Le message les indique |
setting_not_supported | 422 | Ce paramètre n'existe pas sur ce compte de canal. Son tableau writable liste ce qui peut être modifié |
trial_publish_limit | 403 | La limite de publication de l'essai sur ce canal est atteinte. Apparaît aussi par élément dans les résultats batch des annonces. Abonnez-vous pour publier davantage |
sku_not_found / sku_ambiguous | 422 | Élément de batch refusé (/inventory/batch, /products/batch) : SKU inconnu, ou SKU présent sur plusieurs variantes (error.details.product_ids les liste ; rien n'est écrit). Corrigez le doublon ou mettez à jour par identifiant |
images_unsupported_on_batch_update | par élément | L'élément de batch correspond à un produit existant mais envoie des images. Mettez à jour ses images avec PATCH /products/{id} |
file_too_large / unsupported_file_type | 422 | Une image (POST /files, ou images[] en base64 ou url) dépasse 10 Mo, ou n'est pas un JPEG, PNG, WebP ou GIF, par ex. une URL qui renvoie une page HTML. param indique quelle image |
idempotency_key_reused | 409 | Même Idempotency-Key avec un contenu différent |
idempotency_key_in_flight | 409 | La première requête avec cette Idempotency-Key est toujours en cours. Réessayez dans un instant |
precondition_failed | 412 | expected_updated_at ne correspond pas. Relisez la ressource et réessayez |
product_still_listed | 422 | Suppression refusée : le produit a encore des annonces en ligne. Retirez-les d'abord |
order_not_fulfillable | 422 | La commande est annulée/remboursée et ne peut pas être marquée comme expédiée |
channel_notification_unsupported | 422 | Ce canal ne peut pas recevoir de notifications d'expédition. Réessayez avec notify_channel: false |
overrides_not_supported | 422 | Pour l'instant, seuls overrides.title / overrides.description peuvent être définis sur une annonce. Un corps vide relance la synchronisation |
listing_not_delistable | 422 | Les annonces importées/liées appartiennent au canal |
listing_operation_in_progress | 409 | Attendez la fin de l'opération en cours, puis réessayez |
not_started | par élément | Résultat d'opération : la tâche sur le canal n'a pas pu démarrer car une autre opération a pris l'annonce. Réessayez |
no_price / price_below_minimum | par élément | Résultat d'ajustement de prix : le produit n'a aucune variante avec un prix, ou le nouveau prix serait inférieur au minimum. Rien n'a changé pour ce produit |
channel_error | n/a | (dans les issues[] d'une annonce) le canal a refusé la dernière écriture. Le message est l'erreur du canal. Filtrez avec error_contains |
import_not_supported | 422 | Les produits ne peuvent pas être importés depuis ce canal |
import_already_running | 409 | Un import depuis ce compte de canal, ou un import CSV, est déjà en file ou en cours. Attendez qu'il se termine |
import_still_running / import_already_undone | 409 | Annulation d'import : l'import n'est pas encore terminé, ou a déjà été annulé |
promotion_reaches_nothing | 422 | Promotions : aucun des produits n'est publié sur les canaux choisis, la promotion ne réduirait donc aucun prix. Publiez-les d'abord, ou enregistrez-la comme brouillon |
promotion_conflict | 409 | Certains produits sont déjà dans une autre promotion active. Voir error.details.product_ids et promotion_ids |
promotion_limit_reached | 403 | Le plan Basic (et l'essai gratuit) n'exécute qu'une promotion à la fois (active ou planifiée ; les brouillons ne comptent pas) ; Pro et les plans supérieurs n'ont pas de limite. Voir limits.running_promotions dans GET /billing. Arrêtez l'autre promotion ou passez à un plan supérieur |
unknown_channel | 422 | Promotions : un canal dans channels sur lequel les promotions ne fonctionnent pas. Le message l'indique et liste les canaux valides |
discount_exceeds_price | 422 | Promotions : une réduction fixe n'est pas inférieure à un prix couvert. error.details indique le product_id, le variant_id, le channel et le price |
promotion_running / promotion_not_running / promotion_reverting | 409 | Promotions : modification ou suppression pendant qu'elle est en cours (arrêtez-la d'abord) ; arrêt d'une promotion qui n'est pas en cours ; suppression pendant que les prix des canaux sont encore en cours de restauration (réessayez dans un instant) |
plan_upgrade_required | 403 | Storefront : le plan de la boutique n'inclut pas cette fonctionnalité |
code_exists | 409 | Storefront : une réduction avec ce code existe déjà (param: code) |
transition_not_allowed | 409 | Commande du Storefront : la commande ne peut pas passer de son statut actuel à celui demandé |
already_refunded / order_not_paid | 409 | Remboursement d'une commande du Storefront : il ne reste rien à rembourser, ou la commande n'a jamais été payée. Répondu avant toute confirmation |
stripe_refund_failed / paypal_refund_failed | 502 | Remboursement d'une commande du Storefront : le prestataire de paiement l'a refusé ; le message donne sa raison |
sku_required / title_required | par élément | Il manque à l'élément de batch le SKU pour la correspondance / un titre pour la création |
route_not_found | 404 | Cet endpoint n'existe pas. Consultez la référence |
rate_limit_exceeded | 429 | Seau vide. Respectez Retry-After |
write_quota_exceeded | 429 | Quota quotidien d'écriture sur les canaux atteint |
internal_error | 500 | Un problème est survenu de notre côté. Réessayez avec un délai croissant ; indiquez le request_id si le problème persiste |
channel_unavailable | 502 | Le canal n'a pas répondu ou a échoué. Réessayez plus tard |
confirmation_required | 409 | Action irréversible : affichez confirmation.summary, puis répétez la même requête avec Nembol-Confirmation. Voir Annulation et confirmations |
confirmation_invalid | 409 | Le jeton de confirmation a déjà été utilisé, a expiré ou concerne une autre requête. Un nouveau jeton figure dans la réponse |
undo_conflict | 409 | Rien n'a été annulé : chaque valeur a été modifiée de nouveau depuis. Voir error.details |
action_already_undone | 409 | L'action a déjà été annulée |
not_reversible | 422 | L'action ne peut pas être annulée ; le message indique quoi faire à la place |
undo_window_expired | 422 | Les actions peuvent être annulées pendant 30 jours |
product_not_deleted | 409 | Restauration demandée sur un produit qui n'est pas supprimé |
product_requires_attention | 409 | Le produit est to_verify : résolvez-le (POST /products/{id}/resolve ou une fusion) avant d'écrire ses annonces |
product_not_requiring_attention | 409 | Résolution demandée sur un produit qui n'est pas to_verify |
resolution_not_applicable | 409 | Cette résolution ne correspond pas au requires_attention.reason du produit |
still_requires_attention | 409 | recheck : le paramètre du canal n'est pas encore corrigé. Voir error.details.reason |
confirm_different | 409 | Fusion : les produits ne se ressemblent pas. Vérifiez error.details.product_ids, puis envoyez confirm_different: true |
same_channel_account | 422 | Fusion : deux produits sont en ligne sur le même compte de canal. Voir error.details.channels |
variants_differ | 422 | Fusion : les variantes ne se correspondent pas. Associez-les avec variant_maps à l'aide de error.details.matching |
invalid_choices / too_few / too_many | 422 | Fusion : une entrée de choices ne convient pas, ou le nombre de produits n'est pas compris entre 2 et 10 |
product_merged | 409 | Restauration refusée : le produit a été fusionné. Annulez plutôt la fusion |
not_a_partner | 403 | Nembol-Account ou des endpoints partenaire utilisés par une boutique qui n'est pas partenaire |
not_on_a_sub_account | 400 | Vous avez envoyé Nembol-Account à un endpoint partenaire (/accounts, /partner/*). Ceux-ci fonctionnent sur votre propre compte partenaire : appelez-les sans l'en-tête |
sandbox_limit | 409 | Un partenaire en sandbox a atteint son nombre maximal d'entreprises ouvertes. Fermez-en une d'abord |
plan_too_small | 409 | L'entreprise a plus de produits ou de comptes de canal que le nouveau plan ne le permet |
account_not_found | 404 | Aucune entreprise avec cet identifiant pour votre clé partenaire |
billed_by_partner | 409 | /billing appelé à l'intérieur d'une entreprise : les entreprises sont facturées au partenaire |
billing_managed_elsewhere | 422 | La boutique est facturée via Shopify, Wix ou WooCommerce.com. Changez de plan, résiliez ou mettez à jour le paiement là-bas |
return_url_not_allowed | 422 | return_url doit commencer par une URL enregistrée pour cette boutique (POST /redirect_urls) |
plan_limits_exceeded | 422 | Changement de plan : la boutique utilise plus que ce que le plan cible autorise. Réduisez l'utilisation ou choisissez un plan plus grand |
no_payment_method_yet / no_subscription_yet | 422 | La boutique n'a pas encore de facturation Stripe. Abonnez-vous d'abord avec POST /billing/plan_change_link |
already_canceled / already_canceling / nothing_to_cancel | 422 | Résiliation : l'abonnement est déjà résilié, se termine déjà à la fin de la période, ou il n'y a rien à résilier (essai, pas d'abonnement Stripe) |
trial_not_available | 422 | La boutique ne peut pas relancer d'essai |
billing_provider_error | 502 | Stripe ou PayPal n'a pas renvoyé de page. 409 quand PayPal refuse la modification. Réessayez plus tard |
billing_links_unavailable | 503 | Les liens de facturation ne sont pas encore disponibles. Gérez l'abonnement depuis le tableau de bord Nembol |
account_suspended / account_closed | 409 | Écritures sur une entreprise suspendue (facture partenaire impayée) ou fermée |
product_limit_reached | 409 | La limite de produits du plan de l'entreprise est atteinte. Changez son plan ou supprimez des produits |
channel_slots_full | 422 | Il ne reste aucun emplacement libre pour ce canal. Déconnectez d'abord un compte |
plan_channel_not_included | 403 | Le plan de la boutique n'inclut pas ce canal. Passez à un plan supérieur pour le connecter |
channel_not_disconnectable | 422 | La boutique paie son abonnement Nembol via ce compte, il ne peut donc pas être déconnecté |
connection_not_awaiting_choice | 409 | choose sur une connexion qui n'est pas needs_choice |
choice_expired | 410 | Plus d'une heure s'est écoulée depuis la connexion du vendeur. Créez un nouveau lien |
link_expired / link_already_used | n/a | (sur return_url) le lien de connexion a expiré ou a déjà été utilisé. Créez-en un nouveau |
different_channel_account | n/a | (dans connection.error et sur return_url) le vendeur s'est connecté à une autre boutique que celle en cours de reconnexion (channel_account_id, ou un compte déconnecté que l'on reconnecte : reconnects_shop). Rien n'a changé. Connectez-vous à cette boutique, ou connectez la nouvelle avec new_account: true (sans channel_account_id) |
channel_login_failed | n/a | (sur return_url et dans connection.error) la connexion au canal n'a pas démarré ou n'a pas abouti. Créez un nouveau lien |
channel_credentials_rejected | n/a | (dans connection.error) le canal a refusé les identifiants envoyés |
plan_not_eligible / subscription_inactive / slot_no_longer_available | n/a | (sur return_url, erreur de connexion) la boutique ne peut plus connecter ce canal |
no_account_to_connect | n/a | (erreur de connexion) le compte de canal du vendeur ne contient rien que Nembol puisse connecter |
De nouveaux codes sont ajoutés au fil du temps ; gérez les codes inconnus en vous rabattant sur type.
Dernière mise à jour le 21 octobre 2026
Besoin d'aide ?
Écrivez-nous et une personne vous répond, généralement sous un jour ouvré.