RAILS
Sandbox

Referencia · versión 2026-10-15

API de clientes empresa de Grip Rails (fase 1)

Cuentas de pago en pesos, CVU, transferencias por COELSA y eventos para clientes empresa de FCM Payment Solutions S.A.S.

Descargar openapi.yaml openapi.json

Esta referencia se genera desde el contrato OpenAPI 3.1.0. El contrato es la fuente de verdad.

API para que las empresas clientes de FCM Payment Solutions S.A.S. (proveedor de servicios de pago que ofrece cuentas de pago, inscripto en el BCRA; PSP 214 en COELSA) operen cuentas de pago en pesos: ver saldos, usar sus CVU, validar contrapartes, ordenar transferencias por COELSA y enterarse de los créditos entrantes.

Es el contrato de la fase 1, multi-cliente desde el día uno: cada entidad tiene sus credenciales, sus claves de firma, su URL de webhook, sus cuentas en el libro, sus CVU, sus topes y su comisión. Este contrato es estable: la implementación puede cambiar y la integración del cliente no.

Lo que esta API no hace

  • No opera activos digitales. No hay criptoactivos, stablecoins, direcciones de blockchain, conversiones ni cotizaciones. El TO de PSP del BCRA (punto 4.6) prohíbe a FCM Payment Solutions S.A.S. realizarlas y facilitarlas. Si un cliente opera cripto, esa pata la ejecuta otra persona jurídica regulada y FCM Payment Solutions S.A.S. sólo mueve pesos contra instrucciones.
  • No opera moneda extranjera ni giros al exterior. La única moneda es ARS y los destinos son CBU, CVU o alias del sistema argentino.
  • No crea CVU ni cuentas en fase 1. Las da de alta Grip Rails a pedido de la entidad (llegan como números de cuenta listables). El alta por API es fase 2.

FCM Payment Solutions S.A.S. se limita a ofrecer servicios de pago y no se encuentra autorizada a operar como entidad financiera por el BCRA. Los fondos depositados en cuentas de pago no constituyen depósitos en una entidad financiera, ni cuentan con ninguna de las garantías que tales depósitos puedan gozar de acuerdo con la legislación y reglamentación aplicables en materia de depósitos en entidades financieras.

Autenticación: API key y firma de cada pedido

Todo pedido lleva las dos cosas:

  1. Authorization: Bearer fcm_live_…: la API key de la entidad. Grip Rails la guarda hasheada. Puede haber dos activas para rotar sin corte.
  2. Firma HTTP del pedido (RFC 9421, HTTP Message Signatures) hecha con la clave privada del cliente. Grip Rails guarda sólo la clave pública, registrada en el alta (hasta dos activas por entorno). Algoritmos: ed25519 o ecdsa-p256-sha256.
    • Componentes firmados obligatorios: "@method" y "@target-uri". Si el pedido tiene cuerpo, también "content-type", "content-digest" e "idempotency-key". Si mandás FCM-Version, también "fcm-version". "authorization" no se firma: una firma que la cubre se rechaza con signature_invalid. Así Grip Rails puede volver a verificar la firma de cada instrucción con tu clave pública, sin tu API key, que sólo guarda hasheada.
    • Parámetros obligatorios de la firma: created (segundos Unix; se acepta ±300 s), nonce (16 a 64 caracteres base64url, único por clave durante 10 minutos), keyid (id de tu clave pública, ck_…) y alg.
    • Con cuerpo: Content-Digest: sha-256=:…: (RFC 9530) calculado sobre los bytes exactos que mandás.
HTTP
POST /v1/outgoing_transfers HTTP/1.1
Host: api.fcmpayments.com
Authorization: Bearer fcm_live_3kTq…
Content-Type: application/json
Idempotency-Key: 01JA2B3C4D5E6F7G8H9JKMNPQR
Content-Digest: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
Signature-Input: sig1=("@method" "@target-uri" "content-type" "content-digest" "idempotency-key");created=1760112000;nonce="Vq3n8sZx0bR1yTqLkM2pWg";keyid="ck_01JA2B3C4D5E6F7G8H9JKMNPQS";alg="ed25519"
Signature: sig1=:Kp9…==:

En producción la entidad puede pedir una lista de IP permitidas. mTLS se ofrece como capa adicional en fase 2 para quien lo exija; no reemplaza la firma.

Idempotencia

  • Idempotency-Key es obligatoria en todo POST (16 a 128 caracteres A-Z a-z 0-9 . _ : -; recomendado UUID o ULID). El ámbito es la entidad en ese entorno.
  • Misma clave y mismo pedido: misma respuesta (código y cuerpo), con Idempotent-Replayed: true.
  • Misma clave con otro pedido (huella SHA-256 de método, ruta y cuerpo canonizado según RFC 8785): 409 idempotency_key_reused.
  • Mientras el primer pedido está en curso: 409 idempotency_request_in_progress (reintentable).
  • Las respuestas 5xx no se guardan: reintentá con la misma clave.
  • El registro completo vive 35 días y se consulta con GET /v1/idempotency_keys/{idempotency_key}. La clave de una transferencia queda atada a esa transferencia para siempre: no se puede reusar ni pasados los 35 días, y la transferencia se busca con GET /v1/outgoing_transfers?idempotency_key=….
  • Si la primera respuesta se perdió (por ejemplo, un corte), el reintento devuelve el estado actual de la misma transferencia, que puede estar más avanzado que el original.
  • Una respuesta 202 se guarda y se repite igual que cualquier 2xx. El estado vigente se pide con GET /v1/outgoing_transfers/{id} o llega por webhook.

Versionado

  • El mayor va en la ruta (/v1) y cambia sólo ante un rediseño total.
  • La versión por fecha va en FCM-Version: AAAA-MM-DD. Cada entidad queda fijada a la versión vigente cuando se da de alta y puede probar otra mandando el header. La respuesta devuelve la versión usada.
  • Sin versión nueva entran los cambios aditivos: endpoints nuevos, campos opcionales nuevos en pedidos, campos nuevos en respuestas, valores nuevos en enums de respuesta y tipos de evento nuevos. Tu integración tiene que ignorar campos y tipos de evento desconocidos y tolerar valores de enum nuevos.
  • Lo que rompe sólo sale en una versión nueva. Una versión se mantiene al menos 12 meses después de publicada la siguiente y su retiro se avisa con 6 meses de anticipación (headers Deprecation y Sunset, mail al contacto técnico y changelog). Como máximo hay dos versiones vivas.
  • Los webhooks y los eventos se arman en la versión fijada de la entidad (campo api_version).

Montos, moneda y fechas

  • Montos: enteros en centavos (150000 = $ 1.500,00). Moneda: sólo ARS.
  • Fechas y horas: RFC 3339 en UTC. El día de negocio, los topes diarios y los mensuales usan el calendario de Buenos Aires (America/Argentina/Buenos_Aires).

Paginación

Las listas devuelven del más nuevo al más viejo. limit va de 1 a 100 (25 por defecto); para la página siguiente mandá starting_after con el next_cursor recibido. Los eventos son distintos: orden ascendente por sequence (ver "Eventos y webhooks").

Transferencias salientes: autorizar antes de transferir

Ver POST /v1/outgoing_transfers. Estados y su equivalente ISO 20022 (pacs.002, TransactionStatus):

status Qué significa Reserva en el libro ISO 20022
pending Grip Rails recibió la orden pero todavía no puede confirmar la autorización. Puede haber plata reservada. No reintentes con otra Idempotency-Key. Puede haber una pendiente PDNG
rejected La autorización la rechazó. No salió plata. No hay, o se liberó RJCT
reserved Autorizada; importe más cargos reservados; todavía no se envió a COELSA. Pendiente ACCP
submitted Enviada a COELSA; falta el resultado. Con status_reason: late_settlement_review, reabierta por una acreditación tardía (ver abajo). Pendiente (reabierta: liberada, y el importe ya debitado) ACSP
completed COELSA la acreditó en el destino. Asentada ACCC
failed COELSA la rechazó o venció. Sin cargo. Si COELSA la acredita después, se reabre y se debita el importe, siempre sin comisión (ver abajo). Liberada RJCT

Acreditación tardía. Si COELSA acredita una transferencia que ya te informamos failed (su aviso llegó tarde o se perdió), la plata salió y Grip Rails la reabre: vuelve a submitted con status_reason: late_settlement_review (ISO ACSP; failure y failed_at vuelven a null) y te avisamos con el evento transfer.outgoing.reopened. El importe se debita de tu cuenta de fondos con un asiento compensatorio (sus referencias van en el evento); si los fondos no alcanzan, el faltante lo cubre tu cuenta de garantía y el resto queda como deuda con FCM Payment Solutions S.A.S., según contrato. Grip Rails deshabilita tus transferencias salientes y siguen deshabilitadas, aun después de completed, hasta que Grip Rails las vuelva a habilitar (sólo en el sandbox se rehabilitan solas después del cierre simulado: ver Sandbox). Cuando dos personas de Grip Rails confirman la acreditación, la transferencia pasa a completed (evento transfer.outgoing.completed) sin cargo: Grip Rails no cobra comisión por una transferencia reabierta, porque la reapertura no es culpa tuya (Grip Rails sólo libera una reserva con evidencia). charges lo dice con un cargo fcm_fee de 0 y su motivo, y total_debit_amount es el importe. Es la única forma de salir de failed; no la repitas con otra Idempotency-Key.

Los créditos entrantes tienen un solo estado en fase 1, posted, equivalente a BOOK (camt.054).

Límites de uso

Por entidad: 5 escrituras y 25 lecturas por segundo (ampliables por contrato). Al pasarte: 429 rate_limited con Retry-After.

Más en Errores, Webhooks y firmas y Entornos.

Entidad

La empresa cliente autenticada, sus topes, su uso y sus comisiones.

GET/v1/entity#

Ver la entidad autenticada

Devuelve la entidad dueña de la API key, con sus topes, el uso del día y del mes, y sus comisiones.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 La entidad.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: Entity

  • id EntityId obligatorio
  • object "entity" obligatorio
  • legal_name string obligatorio
    largo máx. 200
  • cuit Cuit | null obligatorio

    CUIT con el que la entidad es titular de sus CVU ante COELSA.

  • status EntityStatus obligatorio

    suspended: puede leer pero no ordenar transferencias.

  • environment string obligatorio
    Valores: live, test
  • api_version string obligatorio

    Versión del contrato fijada para la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • limits Limits obligatorio

    Topes de transferencias salientes de la entidad, fijados por contrato (los aprueba Grip Rails, no se cambian por API). Cuentan el importe sin cargos de las transferencias reserved, submitted y completed. null = sin tope.

  • usage LimitUsage obligatorio
  • fees FeeSchedule obligatorio

    Comisión por movimiento, según contrato. Se cobra como asiento separado en el libro: en una salida se reserva con la transferencia y se libera si falla; en una entrada se descuenta al asentar y nunca supera el importe recibido.

  • created_at string (date-time) obligatorio
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Cuentas

Cuentas de pago en pesos de la entidad (fondos y garantía) con su saldo en el libro.

GET/v1/accounts#

Listar cuentas

Lista las cuentas de la entidad con su saldo y su estado.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Query

  • limit integer

    Cantidad máxima de objetos por página.

    mín. 1 · máx. 100 · por defecto 25
  • starting_after string

    Cursor opaco (next_cursor de la página anterior).

    largo máx. 200

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 Página de cuentas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: AccountList

  • object "list" obligatorio
  • data array de Account obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/accounts/{account_id}#

Ver una cuenta (saldo y estado)

Saldo y estado de una cuenta. El saldo sale del libro en el momento del pedido: posted es lo asentado, held lo reservado por transferencias salientes en curso y available = posted − held.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 La cuenta.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: Account

  • id AccountId obligatorio
  • object "account" obligatorio
  • entity_id EntityId obligatorio
  • type AccountType obligatorio

    funds: cuenta de fondos, la que opera. guarantee: cuenta de garantía (reserva) que el cliente deposita según contrato para cubrir faltantes; se ve pero no se debita por API.

  • name string obligatorio
    largo máx. 80
  • currency Currency obligatorio

    Única moneda de la API.

  • status AccountStatus obligatorio

    frozen: no puede ordenar salidas; las entradas se asientan.

  • balances Balances obligatorio
  • primary_account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA si la transferencia no indica otro.

  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio

Cuenta de fondos con una salida en curso

application/json
{
  "id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
  "object": "account",
  "entity_id": "ent_01JA2B3C4D5E6F7G8H9JKMNPQA",
  "type": "funds",
  "name": "Fondos operativos",
  "currency": "ARS",
  "status": "active",
  "balances": {
    "posted": 2500000,
    "held": 150050,
    "available": 2349950
  },
  "primary_account_number_id": "acn_01JA2B3C4D5E6F7G8H9JKMNPQB",
  "created_at": "2026-10-15T13:00:00Z",
  "updated_at": "2026-10-16T18:22:41Z"
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Números de cuenta

CVU de cada cuenta (N por cuenta). Todos tienen como titular a la entidad.

GET/v1/account_numbers#

Listar números de cuenta (CVU)

Lista los CVU de la entidad. Una cuenta puede tener N CVU (por ejemplo, uno por cada usuario o comercio del cliente, para atribuir cobros); todos tienen como titular a la entidad y lo que entra por cualquiera de ellos se asienta en la misma cuenta. En fase 1 los da de alta Grip Rails.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Query

  • account_id AccountId

    Filtra por cuenta.

  • Filtra por estado.

  • limit integer

    Cantidad máxima de objetos por página.

    mín. 1 · máx. 100 · por defecto 25
  • starting_after string

    Cursor opaco (next_cursor de la página anterior).

    largo máx. 200

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 Página de números de cuenta.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: AccountNumberList

  • object "list" obligatorio
  • data array de AccountNumber obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/account_numbers/{account_number_id}#

Ver un número de cuenta

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 El número de cuenta.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: AccountNumber

  • id AccountNumberId obligatorio
  • object "account_number" obligatorio
  • account_id AccountId obligatorio
  • cvu BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • alias Alias | null obligatorio
  • status AccountNumberStatus obligatorio

    pending: alta en COELSA en curso. inactive: dado de baja o inactivo en COELSA.

  • holder Holder obligatorio

    Titular registrado en COELSA. En fase 1 siempre es la entidad.

    Campos de holder
    • name string obligatorio
      largo máx. 120
    • cuit Cuit obligatorio

      CUIT o CUIL, 11 dígitos sin guiones.

  • is_primary boolean obligatorio
  • external_reference ExternalReference | null obligatorio

    Etiqueta que el cliente pidió para este CVU (por ejemplo, el id de su usuario o comercio). Sin datos personales.

  • created_at string (date-time) obligatorio
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Contrapartes

Validación del titular de un destino contra COELSA antes de pagar.

POST/v1/counterparty_validations#

Validar una contraparte

Consulta en COELSA quién es el titular de un CBU, CVU o alias, si la cuenta está activa y si pasa los controles de cumplimiento de Grip Rails. No mueve plata.

Una validación valid dura 15 minutos (expires_at) y se puede pasar en counterparty_validation_id al crear la transferencia para no consultar de nuevo. Un resultado negativo no es un error HTTP: responde 201 con el result correspondiente. Si COELSA no contesta: 503 rail_unavailable.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: CounterpartyValidationRequest

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_cuit Cuit

    Si viene, el resultado es holder_mismatch cuando COELSA informa otro CUIT.

Validar un alias esperando un CUIT

application/json
{
  "destination": {
    "type": "alias",
    "value": "proveedor.ejemplo"
  },
  "expected_cuit": "27000000006"
}

Respuestas

201 Validación hecha (el resultado puede ser negativo).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: CounterpartyValidation

  • object "counterparty_validation" obligatorio
  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_cuit Cuit | null obligatorio
  • result CounterpartyValidationResult obligatorio

    valid: titular encontrado, cuenta activa y controles en orden. not_found: COELSA no conoce la cuenta o el alias. inactive: la cuenta existe pero no está activa. holder_mismatch: el CUIT no es el esperado. blocked: Grip Rails no puede operar con esa cuenta (control de cumplimiento; sin detalle).

  • display_message string | null obligatorio

    Texto en castellano para mostrar al usuario final cuando el resultado no es valid.

  • counterparty Counterparty | null obligatorio

    Presente si COELSA informó un titular (valid, inactive y holder_mismatch).

  • validated_at string (date-time) obligatorio
  • expires_at string (date-time) obligatorio

    Hasta cuándo se puede usar en una transferencia (15 minutos).

Titular encontrado y activo

application/json
{
  "id": "cval_01JA2B3C4D5E6F7G8H9JKMNPQC",
  "object": "counterparty_validation",
  "destination": {
    "type": "alias",
    "value": "proveedor.ejemplo"
  },
  "expected_cuit": "27000000006",
  "result": "valid",
  "display_message": null,
  "counterparty": {
    "name": "PROVEEDOR EJEMPLO",
    "cuit": "27000000006",
    "account": "0110599520000001234569",
    "account_type": "cbu",
    "bank_code": "011",
    "alias": "proveedor.ejemplo",
    "is_fcm_account": false
  },
  "validated_at": "2026-10-16T18:20:03Z",
  "expires_at": "2026-10-16T18:35:03Z"
}
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Transferencias salientes

Pagos en pesos a CBU, CVU o alias, con autorización previa y reserva en el libro.

POST/v1/outgoing_transfers#

Crear una transferencia saliente

Ordena una transferencia en pesos desde una cuenta de la entidad hacia un CBU, CVU o alias.

Antes de mover un peso, Grip Rails autoriza, en este orden:

  1. Cuenta y entidad activas, cuenta no congelada y transferencias habilitadas.
  2. Tope por operación.
  3. Reserva en el libro (transferencia pendiente) por el importe más los cargos. Sin saldo disponible: insufficient_funds.
  4. Titular del destino según COELSA (o una validación vigente pasada en counterparty_validation_id): existe, está activo, no es la misma cuenta y, si mandaste expected_counterparty_cuit, coincide.
  5. Listas sancionatorias (RePET, ONU, OFAC) sobre el titular del destino.
  6. Topes diario y mensual de la entidad (cuentan las transferencias reserved, submitted y completed).
  7. Reglas antifraude.

Si todo pasa: 201 con la transferencia en reserved y el evento transfer.outgoing.reserved. Grip Rails la envía a COELSA enseguida (submitted) y la cierra con el aviso de COELSA: completed (la plata llegó y la reserva se asienta, con el evento transfer.outgoing.completed) o failed (la reserva se libera, no hay cargo, evento transfer.outgoing.failed). Si COELSA la acredita después de informarla failed, Grip Rails la reabre (submitted con status_reason: late_settlement_review, evento transfer.outgoing.reopened) y la cierra en completed: ver "Acreditación tardía" en la descripción general.

Si Grip Rails no puede confirmar el resultado en el momento: 202 con la transferencia en pending, o en submitted con status_reason: rail_outcome_unknown si un reintento la encuentra ya enviada y sin resultado. La orden existe y está atada a tu Idempotency-Key: no la repitas con otra clave. Una pending termina en reserved (evento transfer.outgoing.reserved) o en failed con failure.code: canceled_by_fcm (evento transfer.outgoing.failed).

Si algo falla: 422 con el motivo en error.code. La transferencia queda guardada en rejected (su id va en error.transfer_id) y la reserva, si llegó a tomarse, se libera. Los pedidos mal formados (400) no crean nada.

COELSA es irreversible: Grip Rails no libera una reserva ya enviada sin evidencia de rechazo. Si el resultado no llega, la transferencia sigue submitted con status_reason: rail_outcome_unknown y la plata sigue reservada hasta resolverlo. Nunca se reenvía con otro identificador.

Si el destino es una cuenta de Grip Rails, la transferencia es interna (rail.name: fcm_book) y se completa en el acto.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: OutgoingTransferCreateRequest

  • account_id AccountId obligatorio
  • account_number_id AccountNumberId

    CVU de la cuenta que figura como origen ante COELSA. Por defecto, el principal de la cuenta.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_counterparty_cuit Cuit

    Recomendado siempre. Si COELSA informa otro CUIT para el titular, se rechaza con destination_holder_mismatch.

  • counterparty_validation_id CounterpartyValidationId

    Validación valid vigente (15 minutos) del mismo destino. Si vence o no coincide, 400 parameter_invalid.

  • concept Concept

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string

    Texto del cliente. Queda en Grip Rails; en fase 1 no viaja a COELSA.

    largo máx. 140
  • external_reference ExternalReference

    Referencia del cliente para conciliar. No tiene que ser única y no viaja a COELSA.

  • metadata Metadata

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

Pago a un CBU con control de titular

application/json
{
  "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
  "amount": 150000,
  "currency": "ARS",
  "destination": {
    "type": "cbu",
    "value": "0110599520000001234569"
  },
  "expected_counterparty_cuit": "27000000006",
  "concept": "FAC",
  "description": "Factura 0003-00001234",
  "external_reference": "pedido-7781",
  "metadata": {
    "agent_id": "agt_42"
  }
}

Respuestas

201 Autorizada y reservada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: OutgoingTransfer

  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

Recién autorizada

application/json
{
  "id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV",
  "object": "outgoing_transfer",
  "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
  "account_number_id": "acn_01JA2B3C4D5E6F7G8H9JKMNPQB",
  "amount": 150000,
  "currency": "ARS",
  "charges": [
    {
      "type": "fee",
      "code": "fcm_fee",
      "amount": 50,
      "description": "Comisión por transferencia saliente"
    }
  ],
  "total_debit_amount": 150050,
  "destination": {
    "type": "cbu",
    "value": "0110599520000001234569"
  },
  "counterparty": {
    "name": "PROVEEDOR EJEMPLO",
    "cuit": "27000000006",
    "account": "0110599520000001234569",
    "account_type": "cbu",
    "bank_code": "011",
    "alias": null,
    "is_fcm_account": false
  },
  "concept": "FAC",
  "description": "Factura 0003-00001234",
  "external_reference": "pedido-7781",
  "metadata": {
    "agent_id": "agt_42"
  },
  "status": "reserved",
  "status_reason": null,
  "iso20022": {
    "status": "ACCP",
    "reason": null
  },
  "authorization": {
    "decision": "approved",
    "decided_at": "2026-10-16T18:22:41Z",
    "rationale": {
      "code": "approved",
      "message": "Pasó todos los controles."
    },
    "checks": [
      {
        "name": "account",
        "result": "passed"
      },
      {
        "name": "limits",
        "result": "passed"
      },
      {
        "name": "funds",
        "result": "passed"
      },
      {
        "name": "counterparty",
        "result": "passed"
      },
      {
        "name": "compliance",
        "result": "passed"
      }
    ]
  },
  "reservation": {
    "amount": 150050,
    "state": "held",
    "placed_at": "2026-10-16T18:22:41Z",
    "resolved_at": null,
    "ledger_references": [
      "7f3a9c2e4b1d8f6a0c5e3b9d7a1f4c2e",
      "1b8e4d2c9a7f3e5d0b6c8a2f4e1d9c7b"
    ]
  },
  "rail": null,
  "failure": null,
  "idempotency_key": "01JA2B3C4D5E6F7G8H9JKMNPQR",
  "created_at": "2026-10-16T18:22:40Z",
  "updated_at": "2026-10-16T18:22:41Z",
  "completed_at": null,
  "failed_at": null
}
202 Recibida; el resultado todavía no se puede confirmar. No reintentes con otra Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: OutgoingTransfer

  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
422 La autorización rechazó la transferencia. Quedó guardada en rejected y no salió plata.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: Error

sin_saldo

application/json
{
  "error": {
    "type": "transfer_declined",
    "code": "insufficient_funds",
    "message": "La cuenta acc_01JA2B3C4D5E6F7G8H9JKMNPQR tiene 120000 centavos disponibles y la transferencia necesita 150050.",
    "display_message": "No hay saldo suficiente para esta transferencia.",
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#insufficient_funds",
    "transfer_id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV"
  }
}

titular

application/json
{
  "error": {
    "type": "transfer_declined",
    "code": "destination_holder_mismatch",
    "message": "COELSA informa otro CUIT para el titular del destino.",
    "display_message": "La cuenta de destino no es de quien esperabas.",
    "param": "expected_counterparty_cuit",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#destination_holder_mismatch",
    "transfer_id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV"
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/outgoing_transfers#

Listar transferencias salientes

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Query

  • account_id AccountId

    Filtra por cuenta.

  • Filtra por estado.

  • idempotency_key IdempotencyKeyValue

    Busca la transferencia creada con esta Idempotency-Key (sirve también pasados los 35 días).

  • external_reference ExternalReference

    Filtra por tu referencia.

  • created_after string (date-time)

    Sólo objetos creados en este instante o después (RFC 3339).

  • created_before string (date-time)

    Sólo objetos creados antes de este instante (RFC 3339).

  • limit integer

    Cantidad máxima de objetos por página.

    mín. 1 · máx. 100 · por defecto 25
  • starting_after string

    Cursor opaco (next_cursor de la página anterior).

    largo máx. 200

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 Página de transferencias salientes.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: OutgoingTransferList

  • object "list" obligatorio
  • data array de OutgoingTransfer obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/outgoing_transfers/{outgoing_transfer_id}#

Ver una transferencia saliente

Estado vigente de la transferencia. Es lo que hay que consultar al recibir un webhook.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 La transferencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: OutgoingTransfer

  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

Acreditada por COELSA

application/json
{
  "id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV",
  "object": "outgoing_transfer",
  "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
  "account_number_id": "acn_01JA2B3C4D5E6F7G8H9JKMNPQB",
  "amount": 150000,
  "currency": "ARS",
  "charges": [
    {
      "type": "fee",
      "code": "fcm_fee",
      "amount": 50,
      "description": "Comisión por transferencia saliente"
    }
  ],
  "total_debit_amount": 150050,
  "destination": {
    "type": "cbu",
    "value": "0110599520000001234569"
  },
  "counterparty": {
    "name": "PROVEEDOR EJEMPLO",
    "cuit": "27000000006",
    "account": "0110599520000001234569",
    "account_type": "cbu",
    "bank_code": "011",
    "alias": null,
    "is_fcm_account": false
  },
  "concept": "FAC",
  "description": "Factura 0003-00001234",
  "external_reference": "pedido-7781",
  "metadata": {
    "agent_id": "agt_42"
  },
  "status": "completed",
  "status_reason": null,
  "iso20022": {
    "status": "ACCC",
    "reason": null
  },
  "authorization": {
    "decision": "approved",
    "decided_at": "2026-10-16T18:22:41Z",
    "rationale": {
      "code": "approved",
      "message": "Pasó todos los controles."
    },
    "checks": [
      {
        "name": "account",
        "result": "passed"
      },
      {
        "name": "limits",
        "result": "passed"
      },
      {
        "name": "funds",
        "result": "passed"
      },
      {
        "name": "counterparty",
        "result": "passed"
      },
      {
        "name": "compliance",
        "result": "passed"
      }
    ]
  },
  "reservation": {
    "amount": 150050,
    "state": "posted",
    "placed_at": "2026-10-16T18:22:41Z",
    "resolved_at": "2026-10-16T18:22:44Z",
    "ledger_references": [
      "7f3a9c2e4b1d8f6a0c5e3b9d7a1f4c2e",
      "1b8e4d2c9a7f3e5d0b6c8a2f4e1d9c7b"
    ]
  },
  "rail": {
    "name": "coelsa",
    "operation_id": "86VRPQ2GX0O4XQ4Y9GLY0X",
    "origin_reference": "9000000000017",
    "status_code": "7500",
    "submitted_at": "2026-10-16T18:22:42Z",
    "finalized_at": "2026-10-16T18:22:44Z"
  },
  "failure": null,
  "idempotency_key": "01JA2B3C4D5E6F7G8H9JKMNPQR",
  "created_at": "2026-10-16T18:22:40Z",
  "updated_at": "2026-10-16T18:22:44Z",
  "completed_at": "2026-10-16T18:22:44Z",
  "failed_at": null
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Transferencias entrantes

Créditos recibidos en los CVU de la entidad, asentados con liquidación real de COELSA.

GET/v1/incoming_transfers#

Listar créditos entrantes

Créditos recibidos en los CVU de la entidad. Cada uno nace de un aviso de COELSA verificado (crédito ya liquidado en la cuenta recaudadora de FCM Payment Solutions S.A.S.) y se asienta en el libro con su comisión como asiento aparte.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Query

  • account_id AccountId

    Filtra por cuenta.

  • account_number_id AccountNumberId

    Filtra por el CVU por el que entró.

  • created_after string (date-time)

    Sólo objetos creados en este instante o después (RFC 3339).

  • created_before string (date-time)

    Sólo objetos creados antes de este instante (RFC 3339).

  • limit integer

    Cantidad máxima de objetos por página.

    mín. 1 · máx. 100 · por defecto 25
  • starting_after string

    Cursor opaco (next_cursor de la página anterior).

    largo máx. 200

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 Página de créditos entrantes.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: IncomingTransferList

  • object "list" obligatorio
  • data array de IncomingTransfer obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/incoming_transfers/{incoming_transfer_id}#

Ver un crédito entrante

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 El crédito entrante.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: IncomingTransfer

  • id IncomingTransferId obligatorio

    Determinístico a partir del id de COELSA del crédito.

  • object "incoming_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId obligatorio
  • cvu BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio
  • net_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • payer Payer obligatorio

    Quien pagó, según el aviso de COELSA. Cualquier dato puede faltar si COELSA no lo informa.

  • concept string | null obligatorio

    Concepto BCRA informado por COELSA, si viene.

    patrón ^[A-Z]{3}$
  • status string obligatorio

    En fase 1 siempre posted.

    Valores: posted
  • iso20022 object obligatorio
    Campos de iso20022
    • entry_status string obligatorio

      camt.054 EntryStatus.

      Valores: BOOK
  • rail object obligatorio
    Campos de rail
    • name string obligatorio
      Valores: coelsa, fcm_book
    • operation_id string obligatorio

      Id de COELSA del crédito, o el otr_… de origen si name es fcm_book (interna entre cuentas de Grip Rails). Es la clave de idempotencia del asiento.

      largo máx. 64
    • business_date string (date) | null obligatorio

      Fecha de negocio (compensación) informada por COELSA.

  • ledger_references array de LedgerReference obligatorio
  • posted_at string (date-time) obligatorio
  • created_at string (date-time) obligatorio

Crédito por un CVU de referencia

application/json
{
  "id": "itr_01JA2B3C4D5E6F7G8H9JKMNPQW",
  "object": "incoming_transfer",
  "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
  "account_number_id": "acn_01JA2B3C4D5E6F7G8H9JKMNPQD",
  "cvu": "0000214300000009999994",
  "amount": 1500000,
  "currency": "ARS",
  "charges": [
    {
      "type": "fee",
      "code": "fcm_fee",
      "amount": 50,
      "description": "Comisión por crédito entrante"
    }
  ],
  "net_amount": 1499950,
  "payer": {
    "name": "PAGADOR EJEMPLO",
    "cuit": "20000000001",
    "account": "0000999100000000000420",
    "account_type": "cvu",
    "bank_code": null
  },
  "concept": "VAR",
  "status": "posted",
  "iso20022": {
    "entry_status": "BOOK"
  },
  "rail": {
    "name": "coelsa",
    "operation_id": "WY7ZEPN6YGGPE6LV2Q0M5X",
    "business_date": "2026-10-16"
  },
  "ledger_references": [
    "3c9e1a7b5d2f8e4c6a0b9d3f7e1c5a2b",
    "9d4b2f8a6c1e7d3b5f0a8c2e6d4b1f9a",
    "5e2c8a4f1b7d9e3c6a0f2b8d4e6c1a7f"
  ],
  "posted_at": "2026-10-16T21:20:15Z",
  "created_at": "2026-10-16T21:20:15Z"
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Eventos

Registro ordenado de lo que pasó, para conciliar y para los webhooks.

GET/v1/events#

Listar eventos por cursor

Eventos de la entidad en orden ascendente de sequence, desde el siguiente a after_sequence. Sin filtro de tipo, sequence es contiguo: guardá el último que procesaste y pedí desde ahí. Con el filtro type la secuencia tiene saltos por diseño (es sólo para consultar). Es la fuente para conciliar; los webhooks son un aviso.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Query

  • after_sequence integer (int64)

    Devuelve los eventos con sequence mayor a este valor. Por defecto 0 (desde el primero disponible).

    mín. 0 · por defecto 0
  • Filtra por tipo de evento.

  • limit integer

    Cantidad máxima de eventos (1 a 100).

    mín. 1 · máx. 100 · por defecto 100

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 Página de eventos.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: EventList

  • object "list" obligatorio
  • data array de Event obligatorio
  • has_more boolean obligatorio
  • next_after_sequence integer (int64) | null obligatorio

    Valor para el próximo after_sequence (la sequence del último evento devuelto).

Dos eventos

application/json
{
  "object": "list",
  "data": [
    {
      "id": "evt_01JA2B3C4D5E6F7G8H9JKMNPQX",
      "object": "event",
      "type": "transfer.outgoing.reserved",
      "sequence": 41,
      "entity_id": "ent_01JA2B3C4D5E6F7G8H9JKMNPQA",
      "api_version": "2026-10-15",
      "created_at": "2026-10-16T18:22:41Z",
      "data": {
        "object": "outgoing_transfer",
        "id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV",
        "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
        "ledger_references": [
          "7f3a9c2e4b1d8f6a0c5e3b9d7a1f4c2e",
          "1b8e4d2c9a7f3e5d0b6c8a2f4e1d9c7b"
        ]
      }
    },
    {
      "id": "evt_01JA2B3C4D5E6F7G8H9JKMNPQY",
      "object": "event",
      "type": "transfer.outgoing.completed",
      "sequence": 42,
      "entity_id": "ent_01JA2B3C4D5E6F7G8H9JKMNPQA",
      "api_version": "2026-10-15",
      "created_at": "2026-10-16T18:22:44Z",
      "data": {
        "object": "outgoing_transfer",
        "id": "otr_01JA2B3C4D5E6F7G8H9JKMNPQV",
        "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
        "ledger_references": [
          "2a6d9f3c8e1b5a7d4c0e9b2f6a8d3c1e",
          "8c3f7a1e5d9b2c6f0a4e8d1b7c5f3a9e"
        ]
      }
    }
  ],
  "has_more": false,
  "next_after_sequence": 42
}
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/events/{event_id}#

Ver un evento

Sirve para confirmar por otra vía un webhook recibido.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 El evento.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Idempotencia

Consulta de una Idempotency-Key usada.

GET/v1/idempotency_keys/{idempotency_key}#

Consultar una Idempotency-Key

Dice si la clave está en curso o terminada, con qué pedido se usó (huella), qué respondimos y qué objeto creó. Disponible 35 días desde el primer uso. Las claves de transferencias siguen ligadas a su transferencia después de ese plazo (ver GET /v1/outgoing_transfers?idempotency_key=).

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 El registro de la clave.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • FCM-Version string

    Versión del contrato con la que se respondió.

Esquema: IdempotencyRecord

  • key IdempotencyKeyValue obligatorio
  • object "idempotency_key" obligatorio
  • status string obligatorio
    Valores: in_progress, completed
  • method string obligatorio
    Valores: POST
  • path string obligatorio
    largo máx. 200
  • request_fingerprint string obligatorio

    SHA-256 de método, ruta y cuerpo canonizado (RFC 8785).

    patrón ^[0-9a-f]{64}$
  • response_status integer | null obligatorio
    mín. 200 · máx. 499
  • resource object | null obligatorio

    Objeto creado o afectado, si lo hubo.

    Variante object
    • object string obligatorio
    • id string obligatorio
  • created_at string (date-time) obligatorio
  • expires_at string (date-time) obligatorio
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

Claves de Grip Rails

Claves públicas con las que Grip Rails firma los webhooks.

GET/.well-known/jwks.json#

Claves públicas de Grip Rails para verificar webhooks

JWKS (RFC 7517) con las claves públicas vigentes con las que Grip Rails firma los webhooks. No requiere autenticación. Las claves privadas viven en KMS y no salen de ahí.

Sin autenticación.

Respuestas

200 Conjunto de claves.
Encabezados
  • Cache-Control string

    Se puede cachear 5 minutos.

Esquema: Jwks

Una clave P-256 vigente

application/json
{
  "keys": [
    {
      "kty": "EC",
      "crv": "P-256",
      "x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
      "y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
      "kid": "fcm-whk-2026-10",
      "alg": "ES256",
      "use": "sig"
    }
  ]
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

Sandbox

Simuladores. Sólo existen en el sandbox.

POST/v1/simulations/incoming_transfers#

Simular un crédito entrante

Arma un aviso de COELSA sintético hacia un CVU de la entidad y lo hace pasar por el mismo camino que uno real: asiento en el libro del sandbox, comisión, evento transfer.incoming.posted y webhook. Sólo sandbox.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: SimulateIncomingTransferRequest

  • account_number_id AccountNumberId obligatorio
  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • payer object

    Datos del pagador simulado. Si falta, se usa uno sintético.

    Campos de payer
    • name string
      largo máx. 120
    • cuit Cuit

      CUIT o CUIL, 11 dígitos sin guiones.

    • account BankKey

      CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • concept Concept

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

Crédito de $ 15.000

application/json
{
  "account_number_id": "acn_01JA2B3C4D5E6F7G8H9JKMNPQD",
  "amount": 1500000
}

Respuestas

201 Crédito simulado y asentado.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: IncomingTransfer

  • id IncomingTransferId obligatorio

    Determinístico a partir del id de COELSA del crédito.

  • object "incoming_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId obligatorio
  • cvu BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio
  • net_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • payer Payer obligatorio

    Quien pagó, según el aviso de COELSA. Cualquier dato puede faltar si COELSA no lo informa.

  • concept string | null obligatorio

    Concepto BCRA informado por COELSA, si viene.

    patrón ^[A-Z]{3}$
  • status string obligatorio

    En fase 1 siempre posted.

    Valores: posted
  • iso20022 object obligatorio
    Campos de iso20022
    • entry_status string obligatorio

      camt.054 EntryStatus.

      Valores: BOOK
  • rail object obligatorio
    Campos de rail
    • name string obligatorio
      Valores: coelsa, fcm_book
    • operation_id string obligatorio

      Id de COELSA del crédito, o el otr_… de origen si name es fcm_book (interna entre cuentas de Grip Rails). Es la clave de idempotencia del asiento.

      largo máx. 64
    • business_date string (date) | null obligatorio

      Fecha de negocio (compensación) informada por COELSA.

  • ledger_references array de LedgerReference obligatorio
  • posted_at string (date-time) obligatorio
  • created_at string (date-time) obligatorio
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

POST/v1/simulations/outgoing_transfers/{outgoing_transfer_id}/rail_result#

Simular el resultado de COELSA para una transferencia

Inyecta el aviso de resultado de COELSA (equivalente a AvisoOperacionFinalizada) para una transferencia en submitted: completed asienta la reserva y failed la libera. Sobre una transferencia failed que salió por COELSA, completed simula una acreditación tardía: el aviso llega después de liberada la reserva y Grip Rails la reabre por el mismo camino que en producción (débito compensatorio del importe, salidas deshabilitadas, submitted con status_reason: late_settlement_review y el evento transfer.outgoing.reopened). Sólo sandbox. Cualquier otro caso responde 400 parameter_invalid: otro estado, una failed con outcome: failed, una failed que nunca salió a COELSA o una reabierta (la cierra Grip Rails: ver POST /v1/simulations/outgoing_transfers/{id}/late_settlement_review).

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: SimulateRailResultRequest

  • outcome string obligatorio
    Valores: completed, failed
  • coelsa_code string

    Código de COELSA a simular. Por defecto 7500 si completed y 7699 si failed.

    patrón ^\d{2,4}$

COELSA rechaza por cuenta inexistente

application/json
{
  "outcome": "failed",
  "coelsa_code": "7502"
}

Sobre una transferencia failed, COELSA la acredita después (acreditación tardía)

application/json
{
  "outcome": "completed"
}

Respuestas

200 Resultado aplicado. Devuelve la transferencia actualizada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: OutgoingTransfer

  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

POST/v1/simulations/outgoing_transfers/{outgoing_transfer_id}/late_settlement_review#

Simular que dos personas de Grip Rails confirman una acreditación tardía

Para una transferencia reabierta por una acreditación tardía (submitted con status_reason: late_settlement_review), simula que dos personas de Grip Rails confirman la acreditación: en el sandbox son dos operadores sintéticos distintos que proponen y aprueban la conciliación por el mismo camino que en producción. La respuesta 202 trae la transferencia todavía reabierta; unos segundos después Grip Rails la cierra en completed, sin cargo (charges con un fcm_fee de 0 y su motivo), con el evento transfer.outgoing.completed, y unos segundos más tarde vuelve a habilitar tus transferencias salientes (GET /v1/entity vuelve a active; no si Grip Rails bloqueó tu entidad en el medio): esa rehabilitación automática existe sólo en el sandbox; en producción siguen deshabilitadas hasta que Grip Rails las rehabilite. Sólo sandbox. Una transferencia que no está reabierta responde 400 parameter_invalid.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: SimulateLateSettlementReviewRequest

  • outcome string obligatorio

    La única salida de la revisión de una acreditación tardía: dos personas de Grip Rails confirman que la plata salió y la transferencia se cierra en completed, sin cargo.

    Valores: completed

Dos personas de Grip Rails confirman la acreditación tardía

application/json
{
  "outcome": "completed"
}

Respuestas

202 Confirmada por dos personas sintéticas. Devuelve la transferencia todavía reabierta; Grip Rails la cierra en completed en segundos.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: OutgoingTransfer

  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

503 COELSA, el libro o las transferencias no están disponibles por ahora. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

GET/v1/simulations/clock#

Ver el reloj de prueba de la entidad

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048

Respuestas

200 El reloj.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: SandboxClock

  • object "sandbox_clock" obligatorio
  • entity_id EntityId obligatorio
  • now string (date-time) obligatorio

    Hora de la entidad en el sandbox.

  • offset_seconds integer (int64) obligatorio

    Cuánto está adelantada respecto de la hora real.

    mín. 0
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

POST/v1/simulations/clock/advance#

Adelantar el reloj de prueba

Mueve hacia adelante la hora de la entidad en el sandbox (nunca hacia atrás). Afecta el día y el mes de los topes, los reintentos de webhooks pendientes y los vencimientos simulados. Todas las fechas que devuelve el sandbox para esa entidad usan este reloj.

Autenticación: API key (Authorization: Bearer) y firma del pedido (Signature, Signature-Input).

Encabezados

  • FCM-Version string

    Versión por fecha del contrato. Si falta, se usa la versión fijada de la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • Idempotency-Key IdempotencyKeyValue obligatorio

    Clave única por intención del cliente. Obligatoria en todo POST. Ver "Idempotencia".

  • Signature-Input string obligatorio

    Parámetros de la firma RFC 9421 (componentes cubiertos, created, nonce, keyid, alg).

    largo máx. 2048
  • Content-Digest string obligatorio

    SHA-256 de los bytes exactos del cuerpo, según RFC 9530.

    patrón ^sha-256=:[A-Za-z0-9+/]{43}=:$

Cuerpo del pedido obligatorio

Esquema: AdvanceClockRequest

  • advance_seconds integer obligatorio

    Segundos a adelantar (hasta 31 días por pedido).

    mín. 1 · máx. 2678400

Adelantar un día

application/json
{
  "advance_seconds": 86400
}

Respuestas

200 Reloj adelantado.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Idempotent-Replayed boolean

    true si es la respuesta guardada para esa Idempotency-Key.

Esquema: SandboxClock

  • object "sandbox_clock" obligatorio
  • entity_id EntityId obligatorio
  • now string (date-time) obligatorio

    Hora de la entidad en el sandbox.

  • offset_seconds integer (int64) obligatorio

    Cuánto está adelantada respecto de la hora real.

    mín. 0
400 Pedido mal formado o parámetro inválido. No se creó nada.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

parametro

application/json
{
  "error": {
    "type": "invalid_request_error",
    "code": "amount_invalid",
    "message": "amount tiene que ser un entero positivo en centavos.",
    "display_message": null,
    "param": "amount",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#amount_invalid",
    "transfer_id": null
  }
}
401 Falta la API key o la firma, o no son válidas.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

firma

application/json
{
  "error": {
    "type": "authentication_error",
    "code": "signature_expired",
    "message": "El parámetro created de la firma está fuera de la ventana de ±300 segundos.",
    "display_message": null,
    "param": null,
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": true,
    "doc_url": "https://docs.fcmpayments.com/errores#signature_expired",
    "transfer_id": null
  }
}
403 La credencial es válida pero no puede hacer esto (IP, entorno o entidad suspendida).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

404 No existe, o es de otra entidad (Grip Rails no distingue los dos casos).
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

409 Conflicto de idempotencia.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

reusada

application/json
{
  "error": {
    "type": "idempotency_error",
    "code": "idempotency_key_reused",
    "message": "La Idempotency-Key 01JA2B3C4D5E6F7G8H9JKMNPQR ya se usó con otro pedido (POST /v1/outgoing_transfers, huella distinta).",
    "display_message": null,
    "param": "Idempotency-Key",
    "request_id": "req_01JA2B3C4D5E6F7G8H9JKMNPQT",
    "retryable": false,
    "doc_url": "https://docs.fcmpayments.com/errores#idempotency_key_reused",
    "transfer_id": null
  }
}
429 Pasaste el límite de pedidos por segundo.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

  • Retry-After integer

    Segundos a esperar antes de reintentar.

Esquema: Error

500 Error de Grip Rails. Reintentá con la misma Idempotency-Key.
Encabezados
  • FCM-Request-Id RequestId

    Id del pedido en Grip Rails. Citalo en cualquier consulta a soporte.

Esquema: Error

Webhooks

Lo que Grip Rails envía a tu URL. Cómo verificarlos: Webhooks y firmas.

POSTtransfer.incoming.posted#

Entró plata a una cuenta de la entidad

Se asentó un crédito entrante. Pedí GET /v1/incoming_transfers/{data.id} para el detalle.

Sin autenticación.

Encabezados

  • FCM-Signature string obligatorio

    JWS compacto (JWT) firmado por Grip Rails. Ver "Eventos y webhooks" para los claims y los pasos de verificación.

    patrón ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$
  • FCM-Event-Id EventId obligatorio

    Id del evento (igual a id del cuerpo). Clave para deduplicar.

  • FCM-Event-Type EventType obligatorio

    Tipo del evento (igual a type del cuerpo).

  • FCM-Delivery-Id string obligatorio

    Id de este intento de entrega (igual al claim jti).

    patrón ^whd_[0-9A-HJKMNP-TV-Z]{26}$
  • FCM-Delivery-Attempt integer obligatorio

    Número de intento (1 a 25).

    mín. 1 · máx. 25

Cuerpo del pedido obligatorio

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

credito

application/json
{
  "id": "evt_01JA2B3C4D5E6F7G8H9JKMNPQZ",
  "object": "event",
  "type": "transfer.incoming.posted",
  "sequence": 43,
  "entity_id": "ent_01JA2B3C4D5E6F7G8H9JKMNPQA",
  "api_version": "2026-10-15",
  "created_at": "2026-10-16T21:20:15Z",
  "data": {
    "object": "incoming_transfer",
    "id": "itr_01JA2B3C4D5E6F7G8H9JKMNPQW",
    "account_id": "acc_01JA2B3C4D5E6F7G8H9JKMNPQR",
    "ledger_references": [
      "3c9e1a7b5d2f8e4c6a0b9d3f7e1c5a2b",
      "9d4b2f8a6c1e7d3b5f0a8c2e6d4b1f9a",
      "5e2c8a4f1b7d9e3c6a0f2b8d4e6c1a7f"
    ]
  }
}

Respuestas

2XX Recibido. Respondé en 10 s como máximo y procesá en segundo plano.
default Cualquier otra respuesta, o ninguna en 10 s, dispara un reintento según la política.
POSTtransfer.outgoing.reserved#

Una transferencia saliente quedó autorizada y reservada

La autorización aprobó la transferencia y el importe más los cargos quedaron reservados en el libro.

Sin autenticación.

Encabezados

  • FCM-Signature string obligatorio

    JWS compacto (JWT) firmado por Grip Rails. Ver "Eventos y webhooks" para los claims y los pasos de verificación.

    patrón ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$
  • FCM-Event-Id EventId obligatorio

    Id del evento (igual a id del cuerpo). Clave para deduplicar.

  • FCM-Event-Type EventType obligatorio

    Tipo del evento (igual a type del cuerpo).

  • FCM-Delivery-Id string obligatorio

    Id de este intento de entrega (igual al claim jti).

    patrón ^whd_[0-9A-HJKMNP-TV-Z]{26}$
  • FCM-Delivery-Attempt integer obligatorio

    Número de intento (1 a 25).

    mín. 1 · máx. 25

Cuerpo del pedido obligatorio

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

Respuestas

2XX Recibido.
default Reintento según la política.
POSTtransfer.outgoing.completed#

Una transferencia saliente se acreditó

COELSA confirmó la acreditación en el destino y la reserva se asentó. Es irreversible. Una transferencia reabierta por una acreditación tardía llega acá cuando Grip Rails la cierra, sin cargo: su único débito es el asiento compensatorio (sus referencias van en data.ledger_references).

Sin autenticación.

Encabezados

  • FCM-Signature string obligatorio

    JWS compacto (JWT) firmado por Grip Rails. Ver "Eventos y webhooks" para los claims y los pasos de verificación.

    patrón ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$
  • FCM-Event-Id EventId obligatorio

    Id del evento (igual a id del cuerpo). Clave para deduplicar.

  • FCM-Event-Type EventType obligatorio

    Tipo del evento (igual a type del cuerpo).

  • FCM-Delivery-Id string obligatorio

    Id de este intento de entrega (igual al claim jti).

    patrón ^whd_[0-9A-HJKMNP-TV-Z]{26}$
  • FCM-Delivery-Attempt integer obligatorio

    Número de intento (1 a 25).

    mín. 1 · máx. 25

Cuerpo del pedido obligatorio

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

Respuestas

2XX Recibido.
default Reintento según la política.
POSTtransfer.outgoing.failed#

Una transferencia saliente falló

COELSA la rechazó o venció, o Grip Rails la canceló antes de enviarla. La reserva se liberó y no hubo cargo. El motivo está en failure del objeto. Si COELSA la acredita después, llega transfer.outgoing.reopened.

Sin autenticación.

Encabezados

  • FCM-Signature string obligatorio

    JWS compacto (JWT) firmado por Grip Rails. Ver "Eventos y webhooks" para los claims y los pasos de verificación.

    patrón ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$
  • FCM-Event-Id EventId obligatorio

    Id del evento (igual a id del cuerpo). Clave para deduplicar.

  • FCM-Event-Type EventType obligatorio

    Tipo del evento (igual a type del cuerpo).

  • FCM-Delivery-Id string obligatorio

    Id de este intento de entrega (igual al claim jti).

    patrón ^whd_[0-9A-HJKMNP-TV-Z]{26}$
  • FCM-Delivery-Attempt integer obligatorio

    Número de intento (1 a 25).

    mín. 1 · máx. 25

Cuerpo del pedido obligatorio

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

Respuestas

2XX Recibido.
default Reintento según la política.
POSTtransfer.outgoing.reopened#

Una transferencia saliente fallida se reabrió

COELSA acreditó una transferencia que ya te habíamos informado failed (acreditación tardía): la plata salió. La transferencia vuelve a submitted con status_reason: late_settlement_review, el importe se debitó con un asiento compensatorio (sus referencias van en data.ledger_references) y Grip Rails la cierra en completed (evento transfer.outgoing.completed) cuando dos personas confirman la acreditación. Pedí GET /v1/outgoing_transfers/{data.id} para el estado vigente.

Sin autenticación.

Encabezados

  • FCM-Signature string obligatorio

    JWS compacto (JWT) firmado por Grip Rails. Ver "Eventos y webhooks" para los claims y los pasos de verificación.

    patrón ^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$
  • FCM-Event-Id EventId obligatorio

    Id del evento (igual a id del cuerpo). Clave para deduplicar.

  • FCM-Event-Type EventType obligatorio

    Tipo del evento (igual a type del cuerpo).

  • FCM-Delivery-Id string obligatorio

    Id de este intento de entrega (igual al claim jti).

    patrón ^whd_[0-9A-HJKMNP-TV-Z]{26}$
  • FCM-Delivery-Attempt integer obligatorio

    Número de intento (1 a 25).

    mín. 1 · máx. 25

Cuerpo del pedido obligatorio

Esquema: Event

  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

Respuestas

2XX Recibido.
default Reintento según la política.

Esquemas

Todos los objetos del contrato. Los enlaces de tipo en la referencia llevan acá.

EntityId string
patrón ^ent_[0-9A-HJKMNP-TV-Z]{26}$
AccountId string
patrón ^acc_[0-9A-HJKMNP-TV-Z]{26}$
AccountNumberId string
patrón ^acn_[0-9A-HJKMNP-TV-Z]{26}$
OutgoingTransferId string

Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

patrón ^otr_[0-9A-HJKMNP-TV-Z]{26}$
IncomingTransferId string

Determinístico a partir del id de COELSA del crédito.

patrón ^itr_[0-9A-HJKMNP-TV-Z]{26}$
CounterpartyValidationId string
patrón ^cval_[0-9A-HJKMNP-TV-Z]{26}$
EventId string
patrón ^evt_[0-9A-HJKMNP-TV-Z]{26}$
RequestId string
patrón ^req_[0-9A-HJKMNP-TV-Z]{26}$
IdempotencyKeyValue string
patrón ^[A-Za-z0-9._:-]{16,128}$
Amount integer (int64)

Importe en centavos de peso. 150000 = $ 1.500,00.

mín. 1 · máx. 9007199254740991
AmountOrZero integer (int64)

Importe en centavos de peso, puede ser cero.

mín. 0 · máx. 9007199254740991
Currency string

Única moneda de la API.

Valores: ARS
Cuit string

CUIT o CUIL, 11 dígitos sin guiones.

patrón ^\d{11}$
BankKey string

CBU o CVU de 22 dígitos con dígitos verificadores válidos.

patrón ^\d{22}$
Alias string

Alias del sistema de COELSA.

patrón ^[A-Za-z0-9.-]{6,20}$
LedgerReference string

Referencia opaca y estable a un asiento del libro (id de 128 bits, en hexadecimal). Se deriva de identificadores estables (id de COELSA, entidad e Idempotency-Key), así que no cambia si el libro se reconstruye.

patrón ^[0-9a-f]{32}$
ExternalReference string

Referencia del cliente para conciliar. No tiene que ser única y no viaja a COELSA.

patrón ^[A-Za-z0-9._:-]{1,64}$
Metadata object

Hasta 20 pares clave-valor del cliente. No poner datos personales.

Concept string

Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

Valores: VAR, ALQ, CUO, EXP, FAC, HAB, HON, PRE, SEG · por defecto VAR
EntityStatus string

suspended: puede leer pero no ordenar transferencias.

Valores: active, suspended, closed
Entity object
  • id EntityId obligatorio
  • object "entity" obligatorio
  • legal_name string obligatorio
    largo máx. 200
  • cuit Cuit | null obligatorio

    CUIT con el que la entidad es titular de sus CVU ante COELSA.

  • status EntityStatus obligatorio

    suspended: puede leer pero no ordenar transferencias.

  • environment string obligatorio
    Valores: live, test
  • api_version string obligatorio

    Versión del contrato fijada para la entidad.

    patrón ^\d{4}-\d{2}-\d{2}$
  • limits Limits obligatorio

    Topes de transferencias salientes de la entidad, fijados por contrato (los aprueba Grip Rails, no se cambian por API). Cuentan el importe sin cargos de las transferencias reserved, submitted y completed. null = sin tope.

  • usage LimitUsage obligatorio
  • fees FeeSchedule obligatorio

    Comisión por movimiento, según contrato. Se cobra como asiento separado en el libro: en una salida se reserva con la transferencia y se libera si falla; en una entrada se descuenta al asentar y nunca supera el importe recibido.

  • created_at string (date-time) obligatorio
Limits object

Topes de transferencias salientes de la entidad, fijados por contrato (los aprueba Grip Rails, no se cambian por API). Cuentan el importe sin cargos de las transferencias reserved, submitted y completed. null = sin tope.

  • per_transfer_max_amount integer (int64) | null obligatorio
    mín. 1
  • daily_max_amount integer (int64) | null obligatorio
    mín. 1
  • monthly_max_amount integer (int64) | null obligatorio
    mín. 1
LimitUsage object
  • business_date string (date) obligatorio

    Día de Buenos Aires al que corresponde el uso diario.

  • daily_used_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • daily_remaining_amount integer (int64) | null obligatorio

    null si no hay tope diario.

    mín. 0
  • month string obligatorio
    patrón ^\d{4}-\d{2}$
  • monthly_used_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • monthly_remaining_amount integer (int64) | null obligatorio

    null si no hay tope mensual.

    mín. 0
FeeRule object
  • fixed_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • rate_bps integer obligatorio

    Porcentaje en puntos básicos sobre el importe (100 = 1 %). La comisión es fijo + porcentaje, redondeado hacia abajo al centavo.

    mín. 0 · máx. 10000
FeeSchedule object

Comisión por movimiento, según contrato. Se cobra como asiento separado en el libro: en una salida se reserva con la transferencia y se libera si falla; en una entrada se descuenta al asentar y nunca supera el importe recibido.

AccountType string

funds: cuenta de fondos, la que opera. guarantee: cuenta de garantía (reserva) que el cliente deposita según contrato para cubrir faltantes; se ve pero no se debita por API.

Valores: funds, guarantee
AccountStatus string

frozen: no puede ordenar salidas; las entradas se asientan.

Valores: active, frozen, closed
Balances object
  • posted AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • held AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • available AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

Account object
  • id AccountId obligatorio
  • object "account" obligatorio
  • entity_id EntityId obligatorio
  • type AccountType obligatorio

    funds: cuenta de fondos, la que opera. guarantee: cuenta de garantía (reserva) que el cliente deposita según contrato para cubrir faltantes; se ve pero no se debita por API.

  • name string obligatorio
    largo máx. 80
  • currency Currency obligatorio

    Única moneda de la API.

  • status AccountStatus obligatorio

    frozen: no puede ordenar salidas; las entradas se asientan.

  • balances Balances obligatorio
  • primary_account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA si la transferencia no indica otro.

  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
AccountList object
  • object "list" obligatorio
  • data array de Account obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
AccountNumberStatus string

pending: alta en COELSA en curso. inactive: dado de baja o inactivo en COELSA.

Valores: active, inactive, pending
Holder object
  • name string obligatorio
    largo máx. 120
  • cuit Cuit obligatorio

    CUIT o CUIL, 11 dígitos sin guiones.

AccountNumber object
  • id AccountNumberId obligatorio
  • object "account_number" obligatorio
  • account_id AccountId obligatorio
  • cvu BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • alias Alias | null obligatorio
  • status AccountNumberStatus obligatorio

    pending: alta en COELSA en curso. inactive: dado de baja o inactivo en COELSA.

  • holder Holder obligatorio

    Titular registrado en COELSA. En fase 1 siempre es la entidad.

    Campos de holder
    • name string obligatorio
      largo máx. 120
    • cuit Cuit obligatorio

      CUIT o CUIL, 11 dígitos sin guiones.

  • is_primary boolean obligatorio
  • external_reference ExternalReference | null obligatorio

    Etiqueta que el cliente pidió para este CVU (por ejemplo, el id de su usuario o comercio). Sin datos personales.

  • created_at string (date-time) obligatorio
AccountNumberList object
  • object "list" obligatorio
  • data array de AccountNumber obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
Destination DestinationCbu | DestinationCvu | DestinationAlias

Destino de una transferencia o de una validación.

Una de: DestinationCbu, DestinationCvu, DestinationAlias

DestinationCbu object
  • type "cbu" obligatorio
  • value BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

DestinationCvu object
  • type "cvu" obligatorio
  • value BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

DestinationAlias object
  • type "alias" obligatorio
  • value Alias obligatorio

    Alias del sistema de COELSA.

Counterparty object

Titular y cuenta del destino según COELSA, tal como se verificaron al autorizar.

  • name string obligatorio
    largo máx. 120
  • cuit Cuit obligatorio

    CUIT o CUIL, 11 dígitos sin guiones.

  • account BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • account_type string obligatorio
    Valores: cbu, cvu
  • bank_code string | null obligatorio

    Código de la entidad financiera del CBU, si COELSA lo informa.

    patrón ^\d{3}$
  • alias Alias | null obligatorio
  • is_fcm_account boolean obligatorio

    true si el destino es una cuenta de Grip Rails (la transferencia es interna).

CounterpartyValidationRequest object
  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_cuit Cuit

    Si viene, el resultado es holder_mismatch cuando COELSA informa otro CUIT.

CounterpartyValidationResult string

valid: titular encontrado, cuenta activa y controles en orden. not_found: COELSA no conoce la cuenta o el alias. inactive: la cuenta existe pero no está activa. holder_mismatch: el CUIT no es el esperado. blocked: Grip Rails no puede operar con esa cuenta (control de cumplimiento; sin detalle).

Valores: valid, not_found, inactive, holder_mismatch, blocked
CounterpartyValidation object
  • object "counterparty_validation" obligatorio
  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_cuit Cuit | null obligatorio
  • result CounterpartyValidationResult obligatorio

    valid: titular encontrado, cuenta activa y controles en orden. not_found: COELSA no conoce la cuenta o el alias. inactive: la cuenta existe pero no está activa. holder_mismatch: el CUIT no es el esperado. blocked: Grip Rails no puede operar con esa cuenta (control de cumplimiento; sin detalle).

  • display_message string | null obligatorio

    Texto en castellano para mostrar al usuario final cuando el resultado no es valid.

  • counterparty Counterparty | null obligatorio

    Presente si COELSA informó un titular (valid, inactive y holder_mismatch).

  • validated_at string (date-time) obligatorio
  • expires_at string (date-time) obligatorio

    Hasta cuándo se puede usar en una transferencia (15 minutos).

OutgoingTransferCreateRequest object
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId

    CVU de la cuenta que figura como origen ante COELSA. Por defecto, el principal de la cuenta.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • expected_counterparty_cuit Cuit

    Recomendado siempre. Si COELSA informa otro CUIT para el titular, se rechaza con destination_holder_mismatch.

  • counterparty_validation_id CounterpartyValidationId

    Validación valid vigente (15 minutos) del mismo destino. Si vence o no coincide, 400 parameter_invalid.

  • concept Concept

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string

    Texto del cliente. Queda en Grip Rails; en fase 1 no viaja a COELSA.

    largo máx. 140
  • external_reference ExternalReference

    Referencia del cliente para conciliar. No tiene que ser única y no viaja a COELSA.

  • metadata Metadata

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

OutgoingTransferStatus string

Ver la tabla de estados en la descripción general.

Valores: pending, rejected, reserved, submitted, completed, failed
OutgoingTransferStatusReason string

Sólo en submitted. awaiting_rail_result: esperando el aviso de COELSA (normal, segundos). rail_outcome_unknown: el resultado no llegó en el plazo esperado; Grip Rails lo está resolviendo con COELSA y la plata sigue reservada. No reintentes con otra Idempotency-Key: podrías pagar dos veces. late_settlement_review: COELSA acreditó la transferencia después de que te la informamos failed (acreditación tardía). La plata salió y el importe se debitó con un asiento compensatorio; Grip Rails la cierra en completed cuando dos personas confirman la acreditación.

Valores: awaiting_rail_result, rail_outcome_unknown, late_settlement_review
ChargeType string
Valores: fee, tax
ChargeCode string

fcm_fee: comisión de Grip Rails. idcb: impuesto a los débitos y créditos retenido por FCM Payment Solutions S.A.S. como agente, si corresponde.

Valores: fcm_fee, idcb
Charge object
  • type ChargeType obligatorio
  • code ChargeCode obligatorio

    fcm_fee: comisión de Grip Rails. idcb: impuesto a los débitos y créditos retenido por FCM Payment Solutions S.A.S. como agente, si corresponde.

  • amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • description string obligatorio
    largo máx. 140
Iso20022OutgoingStatus object
  • status string obligatorio

    pacs.002 TransactionStatus (ExternalPaymentTransactionStatus1Code).

    Valores: PDNG, ACCP, ACSP, ACCC, RJCT
  • reason string | null obligatorio

    ExternalStatusReason1Code cuando status es RJCT (por ejemplo AM04, AC03, AC04, AB05, RR04).

    patrón ^[A-Z0-9]{4}$
AuthorizationCheckName string

account: entidad y cuenta habilitadas. limits: topes. funds: reserva en el libro. counterparty: titular del destino en COELSA. compliance: listas sancionatorias y antifraude (se informa junto, sin detalle).

Valores: account, limits, funds, counterparty, compliance
AuthorizationCheck object
  • name AuthorizationCheckName obligatorio

    account: entidad y cuenta habilitadas. limits: topes. funds: reserva en el libro. counterparty: titular del destino en COELSA. compliance: listas sancionatorias y antifraude (se informa junto, sin detalle).

  • result string obligatorio
    Valores: passed, failed, not_run
Rationale object
  • code string obligatorio

    approved, o el código de error del rechazo (por ejemplo insufficient_funds).

  • message string obligatorio
    largo máx. 300
Authorization object

Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • decision string obligatorio

    approved, declined o pending (la autorización todavía no terminó; decided_at es la hora en que quedó pendiente).

    Valores: approved, declined, pending
  • decided_at string (date-time) obligatorio
  • rationale Rationale obligatorio
  • checks array de AuthorizationCheck obligatorio

    Un resultado por control. not_run si no llegó a correr porque uno anterior falló.

Reservation object

Reserva en el libro (transferencias pendientes) por el importe más los cargos.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • state string obligatorio

    held: reservada. posted: asentada (la plata salió). voided: liberada. Una transferencia reabierta por una acreditación tardía sigue voided (la reserva se liberó al fallar y el importe se debitó con un asiento compensatorio); cuando Grip Rails la cierra en completed, sin cargo, queda posted por el importe con las referencias del asiento compensatorio.

    Valores: held, posted, voided
  • placed_at string (date-time) obligatorio
  • resolved_at string (date-time) | null obligatorio
  • ledger_references array de LedgerReference obligatorio
Rail object
  • name string obligatorio

    coelsa: transferencia por COELSA. fcm_book: interna entre cuentas de Grip Rails.

    Valores: coelsa, fcm_book
  • operation_id string | null obligatorio

    Id de la operación en COELSA.

    largo máx. 64
  • origin_reference string | null obligatorio

    ori_trx_id con el que Grip Rails envió la operación. No cambia entre reintentos.

    patrón ^\d{1,16}$
  • status_code string | null obligatorio

    Último código de estado de COELSA (por ejemplo 7541 persistido, 7500 acreditado).

    largo máx. 8
  • submitted_at string (date-time) | null obligatorio
  • finalized_at string (date-time) | null obligatorio
FailureCode string

rail_rejected: COELSA la rechazó (detalle en rail.status_code e iso20022.reason). rail_expired: venció en COELSA. destination_closed: la cuenta de destino no existe o está cerrada al momento de acreditar. canceled_by_fcm: Grip Rails la canceló antes de enviarla (corte de emergencia, control posterior a la reserva o una transferencia pending que no se pudo autorizar).

Valores: rail_rejected, rail_expired, destination_closed, canceled_by_fcm
Failure object
  • code FailureCode obligatorio

    rail_rejected: COELSA la rechazó (detalle en rail.status_code e iso20022.reason). rail_expired: venció en COELSA. destination_closed: la cuenta de destino no existe o está cerrada al momento de acreditar. canceled_by_fcm: Grip Rails la canceló antes de enviarla (corte de emergencia, control posterior a la reserva o una transferencia pending que no se pudo autorizar).

  • message string obligatorio
    largo máx. 300
  • display_message string | null obligatorio
    largo máx. 200
OutgoingTransfer object
  • id OutgoingTransferId obligatorio

    Determinístico a partir de la entidad y la Idempotency-Key, así un reintento llega al mismo objeto.

  • object "outgoing_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId | null obligatorio

    CVU que figura como origen ante COELSA. null si se rechazó antes de elegirlo.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio

    Cargos de esta transferencia. Cada uno con importe es un asiento separado en el libro. Una transferencia reabierta por una acreditación tardía y completada va sin cargo y lo dice con un fcm_fee de 0 y su motivo.

  • total_debit_amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • destination Destination obligatorio

    Destino de una transferencia o de una validación.

  • counterparty Counterparty | null obligatorio

    Titular verificado. null si se rechazó antes de consultar el destino.

  • concept Concept obligatorio

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

  • description string | null obligatorio
    largo máx. 140
  • external_reference ExternalReference | null obligatorio
  • metadata Metadata obligatorio

    Hasta 20 pares clave-valor del cliente. No poner datos personales.

  • status OutgoingTransferStatus obligatorio

    Ver la tabla de estados en la descripción general.

  • status_reason OutgoingTransferStatusReason | null obligatorio
  • iso20022 Iso20022OutgoingStatus obligatorio
  • authorization Authorization obligatorio

    Decisión de la autorización previa, con su motivo. FCM Payment Solutions S.A.S. guarda además el detalle completo de cada control.

  • reservation Reservation | null obligatorio

    null si se rechazó antes de reservar.

  • rail Rail | null obligatorio

    null hasta que se envía.

  • failure Failure | null obligatorio

    Presente sólo en failed.

  • idempotency_key IdempotencyKeyValue obligatorio
  • created_at string (date-time) obligatorio
  • updated_at string (date-time) obligatorio
  • completed_at string (date-time) | null obligatorio
  • failed_at string (date-time) | null obligatorio

    Hora en que quedó failed. Vuelve a null si se reabre por una acreditación tardía.

OutgoingTransferList object
  • object "list" obligatorio
  • data array de OutgoingTransfer obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
Payer object

Quien pagó, según el aviso de COELSA. Cualquier dato puede faltar si COELSA no lo informa.

  • name string | null obligatorio
    largo máx. 120
  • cuit Cuit | null obligatorio
  • account BankKey | null obligatorio
  • account_type string | null obligatorio
    Valores: cbu, cvu, null
  • bank_code string | null obligatorio
    patrón ^\d{3}$
IncomingTransfer object
  • id IncomingTransferId obligatorio

    Determinístico a partir del id de COELSA del crédito.

  • object "incoming_transfer" obligatorio
  • account_id AccountId obligatorio
  • account_number_id AccountNumberId obligatorio
  • cvu BankKey obligatorio

    CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • currency Currency obligatorio

    Única moneda de la API.

  • charges array de Charge obligatorio
  • net_amount AmountOrZero obligatorio

    Importe en centavos de peso, puede ser cero.

  • payer Payer obligatorio

    Quien pagó, según el aviso de COELSA. Cualquier dato puede faltar si COELSA no lo informa.

  • concept string | null obligatorio

    Concepto BCRA informado por COELSA, si viene.

    patrón ^[A-Z]{3}$
  • status string obligatorio

    En fase 1 siempre posted.

    Valores: posted
  • iso20022 object obligatorio
    Campos de iso20022
    • entry_status string obligatorio

      camt.054 EntryStatus.

      Valores: BOOK
  • rail object obligatorio
    Campos de rail
    • name string obligatorio
      Valores: coelsa, fcm_book
    • operation_id string obligatorio

      Id de COELSA del crédito, o el otr_… de origen si name es fcm_book (interna entre cuentas de Grip Rails). Es la clave de idempotencia del asiento.

      largo máx. 64
    • business_date string (date) | null obligatorio

      Fecha de negocio (compensación) informada por COELSA.

  • ledger_references array de LedgerReference obligatorio
  • posted_at string (date-time) obligatorio
  • created_at string (date-time) obligatorio
IncomingTransferList object
  • object "list" obligatorio
  • data array de IncomingTransfer obligatorio
  • has_more boolean obligatorio
  • next_cursor string | null obligatorio
EventType string

Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

Valores: transfer.incoming.posted, transfer.outgoing.reserved, transfer.outgoing.completed, transfer.outgoing.failed, transfer.outgoing.reopened
EventData object

Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

  • object string obligatorio
    Valores: incoming_transfer, outgoing_transfer
  • id string obligatorio
    largo máx. 40
  • account_id AccountId obligatorio
  • ledger_references array de LedgerReference obligatorio

    Asientos del libro que produjeron el evento.

Event object
  • id EventId obligatorio
  • object "event" obligatorio
  • type EventType obligatorio

    Tipos de la fase 1. Pueden aparecer tipos nuevos sin aviso de versión; ignorá los que no conozcas. transfer.outgoing.reopened: una transferencia failed que COELSA acreditó después volvió a submitted (status_reason: late_settlement_review).

  • sequence integer (int64) obligatorio

    Contiguo y creciente por entidad, asignado en el orden en que se confirmó el cambio.

    mín. 1
  • entity_id EntityId obligatorio
  • api_version string obligatorio
    patrón ^\d{4}-\d{2}-\d{2}$
  • created_at string (date-time) obligatorio
  • data EventData obligatorio

    Referencia delgada al objeto. Para el estado vigente, pedí el objeto.

EventList object
  • object "list" obligatorio
  • data array de Event obligatorio
  • has_more boolean obligatorio
  • next_after_sequence integer (int64) | null obligatorio

    Valor para el próximo after_sequence (la sequence del último evento devuelto).

IdempotencyRecord object
  • key IdempotencyKeyValue obligatorio
  • object "idempotency_key" obligatorio
  • status string obligatorio
    Valores: in_progress, completed
  • method string obligatorio
    Valores: POST
  • path string obligatorio
    largo máx. 200
  • request_fingerprint string obligatorio

    SHA-256 de método, ruta y cuerpo canonizado (RFC 8785).

    patrón ^[0-9a-f]{64}$
  • response_status integer | null obligatorio
    mín. 200 · máx. 499
  • resource object | null obligatorio

    Objeto creado o afectado, si lo hubo.

    Variante object
    • object string obligatorio
    • id string obligatorio
  • created_at string (date-time) obligatorio
  • expires_at string (date-time) obligatorio
ErrorType string
Valores: invalid_request_error, authentication_error, permission_error, not_found_error, idempotency_error, transfer_declined, rate_limit_error, service_error
ErrorCode string

Ver la tabla de códigos en la descripción general.

Valores: invalid_request, parameter_missing, parameter_invalid, amount_invalid, currency_not_supported, concept_not_supported, destination_invalid, unsupported_version, idempotency_key_missing, idempotency_key_invalid, api_key_missing, api_key_invalid, signature_missing, signature_invalid, signature_expired, signature_replayed, signature_key_unknown, content_digest_mismatch, ip_not_allowed, environment_mismatch, entity_suspended, not_found, idempotency_key_reused, idempotency_request_in_progress, insufficient_funds, account_frozen, account_closed, limit_per_transfer_exceeded, limit_daily_exceeded, limit_monthly_exceeded, destination_not_found, destination_inactive, destination_is_source, destination_holder_mismatch, compliance_rejected, risk_rejected, rate_limited, internal_error, rail_unavailable, ledger_unavailable, transfers_paused, service_unavailable
ErrorBody object
  • type ErrorType obligatorio
  • code ErrorCode obligatorio

    Ver la tabla de códigos en la descripción general.

  • message string obligatorio

    Explicación técnica para quien integra. No mostrar a usuarios finales.

  • display_message string | null obligatorio

    Texto en castellano apto para mostrar a un usuario final, o null.

  • param string | null obligatorio

    Campo o header que causó el error, si aplica.

  • request_id RequestId obligatorio
  • retryable boolean obligatorio

    true: reintentá el mismo pedido con la misma Idempotency-Key.

  • doc_url string (uri) obligatorio
  • transfer_id OutgoingTransferId | null obligatorio

    En un 422 de transferencia, el id del objeto que quedó en rejected.

Error object
JwkOkp object
  • kty "OKP" obligatorio
  • crv "Ed25519" obligatorio
  • x string obligatorio
    patrón ^[A-Za-z0-9_-]{43}$
  • kid string obligatorio
    largo máx. 64
  • alg "EdDSA" obligatorio
  • use "sig" obligatorio
JwkEc object
  • kty "EC" obligatorio
  • crv "P-256" obligatorio
  • x string obligatorio
    patrón ^[A-Za-z0-9_-]{43}$
  • y string obligatorio
    patrón ^[A-Za-z0-9_-]{43}$
  • kid string obligatorio
    largo máx. 64
  • alg "ES256" obligatorio
  • use "sig" obligatorio
Jwks object
SimulateIncomingTransferRequest object
  • account_number_id AccountNumberId obligatorio
  • amount Amount obligatorio

    Importe en centavos de peso. 150000 = $ 1.500,00.

  • payer object

    Datos del pagador simulado. Si falta, se usa uno sintético.

    Campos de payer
    • name string
      largo máx. 120
    • cuit Cuit

      CUIT o CUIL, 11 dígitos sin guiones.

    • account BankKey

      CBU o CVU de 22 dígitos con dígitos verificadores válidos.

  • concept Concept

    Concepto BCRA de la transferencia, que viaja a COELSA. Lista inicial; puede crecer de forma aditiva. VAR varios, ALQ alquileres, CUO cuotas, EXP expensas, FAC facturas, HAB haberes, HON honorarios, PRE préstamos, SEG seguros.

SimulateRailResultRequest object
  • outcome string obligatorio
    Valores: completed, failed
  • coelsa_code string

    Código de COELSA a simular. Por defecto 7500 si completed y 7699 si failed.

    patrón ^\d{2,4}$
SimulateLateSettlementReviewRequest object
  • outcome string obligatorio

    La única salida de la revisión de una acreditación tardía: dos personas de Grip Rails confirman que la plata salió y la transferencia se cierra en completed, sin cargo.

    Valores: completed
SandboxClock object
  • object "sandbox_clock" obligatorio
  • entity_id EntityId obligatorio
  • now string (date-time) obligatorio

    Hora de la entidad en el sandbox.

  • offset_seconds integer (int64) obligatorio

    Cuánto está adelantada respecto de la hora real.

    mín. 0
AdvanceClockRequest object
  • advance_seconds integer obligatorio

    Segundos a adelantar (hasta 31 días por pedido).

    mín. 1 · máx. 2678400