Aller au contenu principal

Échange de devises

Un échange convertit une partie du solde d'un de vos wallets vers un autre de vos wallets, dans une autre devise. Il se fait en deux appels : vous demandez d'abord un devis, qui bloque le taux pendant 60 secondes, puis vous exécutez ce devis.

Les deux wallets doivent déjà exister (voir Wallets). Les montants sont exprimés en centièmes de la devise, quelle que soit la devise, sous forme de chaîne de caractères.

remarque

Nécessite la fonctionnalité wallet.multi_currency dans votre offre.

Taux de change​

GET/api/v1/exchange-rates?base=USD

Renvoie les taux du marché international pour les devises disponibles, sans marge. Cet endpoint est public.

{
"base": "USD",
"data": [
{ "currency_code": "CDF", "rate": "2304.931274", "source": "market", "updated_at": "2026-09-13T08:00:00.000+00:00" }
],
"attribution": { "name": "ExchangeRate-API", "url": "https://www.exchangerate-api.com" }
}

source vaut market pour un taux du marché international, ou manual lorsque Reemite a fixé le taux de cette devise.

Demander un devis​

POST/api/v1/business/swaps/quote
ParamètreTypeRequisDescription
from_currencystringOuiDevise du wallet débité, par exemple USD
to_currencystringOuiDevise du wallet crédité, par exemple CDF
amountstringOuiMontant à convertir, en centièmes de from_currency
curl -X POST https://api.trustsend.africa/api/v1/business/swaps/quote \
-H "Authorization: Bearer $REEMITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "from_currency": "USD", "to_currency": "CDF", "amount": "1000" }'

Réponse 201

{
"data": {
"quote_id": "0b8d3f3e-5d0a-4c55-9d67-3f1f8f0b2a41",
"from_currency": "USD",
"to_currency": "CDF",
"amount_in": "1000",
"amount_out": "2281881",
"fee": "23050",
"fee_currency": "CDF",
"rate": "2281.88196126",
"mid_rate": "2304.931274",
"margin_bps": 100,
"expires_at": "2026-09-13T10:01:00.000+00:00"
}
}
ChampDescription
amount_outMontant crédité sur le wallet to_currency
rateTaux appliqué, marge incluse
mid_rateTaux du marché, sans marge
feeÉcart entre la conversion au taux du marché et amount_out, dans fee_currency
margin_bpsMarge appliquée, en points de base (100 = 1 %)
expires_atAu-delà de cette date, le devis ne peut plus être exécuté

Pour une devise sans décimales, comme XAF, amount_out est arrondi à l'unité inférieure : c'est toujours un multiple de 100.

Exécuter un échange​

POST/api/v1/business/swaps
ParamètreTypeRequisDescription
quote_idstringOuiIdentifiant renvoyé par le devis
idempotency_keystringOuiUUID unique par échange : rejouer la requête avec la même clé renvoie le même résultat
curl -X POST https://api.trustsend.africa/api/v1/business/swaps \
-H "Authorization: Bearer $REEMITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "quote_id": "0b8d3f3e-5d0a-4c55-9d67-3f1f8f0b2a41", "idempotency_key": "6f1c1f0e-2b1f-4a53-9a0e-8f3c0a1d9b77" }'

Réponse 201

{
"data": {
"transaction_id": "TXN-8KD2M4QP",
"transaction_uuid": "c1b7e2f4-5a6d-4e8f-9a0b-1c2d3e4f5a6b",
"status": "completed",
"quote_id": "0b8d3f3e-5d0a-4c55-9d67-3f1f8f0b2a41",
"from_currency": "USD",
"to_currency": "CDF",
"amount_in": "1000",
"amount_out": "2281881",
"fee": "23050",
"fee_currency": "CDF",
"rate": "2281.88196126",
"mid_rate": "2304.931274",
"margin_bps": 100,
"created_at": "2026-09-13T10:00:20.000+00:00"
}
}

L'échange est immédiat : les deux soldes sont mis à jour dans la même opération, qui apparaît ensuite dans vos transactions avec le type fx_swap.

Erreurs​

StatutCodeCause
402Solde insuffisant sur le wallet débité
404Wallet introuvable pour l'une des devises, ou devis inconnu
409QUOTE_USEDLe devis a déjà été exécuté
410QUOTE_EXPIREDLe devis a expiré : demandez-en un nouveau
422Devises identiques, devise non disponible ou montant trop faible
503RATE_UNAVAILABLEAucun taux utilisable pour l'une des devises pour le moment