user_id doit être l’identifiant du profil AshTech Pay propriétaire de cette clé. Un identifiant manquant renvoie 400 user_id_required; un identifiant qui ne correspond pas à la clé renvoie 403 user_id_mismatch.
Les conversions immédiates et la création de règles de conversion automatique exigent aussi l’en-tête X-Transaction-PIN avec le PIN à 4 chiffres configuré dans le tableau de bord. Sans PIN configuré, l’API renvoie 428 TRANSACTION_PIN_SETUP_REQUIRED; sans l’en-tête, elle renvoie 428 TRANSACTION_PIN_REQUIRED. Un PIN incorrect renvoie 403 TRANSACTION_PIN_INVALID; après cinq erreurs, les opérations sont bloquées pendant 30 minutes. Gardez le PIN sur votre serveur et ne l’intégrez jamais dans le navigateur.
Remplacez VOTRE_PIN_4_CHIFFRES dans les exemples par le PIN déjà configuré dans votre tableau de bord.
Quel wallet utiliser ?
- Wallet source : utilisez
wallet_currencydans la réponse deGET /v1/wallets?user_id=.... Cette route liste les wallets et soldes de ce profil, pas tous les wallets possibles par pays. - Pays de destination : chargez les pays actifs et leurs codes avec
GET /v1/countries. Son champcurrencyest une devise ISO normalisée (XAF,XOF, etc.) et n’est pas toujours le code interne exact du wallet.
destination_country_code (par exemple CM ou TG), pas un code de wallet cible. AshTech Pay résout le wallet correspondant au pays et renvoie le code exact dans to_wallet_currency. L’API Direct ne fournit pas de route séparée qui liste les codes internes de wallet pour tous les pays.
Consulter les soldes
wallet_currency est le code exact du wallet utilisé en interne (par exemple XAFG, XOFC ou XOFT); currency est son code ISO regroupé (XAF ou XOF).
Demander une conversion
from_currencydoit être le code exact du wallet à débiter.- Consultez
GET /v1/countriespour les codes pays acceptés. AshTech Pay résoutdestination_country_codevers le wallet exact du pays; ne passez pas un code cible choisi par le client. referenceest obligatoire et sert à rendre les reprises idempotentes. Une même référence avec des paramètres différents renvoie409 reference_conflict.notify_urlest facultative et doit être une URL HTTPS publique. Les soldes insuffisants et les conversions sous le minimum configuré sont rejetés avant débit.
202 signifie que la demande est enregistrée et que le montant source a été débité. Le montant cible est crédité après le traitement asynchrone.
Suivre une conversion
pending, completed ou cancelled. Une conversion annulée après création recrédite le wallet source. La même opération émet conversion.completed ou conversion.failed au webhook lorsqu’un notify_url est configuré.
Conversions automatiques
Une règle convertit automatiquement les fonds reçus dans le wallet source choisi vers le wallet exact associé au pays cible. Une règle active maximum est autorisée par devise source. Créer une règle :initial_conversion_id lorsqu’une demande a été créée; utilisez GET /v1/conversions/:id?user_id=... pour en suivre l’état. Les crédits ultérieurs dans ce wallet déclenchent la même règle.
Lister les règles :

