Developers/Guías
Transferencias
Cash-out inmediato en ARS vía Coinag/Coelsa, con hold en ledger y webhooks por cada cambio de estado.
Crear una transferencia
curl -X POST https://api.dev.gallo-pay.com/v1/transfers \
-H "x-api-key: gpk_test_…" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"cvuDebito": "0000208200000000000147",
"cbuCredito": "0000208200000000000291",
"cuitCredito": "20370994049",
"concepto": "VAR",
"importe": 1500.5,
"descripcion": "Pago servicio"
}'Respuesta típica (pending / sent):
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"idTrxCliente": "1024",
"idTrxCoelsa": null,
"cvuDebito": "0000208200000000000147",
"cbuCredito": "0000208200000000000291",
"cuitCredito": "20370994049",
"concepto": "VAR",
"importe": "1500.50",
"status": "pending",
"errorCoelsa": null,
"estadoCodigo": null,
"estadoDescripcion": null,
"isInternal": false
}Consultar estado
curl https://api.dev.gallo-pay.com/v1/transfers/7c9e6679-7425-40de-944b-e07fc1f90ae7 \ -H "x-api-key: gpk_test_…" # listado del tenant curl "https://api.dev.gallo-pay.com/v1/transfers?limit=50&offset=0" \ -H "x-api-key: gpk_test_…"
Alternativa wallet: GET /wallet/v1/Operaciones.
Estados y timeline
pending— aceptada; hold en ledger.sent— enviada a Coelsa.confirmed— liquidada; débito definitivo.failed— rechazada; release del hold.
Webhooks: transfer.created → transfer.sent → transfer.confirmed o transfer.failed. Una reversa posterior emite transfer.reversed.
P2P interno
Si cbuCredito es un CVU activo del mismo tenant, no llamamos al banco: liquidamos en un solo TX (isInternal=true, status=confirmed, estadoCodigo=INTERNAL).
Errores HTTP y Coinag
Envelope de error de la API:
{
"statusCode": 422,
"message": "Saldo insuficiente",
"timestamp": "2026-08-07T15:00:00.000Z",
"bankStatus": 400,
"bankBody": { "title": "…", "errors": { } }
}| HTTP | Cuándo |
|---|---|
| 400 | Validación / falta Idempotency-Key |
| 401 | API key ausente o inválida |
| 404 | CVU / transfer inexistente |
| 409 | Conflicto (p. ej. alias) |
| 422 | Negocio (saldo insuficiente, etc.) |
| Campo | Significado |
|---|---|
| bankStatus | HTTP status echo del banco (si el rechazo viene de la red) |
| bankBody | ProblemDetails ASP.NET / body Coinag (a menudo errors) |
| errorCoelsa | En el recurso transfer: mensaje legible del banco (clampado) |
| estadoCodigo | Código Coelsa (p. ej. 00 OK, 41 ERROR) o INTERNAL en P2P |
| estadoDescripcion | Descripción asociada al código |
Firmas y retries de notificación: guía de webhooks.