Enviar un payout
Desde comprobar el saldo hasta confirmar la transferencia, para un payout o un lote de hasta 50.
- 1
Compruebe el saldo
GET /v1/balances devuelve un saldo por token; la clave de cada token es el balance_key que devuelve GET /v1/summary/tokens. Cuando available tenga la clave, use ese valor: el resto está retenido por depósitos aún no finales. min_withdrawal y max_withdrawal por token vienen de GET /v1/summary/tokens.
bashcurl "https://bridge.bifrostcrypto.com/v1/balances" \ -H "X-Bifrost-Invoke: YOUR_API_KEY" - 2
Cree el payout
POST /v1/payout con un objeto o una lista de hasta 50. Dé a cada payout su propio reference_id y envíe un Idempotency-Key por solicitud. feetakenfromamount 1 descuenta las comisiones del monto; 0 las suma al 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
Lea el resultado de cada ítem
200 significa que se crearon todos los ítems, 207 que algunos, 400 que ninguno. results tiene una entrada por ítem, en el orden enviado, con su index. Guarde el internal_reference de cada payout creado.
- 4
Reciba el webhook
payment_processed (data.status success, con el hash de la transacción en data.transactions) cuando la transferencia se realiza, o payment_failed cuando no puede completarse. Verifique la firma y elimine duplicados por data.internal_reference junto con event.
- 5
Concilie
GET /v1/check-payout/{internal_reference} devuelve el payout en cualquier momento. GET /v1/statements lista WITHDRAWAL para el débito y RATE y FEE para los cargos.
Qué hacer cuando algo falla
Dos cosas impiden que pague dos veces: el Idempotency-Key de la solicitud y el reference_id de cada payout.
| Situación | Qué hacer |
|---|---|
| Timeout o sin respuesta | Reenvíe el mismo cuerpo con el mismo Idempotency-Key dentro de 24 horas: recibe la respuesta original y no se procesa nada de nuevo. |
| 409 idempotency_key_in_progress | La primera solicitud sigue en curso. Espere y reintente con la misma clave. |
| 207 | Corrija y reenvíe solo los ítems rechazados, con un Idempotency-Key nuevo. Los creados siguen creados. |
| 500 con summary.not_processed | Reenvíe los ítems que no se procesaron. Un reference_id ya usado se rechaza con duplicate_payment_reference, nunca se paga dos veces. |
| duplicate_payment_reference | El payout ya existe. Use el internal_reference y el original_status del resultado. |
| 429 | Espere los segundos indicados en Retry-After. |
Los payouts creados en el panel no los devuelve la API.