Chargement de vos clés API…

Erreurs

Format des erreurs et codes principaux retournés par l'API.

Format JSON

Toutes les erreurs retournent un corps JSON normalisé :

{
  "error": "ValidationError",
  "message": "Request validation failed",
  "statusCode": 400,
  "fields": [
    { "field": "order.amount", "message": "Required", "code": "invalid_type" }
  ],
  "requestId": "c65236d2-0f90-424a-88a9-515dc5d320fb"
}

Conservez requestId dans vos logs : c'est ce qu'on vous demandera en cas de support.

Codes HTTP

CodeLabelSignification
200OKRequête réussie.
201CreatedRessource créée avec succès.
204No ContentSuppression réussie, pas de corps.
400Bad RequestParamètres invalides ou manquants.
401UnauthorizedClé API manquante ou invalide.
403ForbiddenPermission insuffisante ou IP non autorisée.
404Not FoundRessource introuvable.
409ConflictConflit (idempotence, doublon, état incompatible).
422Unprocessable EntityValidation métier échouée.
429Too Many RequestsRate limit dépassé. Réessayez après le délai indiqué dans `Retry-After`.
500Internal Server ErrorErreur côté Mobupay. Si persistant, contactez le support.
502Bad GatewayErreur du processeur en aval (banque, réseau carte, etc.).

Codes d'erreur métier

Le champ error du JSON contient un code machine que vous pouvez switcher dans votre code. Codes les plus fréquents :

CodeSignification
VALIDATION_ERRORChamp requis manquant ou mal formaté. Voir `fields` dans la réponse.
AUTHENTICATION_ERRORClé API invalide ou révoquée.
PERMISSION_ERRORLa clé n'a pas la permission requise pour cette opération.
NOT_FOUNDL'identifiant demandé n'existe pas dans votre compte.
IDEMPOTENCY_KEY_CONFLICTMême clé d'idempotence avec un body différent. Réessayez avec une nouvelle clé.
INVALID_PAYMENT_STATUSOpération impossible dans l'état actuel du paiement (ex : capturer un paiement déjà capturé).
REFUND_AMOUNT_EXCEEDS_PAYMENTLe montant à rembourser dépasse le montant initial.
FREE_PAYMENT_UNSUPPORTED`order.amount` doit être strictement positif : un paiement gratuit ne peut pas être créé. Un net carte nul n'est autorisé qu'en mode plateforme entièrement couvert par une remise (`order.discount = order.amount`).
PLATFORM_CONFIG_REQUIRED_NET0Capture d'un paiement à net 0 (entièrement financé par la plateforme) sans `order.platformConfig` : le split est requis à la capture pour ventiler aux sous-marchands.
PARTIAL_REFUND_UNSUPPORTED_NET0Remboursement partiel d'un paiement à net 0 : seul le remboursement total est possible (le net carte est nul). Omettez `amountCents`.
CAPTURE_AMOUNT_MISMATCHLe montant capturé doit être égal à `order.amount − order.discount` (la carte n'est débitée que du net ; la plateforme abonde le complément).
ENTRY_AMOUNT_MISMATCHLe montant d'une entrée `platformConfig` ne correspond pas à la somme de ses articles TTC remisés (`Σ(unitPrice×qty − discount) − discount`).
PLATFORM_SELF_NO_COMMISSIONUne entrée `platformConfig` marquée `isPlatform` ne peut porter aucune commission (`platformCommission` / `itemPlatformCommission` / `orderPlatformCommission`) : on ne se prélève pas de commission sur soi-même.
PLATFORM_SELF_REQUIRES_SUBMERCHANTUne entrée `isPlatform` requiert au moins une autre entrée sous-marchand. Pour une commande de la plateforme pour elle-même seule, utilisez le mode e-commerce (sans `platformConfig`).
CAPTURE_AMOUNT_BELOW_AUTHORIZEDÀ la capture, `order.amount` (brut) doit égaler le montant autorisé. Une réduction du montant débité n'est permise que via un `order.discount` explicite ; une sous-capture « sèche » est refusée (elle masquerait une intégration incomplète).
RATE_LIMITEDTrop de requêtes. Voir header `Retry-After`.
REFUND_PROCESSOR_FAILEDErreur côté processeur carte. Réessayez plus tard ou contactez le support.

Bonnes pratiques

  • Switcher sur statusCode + error (jamais sur le texte de message qui peut évoluer).
  • Retry uniquement sur 429 (avec backoff) et 502/503/504 (transient).
  • Logger requestId systématiquement.
  • Pour les 4xx : corriger côté client avant de retry, sinon vous bouclez à perte.