Pay

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": { } }
}
HTTPCuándo
400Validación / falta Idempotency-Key
401API key ausente o inválida
404CVU / transfer inexistente
409Conflicto (p. ej. alias)
422Negocio (saldo insuficiente, etc.)
CampoSignificado
bankStatusHTTP status echo del banco (si el rechazo viene de la red)
bankBodyProblemDetails ASP.NET / body Coinag (a menudo errors)
errorCoelsaEn el recurso transfer: mensaje legible del banco (clampado)
estadoCodigoCódigo Coelsa (p. ej. 00 OK, 41 ERROR) o INTERNAL en P2P
estadoDescripcionDescripción asociada al código

Firmas y retries de notificación: guía de webhooks.