Enviar um payout
Da conferência do saldo à confirmação da transferência, para um payout ou um lote de até 50.
- 1
Confira o saldo
GET /v1/balances devolve um saldo por token; a chave de cada token é o balance_key devolvido por GET /v1/summary/tokens. Quando available tiver a chave, use esse valor: o restante está retido por depósitos ainda não finais. min_withdrawal e max_withdrawal por token vêm de GET /v1/summary/tokens.
bashcurl "https://bridge.bifrostcrypto.com/v1/balances" \ -H "X-Bifrost-Invoke: YOUR_API_KEY" - 2
Crie o payout
POST /v1/payout com um objeto ou uma lista de até 50. Dê a cada payout um reference_id próprio e envie um Idempotency-Key por requisição. feetakenfromamount 1 desconta as taxas do valor; 0 soma as taxas ao débito.
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
Leia o resultado de cada item
200 significa que todos os itens foram criados, 207 que parte foi, 400 que nenhum foi. results tem uma entrada por item, na ordem enviada, com o index. Guarde o internal_reference de cada payout criado.
- 4
Receba o webhook
payment_processed (data.status success, com o hash da transação em data.transactions) quando a transferência é feita, ou payment_failed quando não pode ser concluída. Verifique a assinatura e elimine duplicatas por data.internal_reference junto com event.
- 5
Concilie
GET /v1/check-payout/{internal_reference} devolve o payout a qualquer momento. GET /v1/statements lista WITHDRAWAL para o débito e RATE e FEE para as cobranças.
O que fazer quando algo falha
Duas coisas impedem que você pague duas vezes: o Idempotency-Key da requisição e o reference_id de cada payout.
| Situação | O que fazer |
|---|---|
| Timeout ou sem resposta | Reenvie o mesmo corpo com o mesmo Idempotency-Key em até 24 horas: você recebe a resposta original e nada é processado de novo. |
| 409 idempotency_key_in_progress | A primeira requisição ainda está em execução. Aguarde e tente com a mesma chave. |
| 207 | Corrija e reenvie só os itens recusados, com um novo Idempotency-Key. Os criados continuam criados. |
| 500 com summary.not_processed | Reenvie os itens que não foram processados. Um reference_id já usado é recusado com duplicate_payment_reference, nunca pago duas vezes. |
| duplicate_payment_reference | O payout já existe. Use o internal_reference e o original_status do resultado. |
| 429 | Aguarde os segundos indicados em Retry-After. |
Payouts criados no painel não são devolvidos pela API.