Envoyer un payout
De la vérification du solde à la confirmation du transfert, pour un payout ou un lot de jusqu'à 50.
- 1
Vérifiez le solde
GET /v1/balances renvoie un solde par token ; la clé de chaque token est le balance_key renvoyé par GET /v1/summary/tokens. Quand available contient la clé, utilisez cette valeur : le reste est bloqué par des dépôts pas encore définitifs. min_withdrawal et max_withdrawal par token viennent de GET /v1/summary/tokens.
bashcurl "https://bridge.bifrostcrypto.com/v1/balances" \ -H "X-Bifrost-Invoke: YOUR_API_KEY" - 2
Créez le payout
POST /v1/payout avec un objet ou une liste de jusqu'à 50. Donnez à chaque payout son propre reference_id et envoyez un Idempotency-Key par requête. feetakenfromamount 1 retire les frais du montant ; 0 les ajoute au débit.
bashcurl -X POST "https://bridge.bifrostcrypto.com/v1/payout" \ -H "X-Bifrost-Invoke: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: 6f1c2d3e-0000-4000-8000-000000000001" \ -d '{"reference_id":"withdraw_2001","wallet":"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0","crypto_currency":"USDT","network":"Ethereum","process_by":"crypto_amount","crypto_amount":"100","feetakenfromamount":0,"webhook_url":"https://your-site.com/webhook"}' - 3
Lisez le résultat de chaque élément
200 signifie que tous les éléments ont été créés, 207 une partie, 400 aucun. results contient une entrée par élément, dans l'ordre d'envoi, avec son index. Conservez l'internal_reference de chaque payout créé.
- 4
Recevez le webhook
payment_processed (data.status success, avec le hash de la transaction dans data.transactions) quand le transfert est fait, ou payment_failed quand il ne peut pas aboutir. Vérifiez la signature et dédoublonnez sur data.internal_reference avec event.
- 5
Rapprochez
GET /v1/check-payout/{internal_reference} renvoie le payout à tout moment. GET /v1/statements liste WITHDRAWAL pour le débit, et RATE et FEE pour les frais.
Que faire en cas d'échec
Deux choses vous empêchent de payer deux fois : l'Idempotency-Key de la requête et le reference_id de chaque payout.
| Situation | Que faire |
|---|---|
| Timeout ou pas de réponse | Renvoyez le même corps avec le même Idempotency-Key dans les 24 heures : vous recevez la réponse d'origine et rien n'est retraité. |
| 409 idempotency_key_in_progress | La première requête est encore en cours. Attendez et réessayez avec la même clé. |
| 207 | Corrigez et renvoyez seulement les éléments refusés, avec un nouvel Idempotency-Key. Ceux qui ont été créés le restent. |
| 500 avec summary.not_processed | Renvoyez les éléments non traités. Un reference_id déjà utilisé est refusé avec duplicate_payment_reference, jamais payé deux fois. |
| duplicate_payment_reference | Le payout existe déjà. Utilisez l'internal_reference et l'original_status du résultat. |
| 429 | Attendez le nombre de secondes indiqué par Retry-After. |
Les payouts créés dans le panneau ne sont pas renvoyés par l'API.