# Enviar un payout

> Versión en Markdown de la documentación pública de la API v1 de Bifrost Crypto, para agentes de IA y generadores de código. El mismo contenido de las páginas HTML, generado de la misma fuente, sin navegación ni estilos.
>
> Versión HTML: https://bifrostcrypto.com/es/docs/guide-payout
> Archivos relacionados: [ai.md](https://bifrostcrypto.com/ai/es.md) · [Postman](https://bifrostcrypto.com/postman-collection.json) · [OpenAPI](https://bifrostcrypto.com/openapi.json) · [llms.txt](https://bifrostcrypto.com/llms.txt)
> Otros idiomas: [Português](https://bifrostcrypto.com/ai/pt-BR/guide-payout.md) · [English](https://bifrostcrypto.com/ai/en/guide-payout.md) · [Français](https://bifrostcrypto.com/ai/fr/guide-payout.md)
> API v1 · último cambio de contrato el 2026-10-10

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.

```bash
curl "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.

```bash
curl -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.
