Aller au contenu principal

Erreurs

Toutes les erreurs suivent la même enveloppe JSON, quel que soit l'endpoint.

{
"message": "Le code promo existe déjà",
"errorCode": "400:PROMO_CODE_ALREADY_EXISTS",
"path": "/coupons",
"date": "2026-01-15T09:30:00.000Z"
}
ChampTypeDescription
messagestringMessage lisible, traduit selon x-lang. À afficher, pas à tester.
errorCodestring<statut HTTP>:<CODE>. Stable : c'est ce champ que votre code doit tester.
pathstringURL appelée, avec la query string.
datestringHorodatage ISO 8601.
detailsobjectFacultatif. Valeurs utiles au diagnostic (ex. crédits restants).
validationErrorsarrayPrésent seulement pour 400:VALIDATION_ERROR : [{field, message}].

Erreurs de validation​

{
"message": "email doit être un e-mail valide",
"errorCode": "400:VALIDATION_ERROR",
"path": "/clients",
"date": "2026-01-15T09:30:00.000Z",
"validationErrors": [
{"field": "email", "message": "email doit être un e-mail valide"},
{"field": "lastName", "message": "lastName doit contenir au moins 2 caractères"}
]
}

message reprend la première erreur. Pour les objets imbriqués, field contient le nom du champ final (backgroundColor), sans le chemin complet.

Bien gérer les erreurs​

const res = await fetch(url, options);
if (!res.ok) {
const err = await res.json();
const [, code] = err.errorCode.split(':');
switch (code) {
case 'UNAUTHORIZED':
// jeton expiré : reconnectez-vous
break;
case 'VALIDATION_ERROR':
// corrigez les champs listés dans err.validationErrors
break;
case 'PASS_BUILDER_ERROR':
// erreur temporaire de génération du pass : réessayez plus tard
break;
default:
throw new Error(`${err.errorCode}: ${err.message}`);
}
}
  • 4xx : la requête est en cause. Ne la renvoyez pas telle quelle.
  • 5xx : erreur côté eldo wallet. Réessayez avec un délai croissant (1 s, 2 s, 4 s…).
  • Chaque page de la référence API liste les erreurs propres à l'endpoint, avec un exemple de réponse.

Tous les codes​

HTTPmessageCodeMessageQue faire
204NOTHING_TO_UPDATEAucune mise à jour nécessaire!
400ACTIVE_WELCOME_COUPON_ALREADY_EXISTSUn coupon de bienvenue actif existe déjà
400ALL_CLIENTS_ALREADY_HAVE_COUPONTous les clients fournis possèdent déjà ce coupon
400ARRIVAL_TIME_MUST_BE_AFTER_DEPARTURE_TIME_CONSIDERING_DATESLa date d'arrivée doit être après la date de départ
400BATCH_LIMIT_EXCEEDEDLimite de lot dépassée (max 100)
400CENTER_ROW_IS_REQUIREDLe centre est requis
400CHECKOUT_MUST_BE_AFTER_CHECKINLa date de sortie doit être après la date d'entrée
400CLIENT_DOES_NOT_BELONG_TO_THIS_WALLETLe client n'appartient pas à ce portefeuille
400CLIENTS_EXIST_FOR_THIS_CARD_TYPE(missing in fr/errors.json; falls back to en)
400COMMUNICATION_DELETEDLa communication est supprimée et ne peut être mise à jour
400DEFAULT_CLIENT_TYPE_REQUIRED(missing in fr/errors.json; falls back to en)
400ERROR_CUSTOMER_TYPE_ASSIGNMENTErreur d'assignation du type de client
400FILE_REQUIREDLe fichier est requis
400HOTEL_HAS_PASSESL'hôtel a des passes!
400INSTANT_COMMUNICATION_ALREADY_EXISTSLa communication instantanée existe déjà
400INSUFFICIENT_CREDITCrédit {creditType} insuffisant : {required} requis, {remaining} restant(s)
400INVALID_DATE_RANGEendDate doit être postérieure ou égale à startDate.
400INVALID_DEPARTURE_OR_ARRIVAL_DATETIME_FORMATFormat de date de départ ou d'arrivée non valide
400INVALID_DEVICE_TYPEType d'appareil non valide: {deviceType}
400INVALID_JSONSyntaxe JSON invalide dans le corps de la requête
400INVALID_MULTIPARTRequête multipart invalide : boundary manquant ou malformé dans l'en-tête Content-Type. Utilisez multipart/form-data avec un boundary valide pour les uploads de fichiers, ou application/json pour les mises à jour sans fichier.
400INVALID_PASS_KINDType de pass non valide
400INVALID_PASS_TYPEInvalid pass type: {passType}
400INVALID_STATUSStatut invalide fourni
400INVALID_WALLET_OBJECT_TYPEType d'objet de portefeuille non valide: {objectType}
400LEFT_ROW_IS_REQUIREDLe gauche est requis
400MAX_WALLET_LOCATIONS_REACHEDNombre maximum de locations atteint
400MISSING_ANDROID_OBJECT_IDID d'objet Android manquant
400MISSING_BARCODECode-barres manquant
400MISSING_RECIPIENT_DETAILS_FOR_NON_CLIENTInformations manquantes (prénom, nom, email) pour un destinataire non-client
400MISSING_REQUIRED_FIELDSChamps obligatoires manquants: {fields}
400NO_CLIENTS_FOUNDAucun client trouvé
400NO_CUSTOMERS_FOUNDAucun client trouvé
400NO_PASS_DATA_PROVIDEDAucune donnée de pass fournie
400NO_RECIPIENTS_PROVIDEDAucun destinataire fourni
400OPERATION_TYPE_NOT_ALLOWEDoperationType n'est autorisé que lorsque transactionType vaut OPERATION
400OPERATION_TYPE_REQUIREDoperationType est requis lorsque transactionType vaut OPERATION
400PACK_ALREADY_EXISTSLe nom du pack existe déjà
400PACK_INSUFFICIENT_CREDITSImpossible d'assigner le pack : ce portefeuille compte {clientsCount} clients, mais le(s) crédit(s) {creditTypes} du pack en autorisent moins
400PASS_ALREADY_CANCELEDImpossible de mettre à jour un pass annulé
400PASS_ALREADY_EXPIRED(missing in fr/errors.json; falls back to en)
400PASS_ALREADY_GENERATEDPass déjà généré
400PASS_ALREADY_REDEEMEDLe pass est déjà utilisé
400PASS_NOT_REDEEMEDLe pass n'est pas utilisé
400PROMO_CODE_ALREADY_EXISTSLe code promo existe déjà
400RIGHT_ROW_IS_REQUIREDLe droit est requis
400SCHEDUle_DATE_PASSEDLa date de planification est déjà passée
400SMS_CONFIG_REQUIRED(missing in fr/errors.json; falls back to en)
400SMS_CREDENTIALS_NOT_CONFIGUREDLes identifiants SMS ne sont pas configurés pour ce portefeuille
400SMS_TITLE_IS_REQUIREDLe titre du SMS est requis
400SYNC_EXECUTION_NOT_ALLOWEDL'exécution synchrone n'est pas autorisée pour les opérations par lots avec 1000 ou plus d'éléments. Veuillez définir forceSync sur false ou réduire le nombre d'éléments en dessous de 1000.
400SYNC_EXECUTION_NOT_ALLOWED_FOR_BULK_UPDATE_CLIENTS(missing in fr/errors.json; falls back to en)
400SYSTEM_DOES_NOT_SUPPORT_MORE_THAN_100000_CUSTOMERSLe système ne supporte pas plus de 100,000 clients
400UNEXPECTED_FIELDChamps inattendu: {field}
400UNLIMITED_COMMUNICATION_ALREADY_EXISTSLa communication illimitée existe déjà
400UNSUPPORTED_EVENT_TYPE:Type d'événement non pris en charge: {eventType}
400USE_OTHER_SERVICE_COMMUNICATION_DELETEUtilisez le service de suppression pour supprimer la communication
400USER_ALREADY_EXISTSL'utilisateur existe déjà
400VALIDATION_ERRORErreur de validation!
400WALLET_IDENTIFIER_REQUIREDL'identifiant du portefeuille est requis pour la création du modèle de pass
400WALLET_NOT_CONFIGURED(missing in fr/errors.json; falls back to en)
401PASSBUILDER_TOKEN_MISSINGLe token PassBuilder est manquant
401UNAUTHORIZEDNon autorisé!
403FORBIDDENInterdit!
404CERTIFICATE_NOT_FOUNDCertificat introuvable!
404CLASS_NOT_FOUNDClasse Google Wallet demandée introuvable.
404COUPON_TEMPLATE_NOT_FOUNDModèle de coupon introuvable
404CREATE_WALLET_CLASS_FAILEDÉchec de la création de la classe Google Wallet.
404INITIALIZE_WALLET_OBJECT_CLIENT_FAILEDÉchec de l'initialisation du client Google Wallet.
404MISSING_ANDROID_CLASS_IDID de classe Android manquant
404MISSING_FIELDchamps manquants: {field}
404MODEL_NOT_FOUNDModèle introuvable!
404OBJECT_CREATION_FAILED Échec de la création de l'objet Google Wallet.
404OBJECT_NOT_FOUNDObjet introuvable
404OBJECT_UPDATE_FAILEDÉchec de la mise à jour de l'objet Google Wallet.
404PACK_NOT_ASSIGNEDAucun pack de crédits n'est assigné à ce portefeuille.
404PASS_BUILDER_PASS_ID_NOT_FOUNDID de pass builder non trouvé
404PASS_NOT_FOUNDPass introuvable
404PASSBUILDER_UPDATE_FAILEDÉchec de la mise à jour du portefeuille avec les informations PassBuilder
404PATH_NOT_FOUNDChemin introuvable!
404STORECARD_NOT_FOUNDPass storecard introuvable
404TEMPLATE_NOT_FOUNDLe modèle n'existe pas : {templateName}
404TOKEN_MISMATCH_OR_DEVICE_NOT_FOUNDNon valide ou appareil introuvable
404UNSUPPORTED_WALLET_TYPEUnsupported wallet type
404UPDATE_OPERATION_NOT_SUPPORTEDMise à jour non prise en charge
404UPDATE_WALLET_CLASS_FAILEDÉchec de la mise à jour de la classe Google Wallet.
404WALLET_NOT_FOUNDwallet introuvable
404WALLET_UPDATE_FAILEDÉchec de la mise à jour du portefeuille
409BARCODE_ALREADY_EXISTSLe code barre existe déjà
409CLIENT_ALREADY_EXISTSLe client existe déjà
409EMAIL_ALREADY_EXISTSL'email existe déjà
409INSUFFICIENT_CREDIT_PARTIALCertains canaux n'ont pas assez de crédits pour notifier tous les clients. Confirmez pour envoyer uniquement sur les canaux disposant de crédits.
409OVERLAPPING_COMMUNICATIONSDes communications en surplomb existent pour les dates sélectionnées
409OVERLAPPING_DATESL'hôtel est déjà réservé pour les dates sélectionnées
409PACK_HAS_ASSIGNED_MANAGERSImpossible de supprimer le pack : des managers y sont encore assignés
409PASSBUILDER_IDENTITY_INCOMPLETEL'identité PassBuilder est incomplète ou contradictoire. Réparez le portefeuille avant de continuer.
409PASSBUILDER_IDENTITY_PROVISIONINGLa création de l'identité PassBuilder est déjà en cours. Réessayez dans un instant.
409PUSH_NOTIFICATION_SCHEDULE_CONFLICTUne notification est déjà programmée à cette date et heure. Veuillez choisir un autre horaire (à au moins {seconds} secondes d'intervalle).
409STORE_CARD_ALREADY_EXISTSCe wallet a déjà une carte de fidélité
409TEMPLATE_ALREADY_EXISTSLe modèle existe déjà
415UNSUPPORTED_MEDIA_TYPEType de contenu non pris en charge. Utilisez application/json ou multipart/form-data.
500BATCH_OPERATION_FAILEDÉchec de l'opération par lots: {error}
500GOOGLE_AUTH_INIT_FAILEDÉchec de l'initialisation du client Google Auth.
500UNKNOWN_ERRORErreur inconnue!
500WALLET_CLIENT_INIT_FAILEDÉchec de l'initialisation du client Google Wallet.
500WALLET_UPDATE_ERRORUne erreur est survenue lors de la mise à jour du portefeuille
502SMS_CREDIT_LOOKUP_FAILEDÉchec de la récupération des crédits SMS
502SMS_LOGIN_FAILEDÉchec de l'authentification auprès du fournisseur SMS
502SMS_SEND_FAILEDÉchec de l'envoi du SMS via le fournisseur
503PASS_BUILDER_ERRORService externe en erreur

Les nouveautés de l'API, une fois par mois

Nouveaux endpoints, changements à prévoir, guides et cas d'usage. Pas de spam, désinscription en un clic.

Signaler un problème technique

Une erreur de l’API, un pass qui ne se met pas à jour, un e-mail qui n’arrive pas ? Décrivez le problème : notre équipe technique vous répond.

Pour une réponse rapide, indiquez :

  • La méthode et l’endpoint (ex. POST /clients)
  • Le code d’erreur renvoyé (errorCode) et le corps envoyé
  • La date et l’heure de l’appel
  • Les identifiants concernés (client, modèle, pass)

N’y mettez jamais de jeton d’API ni de mot de passe.

Assistant IA

Beta

Chargement…

Réponses générées par IA (Claude) : vérifiez les points importants.

Connectez-vous pour utiliser l'assistant