FlexApp Docs

Erreurs

Toute réponse non-2xx partage la même enveloppe. code est stable entre versions — testez-le côté client plutôt que le message (texte, susceptible de changer).

JSON
{ "code": "invalid_amount", "message": "Montant invalide." }

Authentification#

CodeHTTPExplication
missing_api_credentials401En-têtes X-Api-Key ou X-Api-Secret absents.
invalid_api_key401Clé inconnue, révoquée, ou secret incorrect (même réponse — on ne révèle pas lequel).
insufficient_scope403La clé n'a pas le scope requis (ex. disbursements.write).
missing_token / invalid_token401Session marchand (dashboard) absente ou invalide.
live_not_enabled403Mode live demandé sur un compte non encore validé (KYB).

Validation (création)#

CodeHTTPExplication
invalid_body400JSON malformé.
invalid_amount400amount absent ou ≤ 0.
currency_mismatch400Devise ≠ celle du compte de reversement.
invalid_redirect_url400redirect_url n'est pas une URL http(s).
invalid_webhook_url400webhook_url n'est pas une URL http(s).
invalid_customer_tag400customer_tag fourni mais introuvable.
invalid_environment400environmenttest/live.
invalid_interval400intervalweekly/monthly/yearly.
invalid_max_cycles400max_cycles ≤ 0.
invalid_recurrence400recurrenceonce/weekly/monthly.
invalid_start_at400start_at n'est pas une date ISO‑8601.
invalid_items400Liste vide, > 500 lignes, ou une ligne sans recipient/amount.
missing_recipient400Bénéficiaire absent (versement).
title_required400Titre du produit facturier absent.
lookup_url_required400lookup_url requis pour un produit lookup.
lookup_url_must_be_https400lookup_url doit être en HTTPS.
invalid_amount_mode400amount_modefixed/user/lookup.
invalid_schema_json400Schéma produit invalide ou non conforme.
invalid_slug400Slug vide ou invalide.

Charges#

CodeHTTPExplication
charge_not_found404Token inconnu ou n'appartenant pas au marchand.
wrong_customer403Charge ciblée : le payeur n'est pas le client désigné.
charge_expired409La charge a dépassé son échéance.
charge_not_payable409Charge déjà réglée, expirée ou annulée.
charge_not_cancelable409Charge déjà payée / expirée / annulée.
charge_not_refundable409Charge non payée, déjà remboursée, ou déjà reversée.
charge_not_paid409Renvoi de webhook demandé sur une charge non payée.
no_webhook_url422Renvoi de webhook : aucune URL configurée.
webhook_delivery_failed502Votre endpoint n'a pas répondu 2xx au renvoi.

Abonnements#

CodeHTTPExplication
mandate_not_found404Mandat inconnu ou n'appartenant pas au marchand.
mandate_not_authorizable409Le mandat n'est plus en attente d'autorisation.
mandate_not_cancelable409Mandat déjà annulé / terminé.
mandate_not_pausable409Le mandat n'est pas actif.
mandate_not_resumable409Le mandat n'est pas en pause.

Facturiers#

CodeHTTPExplication
no_biller404Aucune fiche facturier liée à ce marchand.
name_and_category_required400Nom affiché ou catégorie manquant.
reason_required400Motif requis pour un rejet en back-office.
no_pending_logo409Aucun logo en attente de validation.
file_required400Aucun logo n'a été envoyé.
invalid_type400Logo non PNG/JPEG.
invalid_size400Logo vide ou > 512 Ko.
too_small400Logo < 128×128 px.
slug_taken409Slug de facturier ou de produit déjà utilisé.
store_unavailable503Stockage objet indisponible.
store_failed502Échec d'écriture dans le stockage objet.
product_not_found404Produit facturier introuvable.
not_a_lookup_product400Le produit visé n'utilise pas le mode lookup.
lookup_unavailable502Le backend du facturier n'a pas répondu correctement.
quote_not_found404Quote introuvable.
quote_used409Quote déjà consommé.
quote_expired409Quote expiré.
biller_not_found404Facturier introuvable dans l'annuaire.
biller_not_payable409Facturier ou produit non payable dans l'état courant.

Versements#

CodeHTTPExplication
insufficient_balanceSolde de reversement insuffisant (au niveau de la ligne, state=failed).
recipient_not_foundLe @tag bénéficiaire n'existe pas (ligne failed).
recipient_wallet_missingLe bénéficiaire n'a pas de portefeuille dans cette devise.
payout_failedÉchec du versement (raison générique).
schedule_not_found404Versement programmé inconnu.
schedule_not_cancelable409Déjà annulé / terminé.
Versements en masse

Dans un lot, chaque ligne réussit ou échoue indépendamment : un versement porte son propre state (paid/failed) et son failure_code. Le lot lui-même renvoie toujours 201 avec le détail par ligne.

Paiement (fallback web / app)#

CodeHTTPExplication
tag_not_found404Identifiant @tag introuvable.
invalid_otp401Code SMS incorrect ou expiré.
invalid_pin401Code PIN incorrect.
pin_locked429Trop de tentatives — compte temporairement verrouillé.
otp_unavailable429Envoi d'OTP indisponible (anti-spam).
challenge_required403Vérification supplémentaire requise (anti-fraude).
tx_blocked403Paiement bloqué pour raison de sécurité.
edd_required403Vérification renforcée du compte requise.
kyc_cap_exceeded403Plafond du niveau de vérification atteint.
payment_failed422Paiement impossible (solde, etc.).

Serveur#

CodeHTTPExplication
internal500Erreur interne — réessayez ; si ça persiste, contactez le support.