ULTINEO

Codes d'erreur

Un appel en échec utilise la même enveloppe qu'un appel réussi : lisez le code de statut HTTP, puis lisez response pour obtenir un message décrivant le problème. Les messages sont des phrases en anglais stables, que vous pouvez journaliser et afficher à un opérateur, mais basez votre logique sur le code de statut.

application/json
{
  "code": 403,
  "title": "Forbidden",
  "response": "The API key is missing the required scope: order:write"
}
ChampTypeDescription
codeentierLe code de statut HTTP, répété dans le corps.
titlechaîneLe libellé court du statut.
responsechaîneCe qui n'a pas fonctionné.

Remarque — Le 404 pour un chemin inconnu et le 429 décrit ci-dessous sont renvoyés avant que votre requête n'atteigne un point d'accès ; dans ces deux réponses, code est une chaîne ("404", "429"). Fiez-vous au code de statut HTTP plutôt qu'au type de ce champ.

Codes de statut

CodeStatutDescription
200OKUne lecture a réussi, ou un import a accepté au moins un élément. Lisez le rapport ligne par ligne : certains éléments peuvent tout de même être refusés, et vérifiez le champ dry_run qu'il renvoie.
301Moved PermanentlyVous avez appelé http://. Refaites l'appel en https://.
400Bad RequestUne lecture ne désignait aucun élément (le paramètre de lecture est absent), ou le corps de la requête n'est pas un JSON valide.
401UnauthorizedAucune clé n'a été envoyée, l'en-tête Authorization ne commence pas par Bearer , ou la clé a expiré.
403ForbiddenLa clé est inconnue ou désactivée, elle ne détient pas le droit nécessaire à l'appel, ou elle a été utilisée pour une autre boutique.
404Not FoundL'élément n'existe pas dans votre boutique — y compris un élément qui appartient à une autre boutique — ou le chemin n'existe pas.
409ConflictLe même élément est déjà en cours d'import par une autre requête, ou un code de bon de réduction est déjà pris.
413Payload Too LargeLe corps de la requête dépasse 200 000 octets. Envoyez des lots plus petits.
422Unprocessable EntityLe lot entier a été refusé : tous les éléments ont été refusés, items est absent ou vide, ou le lot dépasse la limite de la ressource.
429Too Many RequestsTrop de requêtes en peu de temps. Attendez le nombre de secondes indiqué dans l'en-tête Retry-After, puis réessayez.
503Service UnavailableLe service est temporairement incapable de traiter cette ressource pour votre boutique. Réessayez plus tard.

Échecs d'authentification

Ces contrôles ont lieu avant tout le reste, sur chaque chemin.

CodeMessageCause
401No valid API key provided.L'en-tête Authorization est absent, ne commence pas par Bearer , ou ne contient pas une clé de boutique.
401The API key has expired.La clé avait une date d'expiration et celle-ci est dépassée. Une clé sans date d'expiration ne déclenche jamais cette erreur.
403The API key doesn't have permissions to perform the request.La clé est inconnue ou désactivée, ou sa boutique n'est plus active.

Remarque — Une clé inconnue et une clé désactivée donnent le même 403 avec le même message, volontairement : l'API ne confirme jamais l'existence d'une clé.

Échecs liés aux droits et à la boutique

CodeMessageCause
403The API key is missing the required scope: <scope>La clé ne détient ni *, ni <resource>:*, ni le droit nommé. Ajoutez le droit à la clé, ou cessez d'appeler ce point d'accès.
403This API key can only read and write its own project.La requête désignait un project autre que la boutique de la clé. Retirez le champ project : la clé désigne déjà votre boutique.
403This API key is not attached to a project.La clé n'est liée à aucune boutique. Utilisez une clé créée pour votre boutique.

Échecs de requête

CodeMessageCause
400Invalid JSON.Le corps n'est pas un JSON analysable, ou est une valeur JSON qui n'est pas un objet.
400Missing required parameter: <name>.Une lecture n'a fourni ni la clé de l'élément ni son id. La rubrique de chaque ressource liste ses paramètres de lecture.
400Name the customer to read: … / Name the payment to read: …Le même cas sur les lectures de clients et de paiements.
413Request body too large.Le corps a dépassé 200 000 octets.
422Missing required field: items (…).Le corps ne contient pas de liste items, ou items n'est pas une liste. La formulation varie légèrement d'une ressource à l'autre.
422items is empty.La liste items ne contient aucun élément.
422A batch carries at most <limit> <records>.Le lot dépasse la limite de la ressource, indiquée dans chaque tableau de points d'accès. Divisez-le.
422The parameters were valid but the request failed.La méthode n'est pas prise en charge sur ce chemin. Seuls GET et POST sont servis.

Introuvable

CodeMessageCause
404<Record> not found.Aucun élément de votre boutique ne correspond à la clé ou à l'id lu, par exemple Order not found. Un élément d'une autre boutique répond de la même façon. Vérifiez l'orthographe de la référence.
404The requested resource was not found.Le chemin lui-même n'existe pas. Comparez-le aux tableaux de points d'accès.

Refus au sein d'un lot

Un import vérifie chaque élément séparément. Un élément qui échoue à un contrôle est signalé dans la liste data de la réponse avec "action": "refused", le code et le libellé de statut du refus dans code et title, et ce qu'il faut corriger dans reason. Les autres éléments du lot poursuivent leur traitement.

application/json
{
  "index": 3,
  "external_id": "SHP-20931",
  "action": "refused",
  "id": null,
  "code": 409,
  "title": "Conflict",
  "reason": "Another import is already writing this shipment.",
  "notice": []
}
code d'un élément refuséSignificationQue faire
422Une valeur est invalide ou un champ obligatoire est absent ; reason nomme le champ.Corrigez l'élément et renvoyez-le.
404L'élément fait référence à un élément absent de votre boutique, par exemple une commande dont le client n'a pas été importé.Importez d'abord l'élément auquel il fait référence.
409Une autre requête importe le même élément en ce moment, ou un code de bon de réduction est déjà détenu par un autre code.Réessayez l'élément plus tard, ou choisissez un autre code.
500L'élément n'a pas pu être enregistré.Renvoyez l'élément ; l'import peut être rejoué sans risque.

Un lot répond donc :

Réessayer sans risque

Un 429, un 503, une connexion interrompue ou un élément refusé avec le code 409 ou 500 peuvent tous être réessayés. Chaque import est reconnu élément par élément : renvoyer le même lot ne crée donc jamais de doublon, et les éléments déjà enregistrés reviennent en unchanged. Attendez quelques secondes entre deux tentatives, et respectez Retry-After lorsqu'il est présent.