Passer au contenu

Erreurs et réponses d’API

Cet article de référence couvre les diverses erreurs et réponses du serveur qui peuvent apparaître lors de l’utilisation de l’API Braze et la façon de les résoudre.

Réponses du serveur

Si votre payload POST a été accepté par nos serveurs, les messages réussis reçoivent la réponse suivante :

{
  "message" : "success"
}

Notez que « success » signifie uniquement que le payload de l’API RESTful a été correctement formé et transmis à nos services de notification push, d’e-mail ou de tout autre service de communication. Cela ne signifie pas que les messages ont effectivement été distribués, car d’autres facteurs pourraient empêcher la distribution du message (par exemple, un appareil pourrait être hors ligne, le jeton push pourrait être rejeté par les serveurs d’Apple, ou vous pourriez avoir fourni un ID utilisateur inconnu).

Pourquoi ma requête renvoie-t-elle un succès alors qu’aucun message n’a été distribué ?

Une réponse message: success ou 2XX signifie que Braze a accepté et mis en file d’attente la requête pour les endpoints concernés — et non que chaque destinataire a reçu un message. Pour les communications, la distribution dépend encore de l’éligibilité au canal, des jetons, des erreurs du fournisseur et de la validation du contenu. Consultez le tableau des erreurs fatales pour les erreurs HTTP qui bloquent les envois, ainsi que les analyses de votre Campaign ou Canvas pour les indicateurs de distribution en aval.

Pour les endpoints comme /users/identify, qui n’envoient pas de messages, une réponse de succès signifie uniquement que Braze a accepté la requête pour traitement. Si aucun utilisateur n’existe avec l’alias fourni, ou si l’alias appartient à un profil qui possède déjà un external_id, Braze ignore l’identification. L’API renvoie toujours la réponse de succès initiale ; aucune erreur n’indique que l’alias n’a pas été trouvé. Comme alias_name est sensible à la casse, une différence de capitalisation produit le même résultat.

Si votre message a abouti mais comporte des erreurs non fatales, vous recevez la réponse suivante :

{
  "message" : "success", "errors" : [<minor error message>]
}

Dans le cas d’un succès, tous les messages qui n’ont pas été affectés par une erreur dans le tableau errors sont tout de même distribués. Si votre message comporte une erreur fatale, vous recevez la réponse suivante :

{
  "message" : <fatal error message>, "errors" : [<minor error message>]
}

Réponses pour les identifiants d’envoi suivis

Les analyses sont toujours disponibles pour les Campaigns. De plus, les analyses sont disponibles pour une instance d’envoi spécifique d’une Campaign lorsque celle-ci est envoyée en tant que diffusion. Lorsque le suivi est disponible pour une instance d’envoi spécifique d’une Campaign, vous recevez la réponse suivante :

{
  "message": "success", "send_id" : "example_send_id"
}

L’identifiant d’envoi fourni peut être utilisé comme paramètre pour l’endpoint /send/data_series afin de récupérer les analyses spécifiques à l’envoi.

Erreurs

L’élément de code de statut d’une réponse serveur est un nombre à 3 chiffres dont le premier chiffre définit la classe de la réponse.

  • La classe 2XX de code de statut (non fatale) indique que votre requête a été reçue, comprise et acceptée avec succès.
  • La classe 4XX de code de statut (fatale) indique une erreur client. Consultez le tableau des erreurs fatales pour une liste complète des codes d’erreur 4XX et leurs descriptions.
  • La classe 5XX de code de statut (fatale) indique une erreur serveur. Il existe plusieurs causes potentielles, par exemple, le serveur auquel vous essayez d’accéder est incapable d’exécuter la requête, le serveur est en maintenance et ne peut pas exécuter la requête, ou le serveur subit un niveau de trafic élevé. Dans ce cas, nous vous recommandons de réessayer votre requête avec des délais exponentiels. En cas d’incident ou de panne, Braze n’est pas en mesure de rejouer les appels REST API qui ont échoué pendant la fenêtre de l’incident. Vous devez réessayer tous les appels qui ont échoué pendant la fenêtre de l’incident.
    • Une erreur 502 est un échec avant que la requête n’atteigne le serveur de destination.
    • Une erreur 503 signifie que la requête a atteint le serveur de destination, mais que nous ne pouvons pas la traiter car la capacité est insuffisante, ou en raison d’un problème réseau, ou d’une cause similaire.
    • Une erreur 504 indique qu’un serveur n’a pas reçu de réponse d’un autre serveur en amont.

Erreurs fatales

Les codes de statut suivants et les messages d’erreur associés sont renvoyés si votre requête rencontre une erreur fatale.

Code d’erreur Description
5XX Internal Server Error Réessayez votre requête avec des délais exponentiels.
400 Bad Request Mauvaise syntaxe. Un JSON invalide renvoie HTTP 400. Le champ error peut contenir un message indiquant que vous devez transmettre un application/json valide dans le corps de la requête, ou Error while parsing request body. Please check your syntax. Voir Erreur lors de l’analyse du corps de la requête.
400 No Recipients Il n’y a pas d’ID externes, d’ID de Segment, ni de jetons push dans la requête.
400 Invalid Campaign ID Aucune Campaign de l’API de messaging n’a été trouvée pour l’ID de Campaign fourni.
400 Message Variant Unspecified Vous fournissez un ID de Campaign mais pas d’ID de variante de message.
400 Invalid Message Variant Vous avez fourni un ID de Campaign valide, mais l’ID de variante de message ne correspond à aucun des messages de cette Campaign.
400 Mismatched Message Type Vous avez fourni une variante de message d’un type incorrect pour au moins un de vos messages.
400 Invalid Extra Push Payload Vous fournissez la clé extra pour apple_push ou android_push, mais elle n’est pas un dictionnaire.
400 Max Input Length Exceeded Pour /users/track, cette erreur est causée par le dépassement du nombre maximum d’objets autorisés dans une seule requête. La limite dépend du modèle de limitation du débit : pour la plupart des clients, chaque requête prend en charge jusqu’à 75 objets au total, répartis entre attributes, events et purchases. Pour les clients utilisant des limites de débit héritées, chaque tableau prend en charge jusqu’à 75 objets de manière indépendante. Pour en savoir plus, consultez POST : Créer et mettre à jour des utilisateurs.
400 The max number of external_ids and aliases per request was exceeded Causée par l’appel de plus de 50 ID externes.
400 The max number of ids per request was exceeded Causée par l’appel de plus de 50 ID externes.
400 No message to send Aucun payload n’est spécifié pour le message.
400 Slideup Message Length Exceeded Le message contextuel contient plus de 140 caractères.
400 Apple Push Length Exceeded Le payload JSON dépasse 1 912 octets.
400 Android Push Length Exceeded Le payload JSON dépasse 4 000 octets.
400 Bad Request Impossible d’analyser la date et l’heure send_at.
400 Bad Request Dans votre requête, in_local_time est vrai, mais time est déjà passé dans le fuseau horaire de votre entreprise.
401 Unauthorized Clé API invalide. Les causes courantes incluent :

- En-tête Authorization manquant ou mal formé. La valeur de l’en-tête doit être Bearer suivi d’un espace puis de votre clé API : Authorization: Bearer YOUR-API-KEY. Les erreurs courantes incluent l’omission de Bearer, l’omission de la clé après Bearer, ou l’encadrement de la valeur avec des guillemets.
- Mauvais endpoint REST. Vous envoyez la requête à la mauvaise instance. Par exemple, si votre compte est sur notre instance UE (https://dashboard-01.braze.eu), la requête doit être envoyée à https://rest.fra-01.braze.eu.
- Permissions insuffisantes. Chaque clé API est limitée à un espace de travail spécifique et à un ensemble de permissions. Vérifiez les permissions de la clé sous Paramètres > Clés API dans le tableau de bord.
- Mauvaise clé API. Les clés API sont spécifiques à un espace de travail. Une clé d’un espace de travail ne peut pas être utilisée pour authentifier des requêtes pour un autre espace de travail.
403 Forbidden Le plan tarifaire ne le prend pas en charge, ou le compte est autrement désactivé.
403 Access Denied La clé REST API que vous utilisez ne dispose pas de permissions suffisantes. Les causes courantes incluent :
  • La clé API est antérieure à la fonctionnalité. Si la clé API a été créée avant le lancement d'une fonctionnalité (comme les groupes d'abonnement ou les catalogues), la clé n'hérite pas automatiquement de ces permissions. Créez une nouvelle clé API avec les permissions requises sous Paramètres > Clés API.
  • Permission spécifique à l'endpoint manquante. Chaque endpoint API nécessite une portée de permission spécifique (par exemple, users.track ou email.status). Vérifiez que les permissions de la clé correspondent à l'endpoint que vous appelez.
  • Barre oblique finale ou faute de frappe dans l'URL. Par exemple, /users/track/ (avec une barre oblique finale) au lieu de /users/track peut produire des erreurs inattendues.
404 Not Found URL invalide.
415 Unsupported Media Type L’en-tête de requête Content-Type est manquant ou incorrect. Dans la page Paramètres, ajoutez Content-Type avec la valeur application/json.
429 Rate Limited Limite de débit dépassée.

Erreur lors de l’analyse du corps de la requête

Braze renvoie HTTP 400 lorsque le corps de la requête n’est pas un JSON valide. Cela s’applique aux endpoints REST qui acceptent un corps JSON, comme POST, PUT et PATCH.

Le champ error contient un message indiquant que vous devez transmettre un application/json valide dans le corps de la requête. Vous pouvez également voir Error while parsing request body. Please check your syntax.

Les causes courantes incluent les virgules finales, les commentaires dans le JSON, les chaînes entre guillemets simples, une accolade ouvrante { supplémentaire avant le payload, ou l’envoi d’une chaîne concaténée au lieu d’un objet encodé en JSON.

Avant de réessayer :

  1. Validez le payload avec un outil de validation JSON (linter).
  2. Définissez Content-Type: application/json et envoyez du JSON encodé en UTF-8.
  3. Confirmez que votre client HTTP encode l’objet en JSON plutôt que de concaténer des chaînes brutes.

Pour les limites de taille de payload et d’objets par requête de /users/track, consultez Pourquoi est-ce que je reçois 400 Bad Request avec une erreur de syntaxe ou d’analyse ?.

New Stuff!