Codes d’erreur
Si une requête échoue, vérifiez le code d’erreur dans la réponse. Dépliez-le dans la liste ci-dessous pour comprendre ce qui s’est passé et savoir quoi faire. Chaque erreur comprend aussi un exemple de réponse et des conseils pour renouveler la requête.
400request.malformedLa requête ne peut pas être analysée.
- Action à effectuer
- Vérifiez la syntaxe JSON, l'encodage URL et la structure de la requête.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "request.malformed",
"fields": null,
"message": "The request could not be read."
},
"meta": {
"request_id": "example-request"
}
}
401authentication.invalid_credentialsLa clé API ou le jeton d'accès est invalide, expiré ou révoqué.
- Action à effectuer
- Vérifiez l'URL de la boutique et les identifiants. Demandez un nouveau jeton avec une clé API active.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé l'authentification ; évitez les demandes de jeton répétées avec des identifiants invalides.
{
"error": {
"code": "authentication.invalid_credentials",
"fields": null,
"message": "The credentials are invalid."
},
"meta": {
"request_id": "example-request"
}
}
401authentication.requiredL'en-tête Authorization requis est absent ou son schéma est incorrect.
- Action à effectuer
- Pour obtenir ou révoquer un jeton, utilisez votre clé API avec
ApiKeydans l’en-têteAuthorization. Pour les autres requêtes, utilisez le jeton d’accès avecBearer. - Règles de nouvelle tentative
- Réessayez après avoir corrigé l'authentification ; évitez les demandes de jeton répétées avec des identifiants invalides.
{
"error": {
"code": "authentication.required",
"fields": null,
"message": "Authentication is required."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.client_ip_unverifiedLe service n'a pas pu établir une adresse IP client de confiance.
- Action à effectuer
- Vérifiez l’adresse IP depuis laquelle votre intégration se connecte à l’API. Si l’erreur persiste, contactez le support technique Shopently.
- Règles de nouvelle tentative
- Renouvelez la requête après avoir résolu le problème d’identification de l’adresse IP.
{
"error": {
"code": "authorization.client_ip_unverified",
"fields": null,
"message": "The client IP address could not be verified."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.ip_not_allowedL'adresse IP source ne figure pas dans la liste autorisée de la clé.
- Action à effectuer
- Utilisez une adresse source approuvée ou demandez à un administrateur habilité de modifier la liste IP de la clé.
- Règles de nouvelle tentative
- Réessayez uniquement lorsque les droits d'accès requis sont effectifs.
{
"error": {
"code": "authorization.ip_not_allowed",
"fields": null,
"message": "Access from this IP address is not allowed."
},
"meta": {
"request_id": "example-request"
}
}
403authorization.scope_deniedLa clé ne dispose pas d'une autorisation effective requise pour cette opération.
- Action à effectuer
- Vérifiez les autorisations requises et conditionnelles, les droits de la clé et l'accès de son émetteur.
- Règles de nouvelle tentative
- Réessayez uniquement lorsque les droits d'accès requis sont effectifs.
{
"error": {
"code": "authorization.scope_denied",
"fields": null,
"message": "The required permission has not been granted."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.api_disabledL'accès API est désactivé pour cette boutique.
- Action à effectuer
- Demandez au propriétaire de vérifier le forfait actif et la disponibilité de l'API.
- Règles de nouvelle tentative
- Réessayez uniquement lorsque les droits d'accès requis sont effectifs.
{
"error": {
"code": "entitlements.api_disabled",
"fields": null,
"message": "API access is disabled for this store."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.limit_exceededLa modification dépasserait une limite du forfait actuel.
- Action à effectuer
- Vérifiez la limite de la ressource et adaptez la modification prévue ou le forfait. Une écriture modifiée nécessite une nouvelle clé d'idempotence.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "entitlements.limit_exceeded",
"fields": null,
"message": "The operation exceeds a plan limit."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.operation_disabledLe forfait actuel ne comprend pas cette opération.
- Action à effectuer
- Vérifiez le forfait minimal indiqué pour l'opération et les autorisations de la clé.
- Règles de nouvelle tentative
- Réessayez uniquement lorsque les droits d'accès requis sont effectifs.
{
"error": {
"code": "entitlements.operation_disabled",
"fields": null,
"message": "The current plan does not allow this operation."
},
"meta": {
"request_id": "example-request"
}
}
403entitlements.resource_blockedUne limite du forfait bloque cette ressource.
- Action à effectuer
- Demandez au propriétaire de résoudre la restriction liée au forfait.
- Règles de nouvelle tentative
- Réessayez uniquement lorsque les droits d'accès requis sont effectifs.
{
"error": {
"code": "entitlements.resource_blocked",
"fields": null,
"message": "A plan limit blocks access to this resource."
},
"meta": {
"request_id": "example-request"
}
}
404resource.not_foundLa ressource est absente, supprimée ou indisponible sous cet identifiant.
- Action à effectuer
- Vérifiez la boutique, le chemin et l'identifiant. Utilisez les identifiants renvoyés par cette boutique.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "resource.not_found",
"fields": null,
"message": "The resource was not found."
},
"meta": {
"request_id": "example-request"
}
}
405request.method_not_allowedCe point d'accès ne prend pas en charge cette méthode HTTP.
- Action à effectuer
- Utilisez la méthode documentée. L'en-tête Allow indique les méthodes prises en charge.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "request.method_not_allowed",
"fields": null,
"message": "This method is not supported for this resource."
},
"meta": {
"request_id": "example-request"
}
}
409idempotency.key_reusedCette clé d'idempotence appartient à une autre requête.
- Action à effectuer
- Retrouvez l'opération d'origine. Utilisez une nouvelle clé uniquement pour une nouvelle opération logique intentionnelle.
- Règles de nouvelle tentative
- Ne forcez pas automatiquement la modification en conflit et ne la renvoyez pas à répétition.
{
"error": {
"code": "idempotency.key_reused",
"fields": null,
"message": "This idempotency key was used with a different request."
},
"meta": {
"request_id": "example-request"
}
}
409resource.already_existsUne valeur unique est en conflit avec une ressource existante.
- Action à effectuer
- Lisez la ressource existante et décidez de l'utiliser ou de choisir une autre valeur unique.
- Règles de nouvelle tentative
- Ne forcez pas automatiquement la modification en conflit et ne la renvoyez pas à répétition.
{
"error": {
"code": "resource.already_exists",
"fields": null,
"message": "A resource with these unique values already exists."
},
"meta": {
"request_id": "example-request"
}
}
409resource.in_useD'autres ressources dépendent encore de cette ressource.
- Action à effectuer
- Examinez les dépendances et modifiez-les ou supprimez-les avec les opérations prises en charge avant de supprimer la ressource.
- Règles de nouvelle tentative
- Réessayez après avoir résolu les dépendances.
{
"error": {
"code": "resource.in_use",
"fields": null,
"message": "The resource is still in use."
},
"meta": {
"request_id": "example-request"
}
}
409resource.state_conflictL'état métier actuel empêche cette modification.
- Action à effectuer
- Lisez l'état actuel et choisissez une transition métier valide.
- Règles de nouvelle tentative
- Ne forcez pas automatiquement la modification en conflit et ne la renvoyez pas à répétition.
{
"error": {
"code": "resource.state_conflict",
"fields": null,
"message": "The current resource state does not allow this operation."
},
"meta": {
"request_id": "example-request"
}
}
409resource.version_conflictUne autre écriture a modifié la ressource depuis la version que vous avez lue.
- Action à effectuer
- Lisez le dernier état, réconciliez votre modification et envoyez la nouvelle expected_version.
- Règles de nouvelle tentative
- Utilisez une nouvelle clé d'idempotence pour l'opération révisée ; n'écrasez pas les données sans les vérifier.
{
"error": {
"code": "resource.version_conflict",
"fields": null,
"message": "The resource version has changed."
},
"meta": {
"request_id": "example-request"
}
}
409storage.limit_reachedLa limite de stockage des images et fichiers est atteinte. Libérez de l’espace ou augmentez la limite.
- Action à effectuer
- La limite de stockage des images et fichiers est atteinte. Libérez de l’espace ou augmentez la limite.
- Règles de nouvelle tentative
- Envoyez des opérations plus petites et valides, chacune avec sa propre clé d'idempotence.
{
"error": {
"code": "storage.limit_reached",
"fields": null,
"message": "The upload storage limit is reached."
},
"meta": {
"request_id": "example-request"
}
}
413request.too_largeLa requête dépasse la taille maximale autorisée.
- Action à effectuer
- Réduisez le contenu ou répartissez le travail en opérations individuelles prises en charge.
- Règles de nouvelle tentative
- Envoyez des opérations plus petites et valides, chacune avec sa propre clé d'idempotence.
{
"error": {
"code": "request.too_large",
"fields": null,
"message": "The request exceeds the size limit."
},
"meta": {
"request_id": "example-request"
}
}
415request.unsupported_media_typeLe type de média ou l'encodage du contenu n'est pas pris en charge.
- Action à effectuer
- Pour les écritures JSON, utilisez Content-Type: application/json et un corps non compressé pris en charge.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "request.unsupported_media_type",
"fields": null,
"message": "The request media type or encoding is not supported."
},
"meta": {
"request_id": "example-request"
}
}
416request.range_not_satisfiableContraintes: Range
- Action à effectuer
- Range: bytes=0-(size_bytes-1)
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "request.range_not_satisfiable",
"fields": null,
"message": "The requested byte range is unavailable."
},
"meta": {
"request_id": "example-request"
}
}
422request.validation_failedUn ou plusieurs champs ou paramètres ne passent pas la validation.
- Action à effectuer
- Examinez error.fields, les champs obligatoires, l'autorisation de null, les identifiants et les valeurs admises. Une écriture modifiée constitue une nouvelle opération logique.
- Règles de nouvelle tentative
- Réessayez après avoir corrigé la requête.
{
"error": {
"code": "request.validation_failed",
"fields": null,
"message": "Some request parameters are invalid."
},
"meta": {
"request_id": "example-request"
}
}
429capacity.queue_fullLa courte file d’attente de l’API est pleine ; la requête n’a pas commencé à s’exécuter.
- Action à effectuer
- Mettez les requêtes en file d'attente et respectez l'en-tête Retry-After de la réponse.
- Règles de nouvelle tentative
- Attendez au moins le nombre de secondes indiqué par
Retry-After. Si vous renouvelez un enregistrement, conservez le même corps de requête et la même valeurIdempotency-Key.
{
"error": {
"code": "capacity.queue_full",
"fields": null,
"message": "The API is busy. Please retry shortly."
},
"meta": {
"request_id": "example-request"
}
}
429capacity.wait_timeoutLe délai d’attente dans la file de l’API a expiré ; la requête n’a pas commencé à s’exécuter.
- Action à effectuer
- Mettez les requêtes en file d'attente et respectez l'en-tête Retry-After de la réponse.
- Règles de nouvelle tentative
- Attendez au moins le nombre de secondes indiqué par
Retry-After. Si vous renouvelez un enregistrement, conservez le même corps de requête et la même valeurIdempotency-Key.
{
"error": {
"code": "capacity.wait_timeout",
"fields": null,
"message": "The API could not start this request in time. Please retry shortly."
},
"meta": {
"request_id": "example-request"
}
}
429rate_limit.exceededLa fréquence des requêtes dépasse la limite applicable.
- Action à effectuer
- Mettez les requêtes en file d'attente et respectez l'en-tête Retry-After de la réponse.
- Règles de nouvelle tentative
- Attendez au moins le nombre de secondes indiqué par
Retry-After. Si vous renouvelez un enregistrement, conservez le même corps de requête et la même valeurIdempotency-Key.
{
"error": {
"code": "rate_limit.exceeded",
"fields": null,
"message": "The request rate limit has been exceeded."
},
"meta": {
"request_id": "example-request"
}
}
500internal.errorUne erreur inattendue du service s'est produite.
- Action à effectuer
- Attendez un instant avant de renouveler la requête. Si l’erreur 500 se reproduit, contactez le support technique Shopently. Indiquez l’identifiant de la requête dans votre message.
- Règles de nouvelle tentative
- Vous pouvez renouveler la lecture après une courte pause. Pour renouveler un enregistrement, conservez la même valeur
Idempotency-Keyet le même corps de requête.
{
"error": {
"code": "internal.error",
"fields": null,
"message": "An unexpected error occurred."
},
"meta": {
"request_id": "example-request"
}
}
502gateway.bad_responseLa passerelle n'a pas reçu de réponse API valide.
- Action à effectuer
- Conservez l'identifiant de requête. Une réponse en échec ne prouve pas que l'écriture n'a pas été appliquée.
- Règles de nouvelle tentative
- Limitez les tentatives, avec un délai croissant et aléatoire. Pour la même écriture, conservez l'Idempotency-Key d'origine et le contenu inchangé.
{
"error": {
"code": "gateway.bad_response",
"fields": null,
"message": "The API gateway could not obtain a valid response."
},
"meta": {
"request_id": "example-request"
}
}
504gateway.timeoutLa passerelle a dépassé le délai d'attente de l'API.
- Action à effectuer
- Si la requête modifiait des données, vérifiez si elles ont été enregistrées dans la boutique. L’absence de réponse ne signifie pas que l’enregistrement a échoué. Si l’erreur se répète, contactez le support technique Shopently en précisant l’identifiant de la requête.
- Règles de nouvelle tentative
- Vous pouvez renouveler la lecture après une courte pause. Pour renouveler un enregistrement, conservez la même valeur
Idempotency-Keyet le même corps de requête.
{
"error": {
"code": "gateway.timeout",
"fields": null,
"message": "The API gateway timed out."
},
"meta": {
"request_id": "example-request"
}
}