CIMBRADEVELOPER PLATFORM
Verificando APIAyudaStatusOpenAPIIngresar ↗
Índice de documentación
DOCUMENTACIÓN / API V1

CONTRATO VERIFICABLE

Integrá sobre cosas
que existen.

Esta documentación se construye desde el mismo OpenAPI que publica Cimbra y describe únicamente el sandbox desplegado: autenticación, recursos, SDK, errores, eventos y límites operativos reales.

OpenAPI 3.1Contrato descargable
194Operaciones documentadas
37Scopes S2S canónicos
152Tipos de evento emitidos
i
Entorno sandbox, contrato de producción

Customers, KYC/KYB, cuentas, wallets, book transfers, estados de cuenta, tarjetas, beneficiarios, lotes de payouts, servicios, obligaciones, recargas, mandatos, movimientos, ledger, riesgo, conciliación, disputas, operaciones, aprobaciones, soporte, organización, topología de servicios y webhooks se persisten sobre el núcleo real. El host activo es sandbox, como sandbox.bind.com.ar, sandbox.pismolabs.io y sandbox.api.pomelo.la. Live exige hostname de producción, producto en Go Live, rieles oficiales BCRA/Coelsa/sponsor en live y un adaptador Cimbra registrado.

ENTORNOS

Un contrato. Un entorno activo. Live fail-closed.

ENTORNO ACTIVO · SANDBOX
https://cimbra-rose.vercel.app

Misma API, ledger y eventos que producción. Las claves usan cim_sk_test_. No mueve fondos de riel.

Consultar healthcheck JSON ↗
LIVE
Hostname no provisionado

Pismo entrega el hostname de producción en el onboarding comercial. BIND APIBANK no publica la URL productiva. Pomelo usa api.pomelo.la después de homologar. Hasta entonces no hay cim_sk_live_.

Consultar GET /api/v1/live-readiness
OpenAPI YAMLDisponibleDescargar
SDK TypeScript 0.1.0Preview verificableDescargar
Postman CollectionNo publicadaBacklog
SDKs Java / Python / GoNo publicadosBacklog

QUICKSTART

Primer request, sin pasos inventados.

Una API key sólo puede ser creada por Owner o Admin desde la sección Developers de la consola. El secreto se muestra una vez y Cimbra conserva únicamente su hash.

01
Entrá a la consola

Iniciá sesión, abrí Developers y generá una clave con customers:write.

Ingresar ↗
02
Guardá el secreto en backend

Usá una variable de entorno. Nunca expongas la clave en navegador, app móvil, repositorio o logs.

CIMBRA_API_KEY=cim_sk_test_••••
03
Creá un customer

Mandá una clave de idempotencia estable por operación lógica. El identificador y el tenant se resuelven en servidor.

CURL · EJECUTABLE
curl --request POST \
  --url https://cimbra-rose.vercel.app/api/v1/customers \
  --header "Authorization: Bearer $CIMBRA_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: customer-quickstart-001" \
  --header "X-Request-Id: req_quickstart_001" \
  --data '{
    "type": "business",
    "name": "Comercio del Sur",
    "country": "AR",
    "taxId": "30712345678"
  }'

Respuesta real: HTTP 201 en la primera creación y HTTP 200 con Idempotent-Replayed: true al repetir exactamente el request.

JSON · 201 CREATED
{
  "ok": true,
  "customer": {
    "id": "<uuid>",
    "type": "business",
    "name": "Comercio del Sur",
    "country": "AR",
    "taxIdLast4": "5678",
    "status": "active",
    "createdAt": "<ISO-8601>"
  },
  "replayed": false
}

AUTENTICACIÓN Y AUTORIZACIÓN

Dos identidades, controles distintos.

HUMANOS

Sesión first-party

Cookie opaca, hasheada en servidor. RBAC decide qué puede ver y ejecutar cada rol; las mutaciones validan origen y las decisiones maker/checker requieren sesión humana.

__Host-cimbra_session
MACHINE-TO-MACHINE

API key con scopes

Bearer propio del tenant, revocable, con vencimiento y rate limit. No puede aprobar, rechazar ni cancelar solicitudes maker/checker.

Authorization: Bearer cim_sk_test_…
OwnerGobierno total

Gobierna el tenant, la seguridad, las políticas, los accesos y toda la operación.

Puede administrar API keys
AdminAdministración delegada

Configura la organización y gestiona operadores y viewers sin desplazar al owner.

Puede administrar API keys
OperatorOperación controlada

Ejecuta y resuelve flujos operativos sin administrar credenciales ni privilegios.

No administra credenciales
ViewerSólo lectura

Consulta operación, evidencia y auditoría sin acciones mutantes.

No administra credenciales
customers:readcustomers:writeaccounts:readaccounts:writecards:readcards:writetransfers:readtransfers:writepayments:readpayments:writepayouts:readpayouts:writebillers:readbillers:writewallets:readwallets:writerisk:readrisk:writedisputes:readdisputes:writereconciliation:readreconciliation:writesettlements:readsettlements:writeapprovals:readoperations:readoperations:writesupport:readsupport:writeorganization:readorganization:writeplatform:readledger:readevents:readcompliance:readcompliance:writewebhooks:manage
401 ≠ 403

401 significa que la identidad no fue autenticada. 403 significa que existe una sesión o API key válida, pero su rol o scope no permite esa operación.

CONTRATO HTTP

Idempotencia, trazabilidad y retry seguro.

01

Idempotency-Key

Obligatoria cuando el endpoint la declara: altas y movimientos reintentables. Admite 8–100 caracteres de A-Z a-z 0-9 . _ : -.

02

X-Request-Id

Podés enviarlo; si falta, Cimbra lo genera. Se devuelve en toda respuesta y el SDK lo conserva durante reintentos.

03

Replays

Misma clave y mismo payload: respuesta original y header Idempotent-Replayed: true. Payload distinto: HTTP 409.

04

Cimbra-Should-Retry

La API marca explícitamente si un error puede reintentarse. El SDK aplica backoff sólo en requests seguros.

Límite actual

Configuración de webhooks, carga de evidencia y desactivación de reglas todavía no ofrecen replay idempotente; el SDK no las reintenta. La referencia de cada operación indica si acepta Idempotency-Key.

MODELO DE DATOS

Cursores estables y montos exactos.

Paginación

Customers, accounts, account statements, cards, transfers, book transfers y events aceptan limit entre 1 y 100. Reutilizá nextCursor mientras hasMore sea true.

{
  "data": [/* recursos */],
  "hasMore": true,
  "nextCursor": "<base64url_opaco>"
}

Dinero

En requests, enviá montos como string decimal en unidad mayor. En respuestas financieras, amountMinor conserva la representación contable exacta como string.

{
  "amount": "1250.50",
  "amountMinor": "125050",
  "currency": "ARS"
}

Monedas modeladas: ARS, USD, MXN, COP, BRL, CLP y PEN. Esto no implica disponibilidad de rieles reales en esos países.

ERRORES Y LÍMITES

Fallos estructurados y accionables.

JSON · ERROR EN API V1
{
  "error": {
    "type": "cimbra_api_error",
    "code": "insufficient_scope",
    "message": "La API key no incluye el scope customers:write.",
    "requestId": "req_<id>"
  }
}
400invalid_requestPayload, parámetros o Idempotency-Key inválidos.
401authentication_required / invalid_api_keyFalta la identidad, o la API key es inválida, fue revocada o venció.
403insufficient_scope / insufficient_roleLa identidad existe, pero no tiene el scope o rol requerido.
404not_foundEl recurso no existe dentro del tenant autenticado.
409conflict / idempotency_mismatchConflicto de estado o clave reutilizada con otro payload.
422unprocessable_entityLa solicitud es válida, pero saldo, riesgo o estado impiden ejecutarla.
429rate_limit_exceededSe agotó la ventana de la API key; respetar Retry-After.
5xxinternal_errorError transitorio; reintentar sólo cuando Cimbra-Should-Retry sea true.
Rate limit efectivo

Las API keys nuevas tienen hoy un límite de 300 requests/minuto. Después de autorizar la API key, las respuestas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset. Un 429 agrega Retry-After: 60.

SDK TYPESCRIPT

Un paquete real, descargable y con checksum.

PREVIEW OFICIAL

@cimbra/sdk · v0.1.0

Node.js 20+. ESM, declaraciones TypeScript, source maps, timeouts, errores tipados, cursores, reintentos seguros y verificación de webhooks.

Descargar .tgz ↗SHA-256 ↗43.2 kB · licencia propietaria
Distribución honesta

El SDK todavía no está en npm. El comando instala el artefacto servido por Cimbra; el checksum publicado permite verificar exactamente qué paquete se recibió.

TERMINAL
npm install https://cimbra-rose.vercel.app/sdk/cimbra-sdk-0.1.0.tgz
SHA-256a94b89beca3ce8a03823a212cf1cbf53f371c779c51ca1f134a4be7f12b5d78d
TYPESCRIPT
import { Cimbra } from '@cimbra/sdk';

const cimbra = new Cimbra({
  apiKey: process.env.CIMBRA_API_KEY!,
  baseUrl: 'https://cimbra-rose.vercel.app',
});

const result = await cimbra.customers.create({
  type: 'business',
  name: 'Comercio del Sur',
  country: 'AR',
  taxId: '30712345678',
});

console.log(result.data.customer.id, result.requestId);

BILLER INFRASTRUCTURE

Servicios propios, no un adaptador a competidores.

El originador directo registra su catálogo y emite obligaciones dentro del tenant. Cimbra protege la referencia del suscriptor, ejecuta el pago o la recarga contra el mismo ledger y riesgo del core, y conserva todo el lifecycle para conciliación, reversa y eventos.

Contrato S2S

billers:read/write gobierna catálogo y deuda; payments:read/write gobierna órdenes y mandatos.

Dinero consistente

Una orden comparte ledger de doble partida, límites, evaluación de riesgo y holds. La reversa crea postings compensatorios.

Recurrencia controlada

Mandatos semanales o mensuales conservan consentimiento, límite por ejecución, agenda, reintentos y pausa/cancelación.

Límite real

El sandbox no consulta una deuda externa ni afirma cobertura. Producción exige contrato directo, consentimiento exigible, riel oficial y certificación por país.

TYPESCRIPT · SDK REAL
const biller = await cimbra.billers.create({
  code: 'ENERGIA_AR',
  name: 'Energía Regional',
  country: 'AR',
  category: 'utilities',
  serviceType: 'bill_payment',
  currency: 'ARS',
  amountMode: 'exact',
  contractReference: 'DIRECT-2026-001',
});

const debt = await cimbra.billers.createObligation(biller.data.biller.id, {
  externalReference: 'INV-2026-0001',
  subscriberReference: 'CLIENTE-00123456',
  amount: '18250.00',
  dueAt: '2026-09-10T21:00:00.000Z',
  description: 'Servicio agosto 2026',
});

const payment = await cimbra.billPayments.create({
  accountId: '<account_uuid>',
  billerId: biller.data.biller.id,
  obligationId: debt.data.obligation.id,
});

console.log(payment.data.order.status);

CORE BANKING

Un movimiento, dos postings, historial completo.

Un book transfer mueve saldo entre dos cuentas activas del mismo tenant y moneda. Cimbra bloquea ambos recursos, descuenta reservas del saldo disponible y crea el débito y crédito dentro de la misma transacción SQL.

Atomicidad

La operación nunca deja un solo leg: el journal exige débitos iguales a créditos y el trigger protege tenant y moneda.

Riesgo y doble control

Una decisión review reserva sólo el origen. La política transfer.create puede exigir un checker distinto con MFA antes de crear el movimiento.

Estados de cuenta

accounts:read devuelve postings paginados, saldo de apertura y cierre para un período máximo de 366 días.

Reversas

Una reversa crea postings opuestos y queda enlazada; jamás edita ni borra el asiento original.

i
Rail interno, no transferencia bancaria

El contrato está operativo dentro del sandbox persistente. Pix, SPEI, CBU/CVU u otros rieles externos requieren una conexión directa homologada, licencia o sponsor y conciliación oficial por país.

TYPESCRIPT · SDK REAL
const movement = await cimbra.bookTransfers.create({
  externalReference: 'BT-2026-0001',
  sourceAccountId: '<source_account_uuid>',
  destinationAccountId: '<destination_account_uuid>',
  description: 'Distribución de saldo marketplace',
  amount: '1250.00',
  currency: 'ARS',
});

if (!movement.data.requiresApproval) {
  const statement = await cimbra.accounts.statement(movement.data.transfer.sourceAccountId, {
    from: '2026-08-01T00:00:00.000Z',
    to: '2026-09-01T00:00:00.000Z',
    limit: 50,
  });
  console.log(statement.data.period.closingBalance, statement.data.data);
}

EMBEDDED FINANCE

Una wallet, bolsillos reales, sin ledger paralelo.

Un programa tenant configura marca y kinds de bolsillo. Abrir una wallet crea cuentas de producto; mover saldo entre pockets ejecuta un book transfer con riesgo, holds y maker/checker.

Programas

Owner/Admin define nombre visible, moneda, bolsillos available, pending o rewards y URLs de soporte. No se publica una app de consumidor.

Pockets

Cada bolsillo es una cuenta de producto. El saldo se deriva de postings; freeze y close inactivan esas cuentas.

Movimientos

wallets:write resuelve pocket IDs y reutiliza el rail interno. Una wallet inactiva rechaza el movimiento con 409.

Límite real

El sandbox no custodia fondos. Una wallet productiva exige marco PSP o entidad habilitada, safeguarding y riel de fondeo por país.

TYPESCRIPT · SDK REAL
const program = await cimbra.walletPrograms.create({
  name: 'Wallet marketplace ARS',
  displayName: 'Billetera Comercio Sur',
  defaultCurrency: 'ARS',
  pocketKinds: ['available', 'pending'],
});

const wallet = await cimbra.wallets.create({
  programId: program.data.program.id,
  customerId: '<customer_uuid>',
  externalReference: 'WALLET-001',
});

const movement = await cimbra.wallets.transfer(wallet.data.wallet.id, {
  externalReference: 'WP-001',
  sourcePocketId: wallet.data.pockets[0].id,
  destinationPocketId: wallet.data.pockets[1].id,
  description: 'Reserva operativa',
  amount: '25.00',
  currency: 'ARS',
});

ARGENTINA · SANDBOX

CVU propio, alias de tenant, sin fingir Coelsa.

Cimbra emite CVU con prefijo 000 y código PSP 9999, asigna o cambia el alias del tenant sobre un CVU existente, confirma titular y liquida el crédito interno sobre el ledger. Un CBU externo sale a settlement. El débito y el QR sólo operan entre cuentas del tenant.

Instrumentos

Un CVU por cuenta ARS argentina. El alias se asigna o cambia sobre ese CVU; es único en el tenant y un cambio real queda bloqueado 24 horas. Eliminar el CVU no borra la cuenta ni el saldo. No se emite CBU porque Cimbra no es banco.

Confirmación

El crédito exige confirmHolder, nombre y últimos cuatro del CUIT. Un mismatch interno responde 422 holder_mismatch.

Débito y QR

El débito externo responde external_debit_not_supported. El dinámico cimbra:qr:v1 vence y se consume; el estático cimbra:qr:static:v1 es reutilizable. Una orden de venta fija el monto cerrado sobre ese QR. El QR de deuda cimbra:qr:debt:v1 es un recurso primario de un solo pago.

Límite real

Transferencias 3.0, DEBIN y directorio nacional entran con membresía o sponsor directo. BIND y el resto siguen como benchmarks, no conectores.

TYPESCRIPT · SDK REAL
const issued = await cimbra.railInstruments.issue({
  accountId: '<account_uuid>',
});
await cimbra.railInstruments.assignAlias(issued.data.instruments[0].id, {
  alias: 'COMERCIO.SUR',
});
const preview = await cimbra.railDirectory.lookup(issued.data.instruments[0].value);
const credit = await cimbra.instantTransfers.create({
  externalReference: 'IP-001',
  accountId: '<source_account_uuid>',
  destination: issued.data.instruments[0].value,
  description: 'Cobro inmediato',
  amount: '1500.00',
  currency: 'ARS',
  confirmHolder: true,
  holderName: preview.data.holderName!,
  taxIdLast4: preview.data.taxIdLast4!,
});
const staticQr = await cimbra.paymentQrs.create({
  accountId: '<account_uuid>',
  description: 'Mostrador',
  kind: 'static',
});
await cimbra.qrSaleOrders.create({
  paymentQrId: staticQr.data.qr.id,
  externalReference: 'OV-001',
  description: 'Ticket mostrador',
  amount: '1500.00',
});
const debt = await cimbra.qrDebts.create({
  accountId: '<account_uuid>',
  externalReference: 'DEUDA-001',
  description: 'Cuota única',
  amount: '2500.00',
});

ARGENTINA · COBRANZAS

Un link de cobro y un punto de recaudación, sin fingir adquirencia de red.

El comercio emite un link contra una cuenta ARS argentina, opcionalmente asociado a una deuda QR abierta o a un punto de recaudación. El pagador liquida desde otra cuenta Cimbra, con inbound sandbox, pagando el QR de la deuda o acreditando el CVU del till. La devolución usa postings compensatorios: total o parcial. Un link CVU puede reabrirse si el neto queda por debajo del monto; no se reabre la deuda QR.

Link

Monto, vencimiento y payload cimbra:link:v1. Puede llevar qrDebtId, collectionTillId e items de detalle. GET embebe credits, refunds, partiallyCollected y partiallyRefunded. Owner/Admin/Operator crean y devuelven; Viewer sólo consulta.

Punto de recaudación

collection_tills emite un CVU 000+9999 del till. Transferencias internas e inbound quedan con collectionTillId. No es caja BIND.

Scopes

payments:read/write protege S2S. El cobro entra al motor de riesgo y puede quedar en hold.

Límite real

No hay checkout PCI, marcas, sucursales ni liquidación a un adquirente. El cobro por CVU admite parciales, overpay y devolución parcial; QR e internal siguen monto cerrado. Un inbound suelto al till no imputa el link. El CVU del till no viaja por Coelsa. BIND y el resto siguen como benchmarks, no conectores.

TYPESCRIPT · SDK REAL
const till = await cimbra.collectionTills.create({
  accountId: '<merchant_account_uuid>',
  externalReference: 'TILL-001',
  name: 'Mostrador Sur',
  issueStaticQr: true,
  closedAmountOnly: true,
});
await cimbra.qrSaleOrders.create({
  paymentQrId: till.data.till.paymentQrId!,
  externalReference: 'OV-TILL-001',
  description: 'Ticket mostrador',
  amount: '1500.00',
});
await cimbra.collectionTills.inbound(till.data.till.id, {
  externalReference: 'INB-001',
  description: 'Transferencia recibida',
  amount: '1500.00',
});
const link = await cimbra.paymentLinks.create({
  accountId: '<merchant_account_uuid>',
  externalReference: 'FAC-001',
  description: 'Honorarios agosto',
  amount: '18500.00',
  currency: 'ARS',
  methods: ['cimbra_qr', 'cimbra_cvu'],
  qrDebtId: '<qr_debt_uuid>',
  collectionTillId: till.data.till.id,
  items: [{ description: 'Honorarios agosto', amount: '18500.00', quantity: 1 }],
});
await cimbra.paymentLinks.pay(link.data.link.id, {
  method: 'cimbra_qr',
  payerAccountId: '<payer_account_uuid>',
});
await cimbra.paymentLinks.refund(link.data.link.id, { amount: '3.00' });

PAYOUT INFRASTRUCTURE

De un beneficiario protegido a un resultado conciliable.

Cimbra acepta un lote como borrador inmutable, lo somete a doble control si el tenant lo exige y procesa cada ítem por separado. Un fallo funcional no duplica ni bloquea los payouts ya resueltos; el estado y el archivo se derivan de datos persistidos.

i
Scheduling del entorno actual

Los lotes inmediatos se despachan al responder. En el deployment gratuito actual, el recovery sweep de lotes programados corre diariamente y no promete precisión horaria; la infraestructura AWS preparada usa EventBridge cada minuto, pero no se activa hasta autorizar presupuesto.

Scopes y roles

payouts:read/write protege S2S. Owner/Admin administra destinos, Operator puede crear/enviar lotes y Viewer sólo consulta.

Privacidad

El destino completo es write-only: se normaliza, se convierte en digest tenant-scoped y sólo vuelven tipo y últimos cuatro.

Ejecución durable

De 1 a 100 ítems, programación y deadline, lease recuperable, tres intentos transitorios, riesgo, saldo, holds y ledger por ítem.

Límite real

El sandbox contabiliza contra settlement interno. Producción requiere riel bancario/cámara directo, reason codes, returns, conciliación y homologación.

TYPESCRIPT · SDK REAL
const beneficiary = await cimbra.payoutBeneficiaries.create({
  externalReference: 'PROVIDER-001',
  name: 'Proveedor Regional',
  entityType: 'business',
  country: 'AR',
  currency: 'ARS',
  destinationType: 'alias',
  destination: 'proveedor.cimbra',
});

const batch = await cimbra.payoutBatches.create({
  sourceAccountId: '<account_uuid>',
  externalReference: 'PAYOUT-2026-09-001',
  description: 'Liquidación de proveedores',
  currency: 'ARS',
  processBefore: '2026-09-01T21:00:00.000Z',
  items: [{
    externalReference: 'ITEM-001',
    beneficiaryId: beneficiary.data.beneficiary.id,
    amount: '125000.00',
    description: 'Liquidación agosto',
  }],
});

const submitted = await cimbra.payoutBatches.submit(batch.data.batch.id);
const csv = await cimbra.payoutBatches.resultCsv(batch.data.batch.id);
console.log(submitted.data.batch.status, csv.data);

CUSTOMER DUE DILIGENCE

KYC/KYB orquestado, con decisión humana independiente.

El tipo del customer determina KYC o KYB. Cada caso congela jurisdicción, versión de política y checks requeridos; partes, evidencia y observaciones se conservan append-only y el vencimiento es terminal.

Preparación S2S

compliance:read/write permite crear, completar, consultar, enviar o cancelar un expediente desde backend.

KYB completo

Exige representante legal y al menos un beneficiario final; la participación declarada total no puede superar 100%.

Maker / checker

Aprobar o rechazar es session-only: otro Owner/Admin con MFA decide y una API key recibe 403 session_required.

Límite real

El sandbox no afirma biometría, prueba de vida, listas o registros oficiales sin una fuente directa certificada.

TYPESCRIPT · SDK REAL
const opened = await cimbra.dueDiligence.create({
  customerId: '<business_customer_uuid>',
  expiresInDays: 90,
});

await cimbra.dueDiligence.addParty(opened.data.case.id, {
  role: 'beneficial_owner',
  name: 'Ana Sur',
  taxId: '20123456789',
  ownershipPercentage: 25,
});

await cimbra.dueDiligence.recordCheck(opened.data.case.id, {
  checkType: 'sanctions',
  source: 'official_registry',
  status: 'passed',
  resultCode: 'no_match',
  note: 'Consulta directa documentada.',
});

// Completá todos los checks/partes exigidos antes de enviar.
await cimbra.dueDiligence.submit(opened.data.case.id);

RISK STEP-UP

Autenticación reforzada, sin confundirla con una red.

Una evaluación review puede abrir un challenge OTP. Cimbra genera la credencial, conserva hash y ciphertext, limita intentos, expira el challenge y registra cada intento sin guardar el código en claro. El integrador recibe la credencial sólo en el create/replay pendiente y la entrega desde backend por su canal aprobado.

Lifecycle

pending → verified | failed | expired. Un challenge terminal no se reabre.

Interconexión

La verificación queda vinculada a la evaluación y al caso; no resuelve fondos ni evita maker/checker.

SLO medido

El estado de riesgo publica muestras, p50, p95, p99 y porcentaje ≤ 250 ms de decisiones nuevas.

Límite real

No implementa EMV 3DS, ACS, liability shift, SMS, push ni biometría. Esas capas requieren canal, riel y certificación directos.

TYPESCRIPT · SDK REAL
const evaluationId = '<evaluation_in_review_uuid>';
const created = await cimbra.risk.createStepUpChallenge(evaluationId, {
  expiresInSeconds: 300,
  maxAttempts: 5,
});

// Entregá esta credencial desde tu backend por un canal aprobado.
const credential = created.data.credential!;

const result = await cimbra.risk.verifyStepUpChallenge(
  evaluationId,
  created.data.challenge.id,
  { credential },
);

console.log(result.data.verified, result.data.challenge.status);

WEBHOOKS

Outbox durable, firma y replay operativo.

Entrega

POST HTTPS público, puerto 443, timeout de 4 segundos y éxito ante cualquier respuesta 2xx. Redirecciones no se siguen.

Firma

HMAC-SHA256 sobre timestamp.raw_body. Ventana predeterminada del SDK: 5 minutos y comparación en tiempo constante.

Reintentos

Hasta 7 intentos totales. Backoff después de cada fallo: 1m, 5m, 30m, 2h, 6h y 24h.

Operación

Estados, status HTTP, error e historial de intentos quedan persistidos. Owner/Admin puede reencolar una entrega.

JSON · EVENTO REAL
{
  "id": "<event_uuid>",
  "type": "transfer.created",
  "created_at": "<ISO-8601>",
  "data": {
    "resource_type": "transaction",
    "resource_id": "<transaction_uuid>"
  }
}
TYPESCRIPT · VERIFICACIÓN
import { constructWebhookEvent } from '@cimbra/sdk';

const rawBody = await request.text();
const event = await constructWebhookEvent({
  payload: rawBody,
  signature: request.headers.get('cimbra-signature')!,
  timestamp: request.headers.get('cimbra-timestamp'),
  secret: process.env.CIMBRA_WEBHOOK_SECRET!,
});

console.log(event.id, event.type, event.created_at);
return new Response(null, { status: 204 });
152 tipos de evento implementados Ver catálogo
customer.createdaccount.createdcard.createdcard.program_createdcard.activatedcard.frozencard.unfrozencard.terminatedcard.controls_updatedtransfer.createdtransfer.reversedbook_transfer.createdbook_transfer.settledbook_transfer.cancelledbook_transfer.reversedwallet.program_createdwallet.createdwallet.frozenwallet.unfrozenwallet.closedwallet.pocket_transfer_createdrail.instrument_issuedrail.alias_assignedrail.instrument_revokedinstant.transfer_createdinstant.transfer_returnedinstant.transfer_settledinstant.transfer_cancelledinstant.debit_requestedinstant.debit_acceptedinstant.debit_rejectedinstant.qr_createdinstant.qr_paidinstant.qr_cancelledinstant.sale_order_createdinstant.sale_order_paidinstant.sale_order_cancelledinstant.sale_order_supersededinstant.debt_createdinstant.debt_paidinstant.debt_cancelledcollection.link_createdcollection.link_cancelledcollection.link_paidcollection.link_creditedcollection.link_refundedcollection.till_createdcollection.till_alias_assignedcollection.till_qr_issuedcollection.till_creditedcollection.till_disabledecheq.issuedecheq.acceptedecheq.endorsedecheq.depositedecheq.cancelledecheq.returnedecheq.rejectedhold.capturedhold.releasedpayment.createdpayment.reversedpayout.beneficiary_createdpayout.beneficiary_activatedpayout.beneficiary_suspendedpayout.batch_createdpayout.batch_submittedpayout.batch_approval_pendingpayout.batch_approvedpayout.batch_scheduledpayout.batch_processingpayout.batch_requires_attentionpayout.batch_completedpayout.batch_partially_failedpayout.batch_failedpayout.batch_cancelledpayout.item_settledpayout.item_reviewpayout.item_failedbiller.createdbiller.activatedbiller.suspendedbiller.obligation_createdbiller.obligation_reopenedbill_payment.createdbill_payment.declinedbill_payment.reviewbill_payment.settledbill_payment.cancelledbill_payment.reversedbill_payment.order_reversedrecurring_mandate.createdrecurring_mandate.pausedrecurring_mandate.resumedrecurring_mandate.cancelledrecurring_mandate.execution_completedrecurring_mandate.execution_skippedrecurring_mandate.execution_failedrisk.rule_createdrisk.rule_version_createdrisk.rule_promotedrisk.rule_disabledrisk.simulation_completedrisk.list_entry_createdrisk.list_entry_disabledrisk.outcome_reportedrisk.case_createdrisk.case_resolvedrisk.step_up_challenge_createdrisk.step_up_challenge_verifiedrisk.step_up_challenge_failedrisk.step_up_challenge_expiredrisk.step_up_attempt_faileddispute.createddispute.start_reviewdispute.mark_network_readydispute.resolve_wondispute.resolve_lostdispute.rejectdispute.cancelreconciliation.run_createdreconciliation.exception_resolvedoperations.work_item_updatedoperations.note_addedoperations.evidence_linkedsettlement.cycle_createdsettlement.cycle_settledapproval.policy_updatedapproval.request_createdapproval.request_executedapproval.request_rejectedapproval.request_cancelledapproval.request_expiredapproval.request_failedorganization.updatedorganization.invitation_createdorganization.invitation_acceptedorganization.invitation_revokedorganization.member_role_updatedorganization.member_removedcompliance.document_uploadeddue_diligence.createddue_diligence.party_addeddue_diligence.check_recordeddue_diligence.submitteddue_diligence.approveddue_diligence.rejecteddue_diligence.cancelleddue_diligence.expiredsupport.case_openedsupport.message_addedsupport.status_updated

API REFERENCE

Todo el contrato publicado.

La lista siguiente se genera desde public/openapi.yaml; no existe un inventario paralelo escrito a mano. Cada operación muestra autenticación, scope, Content-Type, parámetros y respuestas declaradas.

194 de 194 operaciones

Identidad y estado

7 operaciones
POST/api/auth/loginStart a session with email/username and password+
Autenticación
Pública
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Authenticated
401Invalid credentials
429Too many attempts
Ver contrato OpenAPI 3.1 original ↗
POST/api/auth/logoutRevoke the current session+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Session revoked
401Authentication required
Ver contrato OpenAPI 3.1 original ↗
GET/api/auth/meRead the authenticated user+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Current user
401Authentication required
Ver contrato OpenAPI 3.1 original ↗
POST/api/auth/registerCreate a first-party account and session+
Autenticación
Pública
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

201Account created
409Email or username already exists
429Too many attempts
Ver contrato OpenAPI 3.1 original ↗
GET/api/healthPlatform health+
Autenticación
Pública
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Operational. Includes environment
503Database or schema unavailable
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/capabilitiesList Cimbra-native financial infrastructure services and their real availability+

Competitors are benchmark inputs only. Every returned service is owned by Cimbra; networkBoundary identifies the direct regulated-rail boundary required for live money movement.

Autenticación
Sesión o API key
Scope S2S
platform:read
Content-Type
Sin body

Respuestas documentadas

200Cimbra service catalog
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/live-readinessRead sandbox vs production hosts, Pomelo go-live stages, catalog products, official rail connections, the AR PSPCP fintech path and the USD 500 Gate 1 capital plan+

liveReady is true only when a production hostname is provisioned, at least one product is in go_live, every required official rail of that product is live, and a Cimbra adapter is registered. CIMBRA_OPERATING_MODE=live does not move funds without that. Products homologate independently. Rails are BCRA, Coelsa, sponsor banks or schemes — never BIND, Dock, tapi, Pismo, Pomelo or Wibond. capitalPlan is the authorized USD 500 Gate 1 envelope; spending it does not set liveReady.

Autenticación
Sesión o API key
Scope S2S
platform:read
Content-Type
Sin body

Respuestas documentadas

200Live readiness snapshot
401Authentication required
403Missing platform:read scope or console role
Ver contrato OpenAPI 3.1 original ↗

Customers

3 operaciones
GET/api/v1/customersList customers with cursor pagination+
Autenticación
Sesión o API key
Scope S2S
customers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Customer page
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/customersCreate a customer+
Autenticación
Sesión o API key
Scope S2S
customers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

typebodyindividual | businessopcional
namebodystringrequerido
countrybodyAR | MX | CO | BR | CL | PErequerido
taxIdbodystringrequerido

Respuestas documentadas

200Idempotent replay
201Customer created
400Invalid payload
401Authentication required
409Idempotency key was already used with a different payload
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/customers/{id}Retrieve a customer by ID+
Autenticación
Sesión o API key
Scope S2S
customers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Customer
404Customer not found in tenant
Ver contrato OpenAPI 3.1 original ↗

Accounts

4 operaciones
GET/api/v1/accountsList accounts with cursor pagination+
Autenticación
Sesión o API key
Scope S2S
accounts:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Account page
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/accountsOpen an account+
Autenticación
Sesión o API key
Scope S2S
accounts:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

customerIdbodystring (uuid)requerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
countrybodyAR | MX | CO | BR | CL | PErequerido

Respuestas documentadas

200Idempotent replay
201Account opened
404Customer not found in tenant
409Idempotency key was already used with a different payload
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/accounts/{id}Retrieve an account by ID+
Autenticación
Sesión o API key
Scope S2S
accounts:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Account
404Account not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/accounts/{id}/statementRetrieve a ledger-backed account statement+

Returns immutable postings for one tenant account plus opening and closing balances for an ISO-8601 period of at most 366 days. Reversals appear as separate compensating entries.

Autenticación
Sesión o API key
Scope S2S
accounts:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
fromquerystring (date-time)opcional

Inclusive period start; defaults to 30 days before now.

toquerystring (date-time)opcional

Exclusive period end; defaults to now.

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Account statement page and period balances
400Invalid period or pagination
403Missing accounts:read scope or console role
404Account not found in tenant
Ver contrato OpenAPI 3.1 original ↗

Book transfers

4 operaciones
GET/api/v1/book-transfersList native book transfers with cursor pagination+

Tenant-scoped account-to-account movements backed by paired ledger postings. This sandbox operation does not use an external rail or move real funds.

Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Book transfer page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/book-transfersAtomically move balance between two Cimbra accounts+

Locks both tenant accounts, validates status, currency and available balance, evaluates risk, and either creates a source hold or posts an atomic debit/credit pair. The existing transfer.create maker/checker policy protects this operation when enabled.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
sourceAccountIdbodystring (uuid)requerido
destinationAccountIdbodystring (uuid)requerido
descriptionbodystringrequerido
amountbodystring | numberrequerido

Positive decimal major-unit amount. Prefer a string to avoid floating-point serialization.

currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Book transfer settled or placed in risk review
202Maker/checker policy is active and a human approval is pending
400Invalid payload or same source and destination
403Missing transfers:write scope or finance.write permission
404Source or destination account not found in tenant
409Account state
422Insufficient available balance or risk decline
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/book-transfers/{id}Retrieve a native book transfer+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Book transfer
404Book transfer not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/book-transfers/{id}/reverseReverse a settled book transfer with compensating postings+

Never mutates the original postings. It creates an opposite journal, links the reversal transaction and preserves the full account statement history.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201Compensating reversal created
403Missing transfers:write scope or finance.write permission
404Book transfer not found in tenant
409Transfer is not settled
Ver contrato OpenAPI 3.1 original ↗

Instant payments

25 operaciones
GET/api/v1/debit-requestsList internal debit-pull requests+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Debit request page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/debit-requestsRequest an internal debit from another Cimbra account in the tenant+

External CBU/CVU debit is rejected with external_debit_not_supported. This is not DEBIN over Coelsa.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
collectorAccountIdbodystring (uuid)requerido
payerDestinationbodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARSrequerido
expiresInMinutesbodyintegeropcional

Respuestas documentadas

200Idempotent replay
201Debit request created pending acceptance
400Invalid payload
403Missing transfers:write scope or finance.write permission
422External debit is not supported
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/debit-requests/{id}/respondAccept or reject a pending internal debit request+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

decisionbodyaccept | rejectrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Debit accepted and settled
403Missing transfers:write scope or finance.write permission
404Debit request not found
409Request is not pending or expired
422Insufficient funds or risk decline
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/instant-transfersList sandbox instant transfers+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

schemequerycredit_push | debit_pull | qr_collectopcional

Respuestas documentadas

200Instant transfer page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/instant-transfersCreate a sandbox credit push with holder confirmation+

Internal CVU/alias settles between product accounts. External CBU/CVU posts cash-out to settlement. Inbound credits a Cimbra CVU from an external originator. Rail is cimbra_sandbox, not Coelsa.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
accountIdbodystring (uuid)requerido
destinationbodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARSrequerido
directionbodyoutbound | inboundopcional
confirmHolderbodybooleanrequerido
holderNamebodystringrequerido
taxIdLast4bodystringrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Instant transfer created
400Invalid payload
403Missing transfers:write scope or finance.write permission
404Account
409Inactive account
422Holder mismatch
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/instant-transfers/{id}Retrieve an instant transfer+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Instant transfer
404Transfer not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/instant-transfers/{id}/returnReturn a settled instant transfer with compensating postings+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201Compensating return created
403Missing transfers:write scope or finance.write permission
404Transfer not found in tenant
409Transfer is not settled or already returned
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payment-qrsList Cimbra QR collection payloads+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Payment QR page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payment-qrsCreate a Cimbra-owned QR payload for an account+

Dynamic payloads use cimbra:qr:v1 and expire after one payment. Static payloads use cimbra:qr:static:v1, require an active sandbox CVU, stay open-amount and reusable until cancelled, and allow one active static QR per account. Neither payload is the Argentine interoperable QR.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
kindbodydynamic | staticopcional
amountbodystring | numberopcional
currencybodyARSopcional
descriptionbodystringrequerido
expiresInMinutesbodyintegeropcional

Respuestas documentadas

200Idempotent replay
201QR created
400Invalid payload or static QR with amount or expiry
403Missing transfers:write scope or finance.write permission
409Account already has an active static QR
422Static QR requires an active sandbox CVU
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payment-qrs/{id}/cancelCancel an active Cimbra QR so it can no longer be paid+

Stops a reusable static QR or an unused dynamic QR. Does not reverse settled payments. Not a Coelsa or competitor caja command.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201QR cancelled
403Missing transfers:write scope or finance.write permission
404QR not found
409QR is not active
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payment-qrs/{id}/payPay a Cimbra QR from another account in the tenant+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

sourceAccountIdbodystring (uuid)requerido
amountbodystring | numberopcional
externalReferencebodystringrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201QR paid
400Invalid payload or open-amount QR without amount
403Missing transfers:write scope or finance.write permission
404QR not found
409QR inactive or expired
422Amount mismatch
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/qr-debtsList Cimbra QR debts with a closed amount and a single payment+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200QR debt page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/qr-debtsCreate a Cimbra QR debt with a closed amount and one payment+

Resource is the debt, not an overlay on a static QR. Payload cimbra:qr:debt:v1. Requires an active sandbox CVU on the collecting account. Sandbox settles synchronously in the same transaction. Not BIND deuda, EMVCo or Coelsa PCT.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
externalReferencebodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARSopcional
expiresInMinutesbodyintegeropcional

Respuestas documentadas

200Idempotent replay
201QR debt created
400Invalid payload
403Missing transfers:write scope or finance.write permission
409External reference conflict
422Collecting account requires an active sandbox CVU
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/qr-debts/{id}Retrieve a Cimbra QR debt by id+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200QR debt
403Missing transfers:read scope or console role
404QR debt not found
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/qr-debts/{id}Delete an open Cimbra QR debt so the QR can no longer be paid+

Does not reverse a settled payment. A paid debt is not reopened. Not a Coelsa or competitor deuda command.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200QR debt cancelled or idempotent replay
403Missing transfers:write scope or finance.write permission
404QR debt not found
409QR debt is not open
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/qr-sale-ordersList Cimbra sale orders overlaid on static QRs+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Sale order page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/qr-sale-ordersOverlay a closed amount on an active Cimbra static QR+

One pending sale order per static QR. Creating another supersedes the pending one. Not a BIND caja, EMVCo or Transferencias 3.0 order.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

paymentQrIdbodystring (uuid)requerido
externalReferencebodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARSopcional
expiresInMinutesbodyintegeropcional

Respuestas documentadas

200Idempotent replay
201Sale order created
400Invalid payload
403Missing transfers:write scope or finance.write permission
404QR not found
409QR inactive or external reference conflict
422Sale order requires an active static QR
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/qr-sale-orders/{id}Retrieve a Cimbra sale order by id+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Sale order
403Missing transfers:read scope or console role
404Sale order not found
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/qr-sale-orders/{id}Delete a pending Cimbra sale order and return the static QR to open amount+

Does not reverse settled payments. Not a Coelsa or competitor caja command.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Sale order cancelled or idempotent replay
403Missing transfers:write scope or finance.write permission
404Sale order not found
409Sale order is not pending
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/rail-directoryPreview holder data for a CBU, CVU or alias+

Tenant-scoped lookup. Internal hits return holder name and tax last4. External CBU/CVU return last4 only. There is no national alias directory.

Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

qquerystringrequerido

Respuestas documentadas

200Directory preview
400Malformed CBU
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/rail-instrumentsList sandbox CVU and tenant aliases+

Instruments issued by Cimbra as a sandbox PSP. Prefix 0009999 is not a Coelsa assignment. Aliases resolve only inside the tenant.

Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Rail instrument page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/rail-instrumentsIssue a sandbox CVU and optional alias for an ARS Argentine account+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
aliasbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201CVU and optional alias issued
400Invalid instrument payload
403Missing transfers:write scope or finance.write permission
409Active CVU already issued
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/rail-instruments/{id}Retrieve a rail instrument owned by the tenant+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Rail instrument
404Instrument not found in tenant
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/rail-instruments/{id}Delete a sandbox CVU without touching the account or ledger+

Own Cimbra contract. Marks the CVU and its tenant alias as revoked so they cannot receive or send. The ARS account and its balance remain. A later issue call reactivates the same sandbox CVU for that account.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200CVU revoked or replayed
403Missing transfers:write scope or finance.write permission
404Instrument not found in tenant
409CVU already revoked or idempotency mismatch
422No CVU exists for the instrument
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/rail-instruments/{id}/aliasAssign or change the tenant alias of an existing sandbox CVU+

Own Cimbra contract. Assigns or replaces the alias of a CVU already issued in the tenant. Uniqueness is tenant-scoped, not a national directory. A real change is limited to once per 24 hours; issuing the CVU or the first assignment does not start that window. Repeating the same alias returns 200 without moving the clock.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

aliasbodystringrequerido

Respuestas documentadas

200Alias assigned
400Invalid alias format
403Missing transfers:write scope or finance.write permission
404Instrument not found in tenant
409Inactive instrument or idempotency mismatch
422Alias taken in tenant
Ver contrato OpenAPI 3.1 original ↗

Cobranzas

13 operaciones
GET/api/v1/collection-tillsList sandbox collection tills+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Collection till page
403Missing payments:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/collection-tillsCreate a collection till with its own sandbox CVU+

Own Cimbra contract. Issues a sandbox CVU (000+9999) attributed to this till, not a second CVU of the collector account. Optional static QR of the same account, or issueStaticQr to mint a till-owned cimbra:qr:static:v1 that does not consume the account's one static QR. closedAmountOnly requires a pending sale order to pay that QR. presence is present or not_present attribution, not POS. Optional alias. Not a BIND caja, Coelsa CVU, EMVCo QR or POS.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
externalReferencebodystringrequerido
namebodystringrequerido
paymentQrIdbodyobject (uuid)opcional
aliasbodyobjectopcional
issueStaticQrbodybooleanopcional
closedAmountOnlybodybooleanopcional
presencebodypresent | not_presentopcional

Respuestas documentadas

200Idempotent replay
201Collection till created
400Invalid payload
403Missing payments:write scope or finance.write permission
409Duplicate reference
422Static QR is not an active account-owned static QR of the same account
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/collection-tills/{id}Retrieve a collection till+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Collection till
403Missing payments:read scope or console role
404Collection till not found
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/collection-tills/{id}Disable a collection till and its sandbox CVU+

Irreversible. The CVU and alias stop resolving in the tenant directory. A new POST creates another till. Returns 200 JSON, including idempotent replay. Not a Coelsa disable.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Collection till disabled or idempotent replay
403Missing payments:write scope or finance.write permission
404Collection till not found
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/collection-tills/{id}/aliasAssign or change the tenant alias of a collection till+

Uniqueness is tenant-scoped against rail instruments and other tills. A real change is limited to once per 24 hours; the first assignment does not start that window.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

aliasbodystringrequerido

Respuestas documentadas

200Alias assigned
400Invalid alias format
403Missing payments:write scope or finance.write permission
404Collection till not found
409Till disabled or idempotency mismatch
422Alias taken in tenant or more than one change in 24 hours
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/collection-tills/{id}/inboundCredit a collection till with a sandbox inbound cash-in+

Ledger cash-in to the collector account attributed to this till. Creates an inbound instant transfer with collectionTillId. Not a Coelsa credit.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARSopcional

Respuestas documentadas

200Idempotent replay
201Till credited
400Invalid payload
403Missing payments:write scope or finance.write permission
404Collection till not found
409Till disabled or reference conflict
422Risk decline
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/collection-tills/{id}/static-qrIssue the till-owned static QR of a collection till+

Own Cimbra contract. Mints one cimbra:qr:static:v1 owned by this till. The payload never changes. Paying it attributes the transfer to collectionTillId. If closedAmountOnly is true, a pending sale order is required. Not interoperable, EMVCo, PCT or a BIND caja QR.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201Till static QR issued
400Extra keys rejected
403Missing payments:write scope or finance.write permission
404Collection till not found
409Till disabled or QR already issued
Ver contrato OpenAPI 3.1 original ↗

ECHEQ

8 operaciones
GET/api/v1/echeqsList sandbox electronic checks+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200ECHEQ page
403Missing transfers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqsIssue a sandbox ECHEQ against an Argentine ARS account+

Payload format cimbra:echeq:v1 is not a CMC7 or Coelsa identifier. Discount, custody, USD and chamber clearing return 422. Only current-account holders can issue real ECHEQ.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

drawerAccountIdbodystring (uuid)requerido
externalReferencebodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido
currencybodyARS | USDopcional
beneficiaryNamebodystringrequerido
beneficiaryTaxIdbodystringrequerido
paymentDatebodystring (date)opcional
toOrderbodybooleanopcional
discountbodybooleanopcional
custodybodybooleanopcional
clearingbodycoelsa | camaraopcional

Respuestas documentadas

200Idempotent replay
201ECHEQ issued
400Invalid payload
403Missing transfers:write scope or finance.write permission
422Discount
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/echeqs/{id}Retrieve a sandbox ECHEQ+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200ECHEQ
403Missing transfers:read scope or console role
404ECHEQ not found
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqs/{id}/acceptAccept a sandbox ECHEQ as the current beneficiary+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
taxIdbodystringrequerido

Respuestas documentadas

200Idempotent replay
201ECHEQ accepted
400Invalid payload
403Missing transfers:write scope or finance.write permission
404ECHEQ not found
409ECHEQ is not acceptable
422Holder or tax mismatch
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqs/{id}/cancelCancel an issued sandbox ECHEQ before acceptance+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201ECHEQ cancelled
403Missing transfers:write scope or finance.write permission
404ECHEQ not found
409ECHEQ is not cancellable
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqs/{id}/depositDeposit a sandbox ECHEQ into a Cimbra account+

Settles immediately on the Cimbra ledger. Deposit to CBU/CVU/Coelsa returns 422. Insufficient drawer funds mark the ECHEQ rejected.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
taxIdbodystringrequerido
destinationKindbodycimbra_account | cbu | cvu | coelsaopcional
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201ECHEQ deposited or rejected for NSF
400Invalid payload
403Missing transfers:write scope or finance.write permission
404ECHEQ not found
409ECHEQ is not depositable
422Not due
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqs/{id}/endorseEndorse an accepted to-order sandbox ECHEQ+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

beneficiaryNamebodystringrequerido
beneficiaryTaxIdbodystringrequerido
discountbodybooleanopcional

Respuestas documentadas

200Idempotent replay
201ECHEQ endorsed
400Invalid payload
403Missing transfers:write scope or finance.write permission
404ECHEQ not found
409ECHEQ is not endorsable
422Not to order or discount requested
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/echeqs/{id}/returnReturn an accepted or endorsed sandbox ECHEQ before deposit+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201ECHEQ returned
403Missing transfers:write scope or finance.write permission
404ECHEQ not found
409ECHEQ is not returnable
Ver contrato OpenAPI 3.1 original ↗

Wallets

10 operaciones
GET/api/v1/wallet-programsList native wallet programs+

Tenant-scoped white-label wallet programs. Branding is stored configuration, not a consumer app or custodial license.

Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Respuestas documentadas

200Wallet program list
403Missing wallets:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/wallet-programsCreate a tenant wallet program+

Owner/Admin configure display name, currencies and pocket kinds. Pockets always include available and map to product ledger accounts.

Autenticación
Sesión o API key
Scope S2S
wallets:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
displayNamebodystringrequerido
supportUrlbodyobject (uri)opcional
termsUrlbodyobject (uri)opcional
accentColorbodyobjectopcional
defaultCurrencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
allowedCurrenciesbodyARS | USD | MXN | COP | BRL | CLP | PEN[]opcional
pocketKindsbodyavailable | pending | rewards[]opcional

Respuestas documentadas

200Idempotent replay
201Wallet program created
400Invalid program payload
403Missing wallets:write scope or wallets.program.manage permission
409Duplicate name or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/wallet-programs/{id}Retrieve a wallet program+
Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Wallet program
404Wallet program not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/walletsList customer wallets with cursor pagination+
Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Wallet page
403Missing wallets:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/walletsOpen a customer wallet with ledger-backed pockets+

Creates one product account per program pocket kind. Does not custody real funds or issue an end-user app.

Autenticación
Sesión o API key
Scope S2S
wallets:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

programIdbodystring (uuid)requerido
customerIdbodystring (uuid)requerido
externalReferencebodystringrequerido

Respuestas documentadas

200Idempotent replay
201Wallet and pockets created
400Invalid wallet payload
403Missing wallets:write scope or finance.write permission
404Program or customer not found in tenant
409Duplicate customer/program
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/wallets/{id}Retrieve a wallet and its pockets+
Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Wallet with pockets
404Wallet not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/wallets/{id}/lifecycleList append-only wallet lifecycle events+
Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Lifecycle events
404Wallet not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/wallets/{id}/lifecycleFreeze, unfreeze or close a wallet+

Frozen and closed wallets mark pocket accounts inactive. Closing requires zero available balance and no active holds.

Autenticación
Sesión o API key
Scope S2S
wallets:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

statusbodyactive | frozen | closedrequerido
reasonbodyuser_request | internal_control | suspected_fraud | review_cleared | customer_request | compliancerequerido

Respuestas documentadas

200Lifecycle event created or replayed
403Missing wallets:write scope or finance.write permission
404Wallet not found in tenant
409Invalid transition
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/wallets/{id}/pocketsList wallet pockets with ledger balances+
Autenticación
Sesión o API key
Scope S2S
wallets:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Pockets with derived balances
404Wallet not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/wallets/{id}/transfersMove balance between pockets of the same wallet+

Resolves pocket IDs to product accounts and executes a native book transfer with the same risk, holds and transfer.create maker/checker policy.

Autenticación
Sesión o API key
Scope S2S
wallets:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
sourcePocketIdbodystring (uuid)requerido
destinationPocketIdbodystring (uuid)requerido
descriptionbodystringrequerido
amountbodystring | numberrequerido

Positive decimal major-unit amount. Prefer a string to avoid floating-point serialization.

currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Pocket transfer settled or placed in risk review
202Maker/checker policy is active and a human approval is pending
400Invalid payload or same source and destination
403Missing wallets:write scope or finance.write permission
404Wallet or pocket not found in tenant
409Wallet inactive
422Insufficient available balance or risk decline
Ver contrato OpenAPI 3.1 original ↗

Cards

10 operaciones
GET/api/v1/card-programsList tenant card programs+

Returns native Cimbra program definitions. No network, sponsor or competitor integration is implied.

Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Respuestas documentadas

200Card programs
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/card-programsCreate an immutable card issuing program definition+

Session users must be owner or admin. API keys require cards:write. Name uniqueness is enforced per tenant under a transaction lock.

Autenticación
Sesión o API key
Scope S2S
cards:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
productbodydebit | credit | prepaidrequerido
formatsbodyvirtual | physical[]requerido
defaultCurrencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido

Respuestas documentadas

200Idempotent replay
201Program created
409Idempotency mismatch or duplicate program name
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/card-programs/{id}Retrieve a tenant card program+
Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Card program
404Program not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/cardsList cards with cursor pagination+
Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Card page
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/cardsIssue a native sandbox card from a program+

Physical instruments start in created and require activation; virtual instruments start active. Only last4 is generated and returned. Cimbra never creates or exposes PAN or CVV in this sandbox.

Autenticación
Sesión o API key
Scope S2S
cards:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
programIdbodystring (uuid)opcional
productbodydebit | credit | prepaidopcional
formatbodyvirtual | physicalopcional

Respuestas documentadas

200Idempotent replay
201Card issued
404Account not found in tenant
409Idempotency key was already used with a different payload
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/cards/{id}Retrieve a card by ID+
Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Card
404Card not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/cards/{id}/controlsRetrieve the current version of card controls+
Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Latest control version
404Card not found in tenant
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/cards/{id}/controlsAppend a complete new version of card controls+

Limits use decimal major-unit strings at the boundary and BIGINT minor units in storage. Control versions are append-only; this sandbox records policy but does not claim network authorization enforcement.

Autenticación
Sesión o API key
Scope S2S
cards:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
perTransactionLimitbodyobjectrequerido
dailyLimitbodyobjectrequerido
monthlyLimitbodyobjectrequerido
allowedChannelsbodyecommerce | contactless | chip | magstripe | atm[]requerido
allowedMccsbodystring[]requerido
blockedMccsbodystring[]requerido
statusbodyactive | inactiverequerido

Respuestas documentadas

200New control version created or replayed idempotently
404Card not found in tenant
409Currency mismatch or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/cards/{id}/lifecycleList the append-only lifecycle of a card+
Autenticación
Sesión o API key
Scope S2S
cards:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Lifecycle events ordered newest first
404Card not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/cards/{id}/lifecycleApply a validated card lifecycle transition+

Valid transitions depend on the current state. Terminated is irreversible. Every transition is tenant-scoped, idempotent, audited and emitted as a webhook event.

Autenticación
Sesión o API key
Scope S2S
cards:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

statusbodyactive | frozen | terminatedrequerido
reasonbodyactivation | user_request | internal_control | suspected_fraud | review_cleared | lost | stolen | damaged | customer_request | expiredrequerido

Respuestas documentadas

200Transition applied or replayed idempotently
404Card not found in tenant
409Invalid transition
Ver contrato OpenAPI 3.1 original ↗

Servicios y pagos recurrentes

15 operaciones
GET/api/v1/bill-paymentsList bill-payment, top-up and gift-card orders+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Respuestas documentadas

200Tenant orders
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/bill-paymentsPay an obligation or execute a top-up+

Uses the canonical account, double-entry ledger, risk evaluation, holds and settlement path. A review response remains pending until its hold is captured or released.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
billerIdbodystring (uuid)requerido
obligationIdbodystring (uuid)opcional
destinationReferencebodystringopcional
amountbodystringopcional

Respuestas documentadas

200Idempotent replay
201Order created
403Missing payments:write scope or finance.write permission
409Currency
422Insufficient balance
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/bill-payments/{id}Retrieve a bill-payment or top-up order+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Bill-payment order
404Order not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/bill-payments/{id}/reverseReverse a settled bill-payment or top-up order+

Creates a compensating ledger transaction and reopens a linked obligation; financial postings are never destructively mutated.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Order reversed or idempotently replayed
404Order not found in tenant
409Order state or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/billersList the tenant biller and top-up catalog+

Returns Cimbra-owned catalog records. It never proxies or simulates a competitor or external biller response.

Autenticación
Sesión o API key
Scope S2S
billers:read
Content-Type
Sin body

Respuestas documentadas

200Tenant biller catalog
403Missing billers:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/billersRegister a directly contracted or internal sandbox biller+

Owner/Admin only for sessions. The record is tenant-scoped, idempotent, audited and emitted as an event.

Autenticación
Sesión o API key
Scope S2S
billers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

codebodystringrequerido
namebodystringrequerido
countrybodystringrequerido
categorybodyutilities | telecom | tax | education | health | insurance | transport | entertainment | otherrequerido
serviceTypebodybill_payment | mobile_topup | gift_cardrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
amountModebodyexact | range | fixedrequerido

bill_payment requires exact; top-ups and gift cards require range or fixed.

minAmountbodystringopcional
maxAmountbodystringopcional
contractReferencebodystringopcional

Respuestas documentadas

200Idempotent replay
201Biller created
403Missing billers:write scope or billers.manage permission
409Duplicate code or idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/billers/{id}Retrieve a tenant biller+
Autenticación
Sesión o API key
Scope S2S
billers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Biller
404Biller not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/billers/{id}/obligationsList debts issued by a tenant biller+

An optional raw subscriber reference is normalized and hashed inside the tenant boundary; only its last four characters are returned.

Autenticación
Sesión o API key
Scope S2S
billers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
subscriberReferencequerystringopcional

Subscriber identifier used only to calculate a tenant-scoped digest.

Respuestas documentadas

200Biller obligations
404Biller not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/billers/{id}/obligationsIssue a debt for a bill-payment biller+

Direct originator ingestion only. Cimbra persists the canonical obligation and never fabricates an external debt query.

Autenticación
Sesión o API key
Scope S2S
billers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
subscriberReferencebodystringrequerido

Normalized and hashed tenant-locally; only the last four characters are exposed.

amountbodystringrequerido
dueAtbodystring (date-time)requerido
descriptionbodystringrequerido

Respuestas documentadas

200Idempotent replay
201Obligation issued
403Missing billers:write scope or billers.manage permission
409External reference conflict or idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/billers/{id}/statusActivate or suspend a biller+

Owner/Admin only for sessions. Lifecycle changes are idempotent, audited and emitted as events.

Autenticación
Sesión o API key
Scope S2S
billers:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

actionbodyactivate | suspendrequerido

Respuestas documentadas

200Biller lifecycle updated or replayed
404Biller not found in tenant
409Idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/recurring-mandatesList recurring payment mandates+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Respuestas documentadas

200Tenant mandates
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/recurring-mandatesCreate a weekly or monthly payment mandate+

Persists consent evidence, limits, cadence and retry policy. It does not claim homologated direct debit or a live biller rail.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
billerIdbodystring (uuid)requerido
subscriberReferencebodystringrequerido
frequencybodyweekly | monthlyrequerido
amountbodystringopcional

Required for mobile_topup and gift_card; omitted for debt-based bill_payment mandates.

amountLimitbodystringrequerido
consentReferencebodystringrequerido
consentedAtbodystring (date-time)requerido
nextChargeAtbodystring (date-time)requerido
maxRetriesbodyintegeropcional

Respuestas documentadas

200Idempotent replay
201Mandate created
403Missing payments:write scope or finance.write permission
409Biller/account state or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/recurring-mandates/{id}Retrieve a recurring payment mandate+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Recurring mandate
404Mandate not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/recurring-mandates/{id}/executionsList execution attempts for a recurring mandate+

Returns sandbox charge attempts (settled, skipped, failed). Does not imply a live direct-debit rail.

Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
limitqueryintegeropcional

Respuestas documentadas

200Mandate executions
404Mandate not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/recurring-mandates/{id}/statusPause, resume or cancel a recurring mandate+

Lifecycle actions are tenant-scoped, idempotent, audited and emitted as webhook events. Cancelled is terminal.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

actionbodypause | resume | cancelrequerido

Respuestas documentadas

200Mandate lifecycle updated or replayed
404Mandate not found in tenant
409Invalid lifecycle transition or idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗

Payments y transfers

7 operaciones
POST/api/v1/paymentsCreate a cash-in or cash-out against an account+

Posts to the tenant ledger settlement account. When payment.create maker/checker is enabled, returns 202 with a pending approval instead of settling immediately.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

accountIdbodystring (uuid)requerido
directionbodycash_in | cash_outrequerido
counterpartybodystringrequerido
descriptionbodystringrequerido
amountbodystringrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Payment created
202Pending maker/checker approval
404Account not found in tenant
409Currency mismatch or inactive account
422Insufficient available balance or risk declined
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payments/{id}Retrieve a cash-in or cash-out by ID+
Autenticación
Sesión o API key
Scope S2S
payments:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Payment
404Payment not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payments/{id}/reverseReverse a settled cash-in or cash-out with compensating ledger postings+

Canonical payment reversal. When payment.reverse maker/checker is enabled, returns 202 with a pending approval instead of posting compensation immediately. Generic transfer reverse returns 409 payment_reverse_required for cash movements.

Autenticación
Sesión o API key
Scope S2S
payments:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay
201Payment reversed
202Pending maker/checker approval
403Missing payments:write scope or finance.write permission
404Payment not found in tenant
409Payment not settled
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/transfersList transfers with cursor pagination+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Transfer page
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/transfersCreate an idempotent sandbox transfer+

When the tenant enables transfer dual control, this returns 202 without reserving funds. A different owner/admin with MFA must approve in a human session; balance and risk are re-evaluated atomically at approval time.

Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

counterpartybodystringrequerido
descriptionbodystringrequerido
amountbodystring | numberrequerido

Decimal major-unit amount. Prefer a string to avoid floating-point serialization.

currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Transfer created
202Transfer dual-control policy is active and a human approval request is pending
400Invalid payload or missing idempotency key
401Authentication required
403Role does not allow mutation
409Idempotency mismatch or prior approval is no longer actionable
422Insufficient available balance, risk decline or failed approved execution
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/transfers/{id}Retrieve a transfer by ID+
Autenticación
Sesión o API key
Scope S2S
transfers:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Transfer
404Transfer not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/transfers/{id}/reverseReverse a settled transfer with a compensating journal+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Existing reversal returned
201Reversal posted
404Original transfer not found
409Transfer is not reversible
Ver contrato OpenAPI 3.1 original ↗

Payouts

10 operaciones
GET/api/v1/payout-batchesList payout batches with per-item results+
Autenticación
Sesión o API key
Scope S2S
payouts:read
Content-Type
Sin body

Respuestas documentadas

200Tenant payout batches
403Missing payouts:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payout-batchesCreate an immutable payout batch draft+

Accepts 1-100 items. Every beneficiary, account and currency is validated inside the tenant before persistence.

Autenticación
Sesión o API key
Scope S2S
payouts:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

sourceAccountIdbodystring (uuid)requerido
externalReferencebodystringrequerido
descriptionbodystringrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
scheduledForbodystring (date-time)opcional

Optional start time

processBeforebodystring (date-time)opcional

Optional processing deadline strictly after the effective start.

itemsbodyobject[]requerido

Respuestas documentadas

200Idempotent replay
201Immutable draft created
403Missing payouts:write scope or finance.write permission
409Account
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payout-batches/{id}Retrieve a payout batch and all item results+
Autenticación
Sesión o API key
Scope S2S
payouts:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Payout batch
404Batch not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payout-batches/{id}/cancelCancel a draft or scheduled payout batch+

Pending approvals are cancelled through the approval request. Processing and terminal batches cannot be cancelled destructively.

Autenticación
Sesión o API key
Scope S2S
payouts:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Batch cancelled or idempotently replayed
409Batch is no longer directly cancellable
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payout-batches/{id}/resultDownload the real per-item payout result file+

CSV contains protected beneficiary data, amounts, transaction links, terminal/current states and failure codes from the sandbox worker.

Autenticación
Sesión o API key
Scope S2S
payouts:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200UTF-8 CSV result file
403Missing payouts:read scope or console role
404Batch not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payout-batches/{id}/submitSubmit a payout batch for approval, scheduling or execution+

Returns 202. When dual control is enabled, a different Owner/Admin with MFA must authorize the batch. Otherwise a leased worker processes each item independently through risk and the ledger.

Autenticación
Sesión o API key
Scope S2S
payouts:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Idempotent replay of a terminal result
202Approval pending
403Missing payouts:write scope or finance.write permission
409Invalid state
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payout-beneficiariesList tenant-scoped payout beneficiaries+

Returns only a protected destination type and last four characters; the original destination is never returned.

Autenticación
Sesión o API key
Scope S2S
payouts:read
Content-Type
Sin body

Respuestas documentadas

200Beneficiary catalog
403Missing payouts:read scope or console role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payout-beneficiariesCreate a protected payout beneficiary+

Owner/Admin only for sessions. Cimbra persists a tenant-scoped digest and last four characters, not the raw destination.

Autenticación
Sesión o API key
Scope S2S
payouts:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

externalReferencebodystringrequerido
namebodystringrequerido
entityTypebodyindividual | businessrequerido
countrybodystringrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
destinationTypebodylocal_account | alias | iban | clabe | pix_keyrequerido
destinationbodystringrequerido

Converted to a tenant-scoped one-way digest before persistence.

bankCodebodystringopcional

Respuestas documentadas

200Idempotent replay
201Beneficiary created
403Missing payouts:write scope or payouts.beneficiaries.manage permission
409Duplicate reference/destination or idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/payout-beneficiaries/{id}Retrieve one payout beneficiary+
Autenticación
Sesión o API key
Scope S2S
payouts:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Protected beneficiary
404Beneficiary not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/payout-beneficiaries/{id}/statusActivate or suspend a payout beneficiary+
Autenticación
Sesión o API key
Scope S2S
payouts:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

actionbodyactivate | suspendrequerido

Respuestas documentadas

200Beneficiary lifecycle updated or replayed
403Missing payouts:write scope or beneficiary-management permission
409Idempotency mismatch
Ver contrato OpenAPI 3.1 original ↗

Ledger y holds

3 operaciones
POST/api/v1/holds/{id}/captureCapture an active hold and post its financial journal+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Hold captured
404Hold not found
409Hold already resolved or linked to an open risk case protected by dual approval
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/holds/{id}/releaseRelease an active hold without posting a financial journal+
Autenticación
Sesión o API key
Scope S2S
transfers:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Hold released
404Hold not found
409Hold already resolved or linked to an open risk case protected by dual approval
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/ledgerRead currency-isolated balances, journals and active holds+
Autenticación
Sesión o API key
Scope S2S
ledger:read
Content-Type
Sin body

Respuestas documentadas

200Ledger snapshot
401Authentication required
Ver contrato OpenAPI 3.1 original ↗

Risk

14 operaciones
GET/api/v1/riskList system policies, tenant rules, evaluations and cases+
Autenticación
Sesión o API key
Scope S2S
risk:read
Content-Type
Sin body

Respuestas documentadas

200Tenant-scoped risk operational state
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/cases/{id}/resolveResolve a case and capture or release its linked hold+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

resolutionbodyapproved | declinedrequerido
notebodystringrequerido

Respuestas documentadas

200Case and hold resolved idempotently when direct execution is allowed
202Dual-control policy is active and an approval request is pending
409Case or hold already resolved differently
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/evaluationsRun and persist an explainable risk decision+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

operationTypebodytransfer | cash_in | cash_outrequerido
amountbodystringrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
counterpartybodystringrequerido
signalsbodyobjectopcional

Respuestas documentadas

200Idempotent replay
201Evaluation persisted; review or decline also creates a case
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/evaluations/{id}/outcomesAppend a confirmed legitimate or fraud outcome to an evaluation+

Corrections are immutable revisions and must identify the active outcome being superseded. Raw device and identity references are never returned.

Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

labelbodylegitimate | fraudrequerido
fraudTypebodyaccount_takeover | identity_fraud | scam | stolen_instrument | merchant_fraud | otheropcional
lossAmountbodystringopcional
currencybodyARS | USD | MXN | COP | BRL | CLP | PENopcional
notebodystringopcional
supersedesOutcomeIdbodystring (uuid)opcional

Respuestas documentadas

200Idempotent replay
201Confirmed outcome appended
404Evaluation not found in tenant
409Active outcome exists or the specified revision is stale
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/risk/evaluations/{id}/step-up-challengesList OTP step-up challenges for one risk evaluation+

Returns lifecycle metadata only. Credentials, hashes and encrypted values are never exposed by reads.

Autenticación
Sesión o API key
Scope S2S
risk:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Tenant-scoped challenge history
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/evaluations/{id}/step-up-challengesCreate a client-managed OTP challenge for an evaluation in review+

Cimbra generates and protects the OTP. The credential is returned only by this authenticated create request and its identical replay while pending; it is absent from lists, audit events and webhooks. This is a rail-agnostic sandbox control, not 3DS or an ACS.

Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

methodbodystringopcional
deliverybodystringopcional
expiresInSecondsbodyintegeropcional
maxAttemptsbodyintegeropcional

Respuestas documentadas

200Idempotent replay while pending; terminal replays return a null credential
201Challenge created; credential must be delivered by the integrator through its approved channel
404Evaluation not found in tenant
409Evaluation is not in review or already has a pending challenge
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/evaluations/{id}/step-up-challenges/{challengeId}/verifyVerify one OTP attempt under lock and persist its result+

Attempts are append-only, idempotent and limited. A successful step-up becomes evidence for the risk case but never bypasses case resolution or maker/checker policy.

Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
challengeIdpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

credentialbodystringrequerido

Respuestas documentadas

200Attempt persisted; verified indicates whether the credential matched
404Evaluation or challenge not found in tenant
409Idempotency-Key payload mismatch
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/listsAdd a tenant-scoped counterparty, device or identity decision-list entry+

The subject is converted to a tenant-scoped one-way digest before persistence; only a digest-derived preview is returned.

Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

subjectTypebodycounterparty | device | identityrequerido
subjectValuebodystringrequerido
categorybodyallow | watch | blockrequerido
reasonbodystringrequerido
expiresAtbodystring (date-time)opcional

Respuestas documentadas

200Idempotent replay
201List entry created
409An active entry already exists for this subject
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/risk/lists/{id}Disable an active tenant risk-list entry+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Entry disabled
404Entry not found or already disabled
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/rulesCreate the first active champion of a tenant risk-policy family+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
kindbodyamount_threshold | velocity_count | counterparty_matchrequerido
operationTypebodyany | transfer | cash_in | cash_outrequerido
scoreDeltabodyintegerrequerido
actionbodyscore | review | declinerequerido
prioritybodyintegeropcional
configurationbodyobjectrequerido

Respuestas documentadas

200Idempotent replay
201Rule created and activated
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/risk/rules/{id}Disable an active tenant rule+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Rule disabled
404Rule not found or already disabled
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/rules/{id}/promoteAtomically promote a challenger and archive its previous champion+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Promotion completed or replayed idempotently
404Candidate policy not found in this tenant
409Candidate is not an active challenger
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/rules/{id}/versionsCreate an immutable challenger version in an existing policy family+
Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
kindbodyamount_threshold | velocity_count | counterparty_matchrequerido
operationTypebodyany | transfer | cash_in | cash_outrequerido
scoreDeltabodyintegerrequerido
actionbodyscore | review | declinerequerido
prioritybodyintegeropcional
configurationbodyobjectrequerido

Respuestas documentadas

200Idempotent replay
201Challenger version created without affecting live decisions
404Base policy not found in this tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/risk/simulationsCompare a challenger against live champions without changing production decisions+

Accepts up to 50 samples and persists only aggregate decision summaries, never the raw sample payload.

Autenticación
Sesión o API key
Scope S2S
risk:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

candidateRuleIdbodystring (uuid)requerido
samplesbodyobject[]requerido

Respuestas documentadas

200Idempotent replay
201Aggregate baseline and candidate comparison persisted
409Candidate is not an active challenger
Ver contrato OpenAPI 3.1 original ↗

Disputas

4 operaciones
GET/api/v1/disputesList disputes and eligible settled debits+

Returns tenant-scoped native Cimbra disputes plus debits that remain eligible under the 90-day sandbox window.

Autenticación
Sesión o API key
Scope S2S
disputes:read
Content-Type
Sin body

Respuestas documentadas

200Disputes and eligible transactions
403Missing disputes:read scope or role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/disputesOpen a partial or full dispute for a settled debit+

Creates one dispute per transaction. The original transaction and postings remain immutable. A requested provisional credit is posted only when review begins.

Autenticación
Sesión o API key
Scope S2S
disputes:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

transactionIdbodystring (uuid)requerido
reasonbodycard_not_present | duplicate | amount_mismatch | service_not_received | credit_not_processed | cash_not_received | otherrequerido
descriptionbodystringrequerido
amountbodystringrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
provisionalCreditRequestedbodybooleanopcional

Respuestas documentadas

200Idempotent replay
201Dispute opened atomically
409Transaction not presented
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/disputes/{id}Retrieve a dispute with its immutable timeline+
Autenticación
Sesión o API key
Scope S2S
disputes:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Dispute and ordered event timeline
404Dispute not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/disputes/{id}/eventsApply an allowed dispute lifecycle transition+

Validates the state machine, posts or compensates dispute credits in the double-entry ledger, and emits audit and webhook events. network_ready never means sent to a real card network.

Autenticación
Sesión o API key
Scope S2S
disputes:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

eventbodystart_review | mark_network_ready | resolve_won | resolve_lost | reject | cancelrequerido
notebodystringrequerido

Respuestas documentadas

200Transition executed or idempotently replayed
202Dual-control policy is active and an approval request is pending
409Invalid transition
Ver contrato OpenAPI 3.1 original ↗

Conciliación y settlement

9 operaciones
GET/api/v1/reconciliationList reconciliation runs and exception queue+
Autenticación
Sesión o API key
Scope S2S
reconciliation:read
Content-Type
Sin body

Respuestas documentadas

200Tenant-scoped runs and exceptions
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/reconciliation/exceptions/{id}/resolveCorrect or explicitly accept an exception+
Autenticación
Sesión o API key
Scope S2S
reconciliation:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

resolutionbodycorrected | acceptedrequerido
notebodystringrequerido

Respuestas documentadas

200Exception resolved with actor and audit trail when direct execution is allowed
202Dual-control policy is active and an approval request is pending
409Exception already resolved differently
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/reconciliation/importsImport a canonical UTF-8 CSV and reconcile it atomically+

The raw file is parsed in memory and discarded. Cimbra persists its SHA-256 checksum, safe filename and normalized entries. Maximum size is 2 MB and 500 data rows.

Autenticación
Sesión o API key
Scope S2S
reconciliation:write
Content-Type
multipart/form-data

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
sourcebodybank | clearing | card_network | cash_network | internalrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
periodStartbodystring (date-time)requerido
periodEndbodystring (date-time)requerido
filebodystring (binary)requerido

Respuestas documentadas

200Idempotent replay
201CSV parsed and reconciliation persisted
400Invalid CSV, metadata or entries
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/reconciliation/runsCompare an external batch with Cimbra transactions+

Produces exact matches, amount mismatches, missing internal records and missing external records. The maximum period is 31 days and each request accepts at most 500 entries.

Autenticación
Sesión o API key
Scope S2S
reconciliation:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringrequerido
sourcebodybank | clearing | card_network | cash_network | internalrequerido
currencybodyARS | USD | MXN | COP | BRL | CLP | PENrequerido
periodStartbodystring (date-time)requerido
periodEndbodystring (date-time)requerido
entriesbodyobject[]requerido

Respuestas documentadas

200Idempotent replay
201Reconciliation run, items and exceptions persisted atomically
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/reconciliation/runs/{id}Retrieve a run with every compared item+
Autenticación
Sesión o API key
Scope S2S
reconciliation:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Run and item detail
404Run not found in tenant
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/settlementsList tenant settlement cycles+
Autenticación
Sesión o API key
Scope S2S
settlements:read
Content-Type
Sin body

Respuestas documentadas

200Settlement cycles
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/settlementsCreate one sandbox settlement cycle from a completed reconciliation+

This records and schedules an operational acknowledgement. It does not move real funds or connect to a rail.

Autenticación
Sesión o API key
Scope S2S
settlements:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

reconciliationRunIdbodystring (uuid)requerido
namebodystringrequerido
scheduledForbodystring (date-time)opcional

Respuestas documentadas

200Idempotent replay
201Settlement cycle created
409Reconciliation is open or already has a cycle
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/settlements/{id}Retrieve a tenant settlement cycle+
Autenticación
Sesión o API key
Scope S2S
settlements:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Settlement cycle
404Cycle not found
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/settlements/{id}/executeExecute a due sandbox settlement cycle idempotently+
Autenticación
Sesión o API key
Scope S2S
settlements:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Cycle settled directly, or an already executed approval replayed
202Dual-control policy is active and an approval request is pending
409Cycle is not due or was already executed differently
Ver contrato OpenAPI 3.1 original ↗

Operaciones

4 operaciones
GET/api/v1/operations/work-itemsList the unified risk, reconciliation and disputes work queue+

Returns tenant-scoped work items, assignable members, private document metadata, notes and evidence links for an operational console.

Autenticación
Sesión o API key
Scope S2S
operations:read
Content-Type
Sin body

Respuestas documentadas

200Unified operational work queue
401Authentication required
403Missing operations:read scope or role
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/operations/work-items/{type}/{id}Assign, prioritize, schedule or escalate an open work item+
Autenticación
Sesión o API key
Scope S2S
operations:write
Content-Type
application/json

Parámetros

typepathrisk-case | reconciliation-exception | disputerequerido
idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

assignedToUserIdbodyobject (uuid)opcional
prioritybodylow | medium | high | criticalopcional
dueAtbodyobject (date-time)opcional
escalatedbodybooleanopcional

Respuestas documentadas

200Work item updated or idempotently replayed
400Invalid update or assignee
404Work item not found in tenant
409Closed item or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/operations/work-items/{type}/{id}/evidenceLink a private compliance document to a work item+
Autenticación
Sesión o API key
Scope S2S
operations:write
Content-Type
application/json

Parámetros

typepathrisk-case | reconciliation-exception | disputerequerido
idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

documentIdbodystring (uuid)requerido

Respuestas documentadas

200Idempotent replay
201Evidence linked
404Work item or document not found in tenant
409Duplicate evidence or idempotency conflict
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/operations/work-items/{type}/{id}/notesAdd an immutable comment to a work item+
Autenticación
Sesión o API key
Scope S2S
operations:write
Content-Type
application/json

Parámetros

typepathrisk-case | reconciliation-exception | disputerequerido
idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

bodybodystringrequerido

Respuestas documentadas

200Idempotent replay
201Comment appended
404Work item not found in tenant
409Idempotency conflict
Ver contrato OpenAPI 3.1 original ↗

Aprobaciones

7 operaciones
GET/api/platform/approval-policyRead dual-control policies for money movement and sensitive operational decisions+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Effective policies for the current tenant role
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/platform/approval-policyEnable or disable dual approval as owner with MFA+

Enabling requires another owner/admin with MFA. Disabling is blocked while requests are pending.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

actionTypebodysettlement.execute | transfer.create | payment.create | payment.reverse | payout_batch.execute | risk.case.resolve | reconciliation.exception.resolve | dispute.resolveopcional
enabledbodybooleanrequerido
expiresInMinutesbodyintegerrequerido

Respuestas documentadas

200Policy updated and audit event emitted
403Owner role and MFA required
409No independent checker exists or requests remain pending
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/approvalsList maker/checker requests for the tenant+

API keys require approvals:read. Decisions remain session-only so an S2S credential cannot act as a human checker.

Autenticación
Sesión o API key
Scope S2S
approvals:read
Content-Type
Sin body

Respuestas documentadas

200Approval request history
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/approvals/{id}Retrieve one tenant approval request+
Autenticación
Sesión o API key
Scope S2S
approvals:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Approval request
404Approval request not found
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/approvals/{id}/approveApprove and atomically execute a protected operation+

Requires a different owner/admin with MFA and a console session. API keys are rejected.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

reasonbodystringopcional

Respuestas documentadas

200Request approved and the protected settlement
403MFA, checker role or human session required
409Maker attempted self-approval, request expired or is no longer pending
422Transfer approval was valid but current balance or risk prevented execution; request becomes failed
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/approvals/{id}/cancelCancel a pending request as its maker+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

reasonbodystringopcional

Respuestas documentadas

200Request cancelled and history preserved
403Only the maker may cancel
409Request expired or is no longer pending
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/approvals/{id}/rejectReject a protected operation with a reason+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

reasonbodystringrequerido

Respuestas documentadas

200Request rejected and operation left unapplied
403MFA, checker role or human session required
409Request expired or is no longer pending
Ver contrato OpenAPI 3.1 original ↗

Eventos y webhooks

6 operaciones
GET/api/v1/eventsList the immutable tenant audit log+
Autenticación
Sesión o API key
Scope S2S
events:read
Content-Type
Sin body

Parámetros

limitqueryintegeropcional
cursorquerystringopcional

Opaque cursor returned as nextCursor by the previous page.

Respuestas documentadas

200Cursor-paginated audit event list
400Invalid cursor or limit
401Authentication required
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/webhooksList endpoints, deliveries and attempt logs+
Autenticación
Sesión o API key
Scope S2S
webhooks:manage
Content-Type
Sin body

Respuestas documentadas

200Webhook operational state
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/webhooksRegister a public HTTPS webhook and return its signing secret once+
Autenticación
Sesión o API key
Scope S2S
webhooks:manage
Content-Type
application/json

Parámetros

namebodystringrequerido
urlbodystring (uri)requerido
eventTypesbodystring[]requerido

Respuestas documentadas

201Webhook created and signing secret returned once
400Invalid, private or non-HTTPS destination
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/v1/webhooks/{id}Disable an endpoint and cancel pending deliveries+
Autenticación
Sesión o API key
Scope S2S
webhooks:manage
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Webhook disabled
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/webhooks/{id}/rotateRotate a webhook signing secret+
Autenticación
Sesión o API key
Scope S2S
webhooks:manage
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Signing secret rotated and returned once
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/webhooks/deliveries/{id}/replayRequeue a webhook delivery while retaining prior attempt logs+
Autenticación
Sesión o API key
Scope S2S
webhooks:manage
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Delivery requeued
Ver contrato OpenAPI 3.1 original ↗

Compliance

9 operaciones
POST/api/v1/compliance/documentsUpload private compliance evidence+
Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
multipart/form-data

Parámetros

filebodystring (binary)requerido

Respuestas documentadas

201Document stored
400File must be PDF, JPG or PNG up to 5 MB with a valid signature
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/due-diligenceRead the tenant KYC/KYB policy, metrics, cases, customers and evidence inventory+

Returns Cimbra's native due-diligence orchestration state. It records evidence and controlled decisions but does not claim biometric, government-registry or regulated approval without a direct certified source.

Autenticación
Sesión o API key
Scope S2S
compliance:read
Content-Type
Sin body

Respuestas documentadas

200Tenant-scoped due-diligence state
401Authentication required
403compliance:read scope required for API keys
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/casesCreate a KYC or KYB case from the canonical customer type+

Individual customers produce KYC cases and business customers produce KYB cases. Only one non-expired active case is allowed per customer.

Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

customerIdbodystring (uuid)requerido
expiresInDaysbodyintegeropcional

Respuestas documentadas

201Case created with a versioned policy snapshot
400Invalid case input
404Customer not found in this tenant
409Active case exists or idempotency key payload differs
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/due-diligence/cases/{id}Retrieve one KYC/KYB case with parties, append-only checks and lifecycle events+
Autenticación
Sesión o API key
Scope S2S
compliance:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Hydrated due-diligence case
404Case not found in this tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/cases/{id}/cancelCancel a draft or in-review KYC/KYB case with a reason+
Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

notebodystringrequerido

Respuestas documentadas

200Case cancelled or idempotent result replayed
409Case is already terminal
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/cases/{id}/checksAppend an evidence-backed KYC/KYB check while the case is in draft+

Check history is append-only. New checks supersede older observations by check type without mutating prior evidence.

Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

checkTypebodyidentity_document | address | sanctions | pep | business_registry | beneficial_ownershiprequerido
sourcebodymanual_review | official_registry | internal_listrequerido
statusbodypending | passed | failed | reviewrequerido
resultCodebodystringrequerido
notebodystringrequerido
evidenceDocumentIdbodystring (uuid)opcional

Respuestas documentadas

201Check appended and audit event emitted
404Case or tenant-scoped evidence document not found
409Case is not draft or idempotency key payload differs
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/cases/{id}/decideApprove or reject an in-review case under mandatory maker-checker control+

Session-only decision. Requires an owner or admin with MFA who is different from the submitter. Approval also requires every latest required check to have passed.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

decisionbodyapprove | rejectrequerido
riskRatingbodylow | medium | high | prohibitedrequerido
notebodystringrequerido

Respuestas documentadas

200Independent decision recorded with audit and webhook events
403Owner or admin with MFA required; API keys are not accepted
409Self-decision
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/cases/{id}/partiesAppend a subject or KYB related party while the case is in draft+
Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

rolebodysubject | legal_representative | beneficial_owner | directorrequerido
namebodystringrequerido
taxIdbodystringrequerido

Only the final four alphanumeric characters are retained.

ownershipPercentagebodynumberopcional
pepDeclaredbodybooleanopcional

Respuestas documentadas

201Party appended; total beneficial ownership cannot exceed 100 percent
400Invalid party input
409Invalid role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/due-diligence/cases/{id}/submitSubmit a complete draft to the independent review queue+

Every required check must have a non-pending observation; KYB also requires a legal representative and beneficial owner.

Autenticación
Sesión o API key
Scope S2S
compliance:write
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

Respuestas documentadas

200Case moved to in_review or idempotent result replayed
409Requirements are missing
Ver contrato OpenAPI 3.1 original ↗

Soporte

8 operaciones
GET/api/ops/support/cases/{id}Retrieve any tenant support case with its conversation+

Restricted to platform operators provisioned in CIMBRA_PLATFORM_OPERATOR_EMAILS. Sessions only.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Support case and ordered messages
403Caller is not a provisioned platform operator
404Support case not found
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/ops/support/cases/{id}Move any tenant support case to another status+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
statusbodyopen | pending_cimbra | pending_tenant | resolved | closedrequerido

Respuestas documentadas

200Status updated
404Support case not found
Ver contrato OpenAPI 3.1 original ↗
POST/api/ops/support/cases/{id}/messagesAnswer a tenant support case as Cimbra+

Adds a platform-authored message and moves the case to pending_tenant.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
bodybodystringrequerido

Respuestas documentadas

201Platform reply added
409The case is closed or reached the message limit
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/support/casesList the tenant support cases with their status and message count+

Support cases are tenant-scoped. A viewer can read them; opening or replying requires an operator role or the support:write scope.

Autenticación
Sesión o API key
Scope S2S
support:read
Content-Type
Sin body

Respuestas documentadas

200Support cases ordered by last activity
401Authentication required
403Missing support:read scope or role
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/support/casesOpen a support case with its first message+

Limited to 20 open cases per tenant. Emits an audit event and a support.case_opened webhook.

Autenticación
Sesión o API key
Scope S2S
support:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

categorybodysandbox | api | console | compliance | commercial | otherrequerido
subjectbodystringrequerido
messagebodystringrequerido

Respuestas documentadas

200Idempotently replayed case
201Support case opened
400Invalid support case payload
409The tenant reached the open case limit
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/support/cases/{id}Retrieve a support case with its full conversation+
Autenticación
Sesión o API key
Scope S2S
support:read
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Support case and ordered messages
404Support case not found in tenant
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/support/cases/{id}Move a support case to another status+
Autenticación
Sesión o API key
Scope S2S
support:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

statusbodyopen | pending_cimbra | pending_tenant | resolved | closedrequerido

Respuestas documentadas

200Status updated or already in that status
400Invalid status
404Support case not found in tenant
Ver contrato OpenAPI 3.1 original ↗
POST/api/v1/support/cases/{id}/messagesAdd a tenant message to an open support case+

Moves the case to pending_cimbra. Closed and resolved cases reject new messages.

Autenticación
Sesión o API key
Scope S2S
support:write
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

bodybodystringrequerido

Respuestas documentadas

200Idempotently replayed message
201Message added
409The case is closed or reached the message limit
Ver contrato OpenAPI 3.1 original ↗

Plataforma y servicios

3 operaciones
PATCH/api/ops/leads/{id}Move a commercial lead through its pipeline status+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
statusbodynew | contacted | qualified | closedrequerido

Respuestas documentadas

200Lead status updated
404Lead not found
Ver contrato OpenAPI 3.1 original ↗
GET/api/ops/overviewPlatform superadmin overview across every tenant+

Restricted to platform operators provisioned in CIMBRA_PLATFORM_OPERATOR_EMAILS. Sessions only, never API keys.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Tenants
403Caller is not a provisioned platform operator
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/servicesReturn the service catalog, ownership boundaries and extraction debt+

Every table and data-access module belongs to exactly one domain service. Services run in a shared runtime until a documented volume or risk gate justifies extracting them, and the cross-service write debt is reported explicitly.

Autenticación
Sesión o API key
Scope S2S
platform:read
Content-Type
Sin body

Respuestas documentadas

200Service topology with per-service extraction readiness
403Missing platform:read scope or console role
Ver contrato OpenAPI 3.1 original ↗

Organización y credenciales

11 operaciones
GET/api/platform/accessList tenant members and invitation history for owner or admin+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200Effective organization access state
403Owner or admin role required
Ver contrato OpenAPI 3.1 original ↗
POST/api/platform/accessInvite an email to the tenant with an assignable role+

The invitation expires after seven days. A verified email is required before membership is accepted automatically.

Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

emailbodystring (email)requerido
rolebodyadmin | operator | viewerrequerido

Respuestas documentadas

201Invitation created or safely reissued
403Role hierarchy violation
409Email is already assigned or has another active invitation
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/platform/access/invitations/{id}Revoke a pending organization invitation+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Invitation revoked
409Invitation is no longer pending
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/platform/access/members/{id}Change a member role within the owner/admin hierarchy+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

idpathstring (uuid)requerido
rolebodyadmin | operator | viewerrequerido

Respuestas documentadas

200Role changed and audit event emitted
403Role hierarchy violation
409Owner or own role is protected
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/platform/access/members/{id}Remove a member from the tenant without deleting their identity+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200Membership removed and audit event emitted
403Role hierarchy violation
409Owner or own membership is protected
Ver contrato OpenAPI 3.1 original ↗
GET/api/platform/api-keysList safe API key metadata+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Respuestas documentadas

200API key list without secrets
Ver contrato OpenAPI 3.1 original ↗
POST/api/platform/api-keysCreate an S2S API key; the secret is returned once+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
application/json

Parámetros

namebodystringrequerido
scopesbodycustomers:read | customers:write | accounts:read | accounts:write | cards:read | cards:write | transfers:read | transfers:write | payments:read | payments:write | payouts:read | payouts:write | billers:read | billers:write | wallets:read | wallets:write | risk:read | risk:write | disputes:read | disputes:write | reconciliation:read | reconciliation:write | settlements:read | settlements:write | approvals:read | operations:read | operations:write | support:read | support:write | organization:read | organization:write | platform:read | ledger:read | events:read | compliance:read | compliance:write | webhooks:manage[]requerido
expiresInDaysbodyintegeropcional

Respuestas documentadas

201API key created and secret returned once
Ver contrato OpenAPI 3.1 original ↗
DELETE/api/platform/api-keys/{id}Revoke an API key immediately+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

200API key revoked
404Active key not found
Ver contrato OpenAPI 3.1 original ↗
POST/api/platform/api-keys/{id}/rotateAtomically replace and revoke an API key+
Autenticación
Sesión
Scope S2S
No aplica
Content-Type
Sin body

Parámetros

idpathstring (uuid)requerido

Respuestas documentadas

201Replacement key created and old key revoked
Ver contrato OpenAPI 3.1 original ↗
GET/api/v1/organizationRetrieve the tenant profile and member count+
Autenticación
Sesión o API key
Scope S2S
organization:read
Content-Type
Sin body

Respuestas documentadas

200Organization profile
403Missing organization:read scope or role
Ver contrato OpenAPI 3.1 original ↗
PATCH/api/v1/organizationUpdate the tenant display name or country+

Requires an owner or admin role, or the organization:write scope. Emits an audit event and an organization.updated webhook.

Autenticación
Sesión o API key
Scope S2S
organization:write
Content-Type
application/json

Parámetros

Idempotency-Keyheaderstringrequerido

Stable unique key for this logical write. Replays return the original resource; reusing it with a different payload returns 409.

namebodystringopcional
countrybodyAR | MX | CO | BR | CL | PEopcional

Respuestas documentadas

200Organization updated or unchanged
400Invalid organization payload
403Owner or admin role required
Ver contrato OpenAPI 3.1 original ↗

CHANGELOG

Cambios que ya están en el runtime.

Consola: ledger, cash-in/out y nav por capability

Ledger y Cash-in/out operan APIs reales; Book transfers queda separado. La navegación filtra por capability. El SDK agrega approvals.approve/reject/cancel. OpenAPI permanece en 194 operaciones.

Banco patrocinante operable en /ops

official_rail_connections suma negotiating, evidencia de sponsor (razón social, CUIT, contrato, safeguarding) y due diligence PSPCP. /ops opera PATCH /api/ops/rails/{id}. BIND Banco es candidato a entidad financiera patrocinante; bindX/BIND PSP siguen fuera del core. El adaptador documental no despacha fondos. OpenAPI permanece en 194 operaciones.

Movimientos sobre la API de transferencias

La consola deja el snapshot del dashboard y opera GET/POST /api/v1/transfers con detalle, paginación, export CSV y reversas compensatorias. Viewer lee; operator/admin/owner escriben. OpenAPI permanece en 194 operaciones.

Auditoría del tenant en la consola

La consola opera GET /api/v1/events: log append-only, paginado, filtrable por recurso y exportable. Todos los roles leen; no hay mutación. No es un SIEM. OpenAPI permanece en 194 operaciones.

Cuentas de producto en la consola

La consola opera GET/POST /api/v1/accounts y el statement de 30 días. Alta idempotente sobre un cliente del tenant, una moneda por cuenta y saldo derivado del ledger. Viewer lee; operator/admin/owner abren. No es CBU/CVU. OpenAPI permanece en 194 operaciones.

Padrón de clientes en la consola

La consola opera GET/POST /api/v1/customers con el mismo contrato del SDK: alta idempotente, last4 fiscal y detalle por id. Viewer lee; operator/admin/owner crean. El KYC/KYB sigue en Compliance. OpenAPI permanece en 194 operaciones.

Soporte, organización, superadmin y catálogo de servicios

API v1 de casos de soporte y perfil del tenant, /ops para operadores provisionados, /help y /status públicos, y GET /api/v1/services con fronteras de dominio verificadas. Runtime compartido: ningún servicio se declara standalone. OpenAPI pasa a 194 operaciones. BIND, Dock, tapi, Pismo, Pomelo y Wibond siguen siendo benchmarks.

Data room público y presupuesto Gate 1

GET /api/v1/live-readiness publica capitalPlan (USD 500, gastado 0, liveReadyAfterSpend=false). /investors muestra evidencia del sandbox sin clientes ni volumen inventados. El envelope no autoriza AWS pago, Coelsa, banco patrocinante ni Go Live. OpenAPI quedó en 179 operaciones en ese corte; el contrato vigente es 194.

QR estático del punto de recaudación

Un collection_till emite su propio cimbra:qr:static:v1 (issueStaticQr o POST /api/v1/collection-tills/{id}/static-qr) sin gastar el QR estático de la cuenta. closedAmountOnly exige una orden de venta pendiente. El pago imputa collectionTillId. El payload no se cancela: se deshabilita el punto. OpenAPI quedó en 179 operaciones en ese corte; el contrato vigente es 194. No es QR interoperable, EMVCo ni POS.

Devolución parcial de un link de cobro

POST /api/v1/payment-links/{id}/refund acepta amount y creditId opcionales. Vacío devuelve lo cobrado pendiente. Un parcial deja postings compensatorios sin mutar el asiento original. Un link CVU puede reabrirse si el neto queda por debajo del monto; internal, QR e inbound permanecen cerrados. GET embebe refunds y partiallyRefunded. OpenAPI sigue en 178 operaciones.

Ítems de checkout y créditos embebidos en el link

POST /api/v1/payment-links acepta items[] informativos (máx. 20). No controlan el monto ni sustituyen un carrito PCI. GET, list y pay embeben items, credits y partiallyCollected. successUrl, errorUrl y configuracionCheckout se rechazan. OpenAPI sigue en 178 operaciones.

Créditos parciales CVU y checkout público

POST /api/v1/payment-links/{id}/pay acepta amount sólo con cimbra_cvu. Se puede acreditar el restante, un parcial, varios créditos o más del monto. checkoutUrl apunta a /pay/{id} sin formulario de tarjeta. QR e internal siguen monto cerrado. collection.link_credited se emite en cada crédito que no completa el link.

Link de cobro asociado a deuda QR o till

POST /api/v1/payment-links acepta qrDebtId y collectionTillId. Los medios cimbra_qr y cimbra_cvu liquidan el QR de la deuda o el CVU del till. Pagar el QR también cierra el link. No hay checkout PCI, tarjeta ni QR de red.

Punto de recaudación Cimbra con CVU propio

POST /api/v1/collection-tills emite un CVU sandbox atribuido al till, no un segundo CVU de la cuenta cobradora. PATCH asigna alias de tenant, POST /inbound acredita el ledger y DELETE deshabilita el CVU. La transferencia interna al CVU queda con collectionTillId. No es caja BIND ni crédito Coelsa.

QR de deuda Cimbra

POST /api/v1/qr-debts crea una deuda con monto cerrado y un solo pago. Payload cimbra:qr:debt:v1. Exige CVU sandbox activo. DELETE la elimina y el QR no se vuelve a pagar. No es deuda BIND, EMVCo ni PCT Coelsa.

Orden de venta Cimbra sobre QR estático

POST /api/v1/qr-sale-orders fija un monto cerrado y un vencimiento sobre un QR estático activo. Una pendiente por QR; crear otra reemplaza la anterior. DELETE la elimina y el QR vuelve a monto abierto. No es caja BIND, EMVCo ni Transferencias 3.0.

QR estático Cimbra, reutilizable y sin riel ajeno

POST /api/v1/payment-qrs con kind=static emite cimbra:qr:static:v1. Exige un CVU sandbox activo, no vence, cobra monto abierto las veces que haga falta y admite un estático activo por cuenta. POST /api/v1/payment-qrs/{id}/cancel deja de cobrar. No es EMVCo, Transferencias 3.0 ni caja BIND.

Rieles oficiales y camino PSPCP fail-closed

GET /api/v1/live-readiness publica el catálogo de contrapartes BCRA/Coelsa/sponsor/PCI, el checklist PSPCP argentino y exige riel live más adaptador Cimbra para liveReady. El sandbox no despacha cámara. Marcar un producto Go Live no mueve fondos.

Eliminar CVU sandbox sin tocar la cuenta

DELETE /api/v1/rail-instruments/{id} deja el CVU y su alias inoperables. La cuenta ARS y el saldo permanecen. Un POST posterior de emisión reactiva el mismo CVU sandbox. No es una baja en Coelsa.

Asignar o cambiar alias de un CVU sandbox

PATCH /api/v1/rail-instruments/{id}/alias asigna o reemplaza el alias de un CVU ya emitido. La unicidad es del tenant, no un directorio nacional. Un cambio real queda limitado a una vez cada 24 horas; emitir el CVU o la primera asignación no arrancan esa ventana. Repetir el mismo alias responde 200 sin mover el reloj.

Readiness alineado a BIND, Pismo, Pomelo y tapi

GET /api/v1/live-readiness deja de inventar gates de software. Expone sandbox vs production como Pismo y BIND, las etapas Integración → Homologación → Go Live de Pomelo, y productos del catálogo público: consulta CBU/CVU/Alias, transferencias, DEBIN, ECHEQ, CVU, QR interoperable, cobro BIND PSP, issuing PCI/BIN y pago de servicios tapi. Production no tiene hostname. Ningún producto está en Go Live.

ECHEQ sandbox para Argentina

Emisión, aceptación, endoso, depósito interno, anulación y devolución previa. Payload cimbra:echeq:v1, CUIT AFIP y rechazo por fondos insuficientes. Descuento, custodia, USD y Coelsa responden 422. No es un cheque compensable en cámara.

Cobranzas sandbox para Argentina

Links de cobro con payload cimbra:link:v1, eco cerrado entre cuentas Cimbra, inbound ledger y devoluciones compensatorias. Tarjetas, POS y QR interoperable responden 422. No es adquirencia de red.

Pagos instantáneos sandbox para Argentina

Emisión de CVU 0009999, alias tenant-scoped, confirmación de titular, crédito interno o cash-out a settlement, débito interno, QR Cimbra dinámico, estático y de deuda con orden de venta y devoluciones compensatorias. No es Coelsa, DEBIN ni QR interoperable.

Wallets nativas con bolsillos ledger-backed

Programas tenant, wallets por customer, pockets mapeados a cuentas de producto, freeze/close, movimientos internos via book transfers, API, SDK, eventos y consola por rol. No custodia fondos ni publica una app de consumidor.

Book transfers y estados de cuenta nativos

Movimientos account-to-account con dos postings atómicos, saldo disponible, holds de riesgo, maker/checker, reversas compensatorias, API paginada, SDK, eventos y consola por rol.

Beneficiarios y payouts masivos nativos

Destinos protegidos por tenant, lotes inmutables de hasta 100 ítems, programación/deadline, maker-checker, worker con lease, riesgo/ledger por ítem, CSV de resultados, scopes, SDK y consola por rol.

Servicios, recargas y mandatos recurrentes nativos

Catálogo por tenant, obligaciones emitidas con referencia protegida, pagos y recargas conectados a ledger/riesgo/holds, reversas compensatorias, mandatos con consentimiento, límites, reintentos, scopes S2S, SDK, eventos y consola por rol.

KYC/KYB nativo y maker/checker obligatorio

Expedientes versionados con partes y beneficiarios finales, checks/evidencia append-only, expiración, scopes S2S, SDK de orquestación, webhooks y consola por rol. La decisión queda reservada a otro Owner/Admin con MFA y sesión humana.

Step-up OTP y SLO de decisión

Challenges client-managed con secreto cifrado y hasheado, expiración, intentos append-only, idempotencia, RBAC, auditoría y SDK. Riesgo publica p50/p95/p99 y cumplimiento medido; no se presenta como 3DS o ACS.

Disputas y chargebacks nativos

Disputas parciales con lifecycle explícito, créditos provisionales o definitivos en doble partida, compensaciones, evidencia, cola operativa, maker/checker, API, SDK y permisos por rol. network_ready no implica conexión a una red real.

Runtime verificable y métricas por período

El build valida el servidor standalone usado por OCI y el overview calcula ventanas reales de 7/30 días; los fallos de red o respuestas inválidas ya no dejan acciones bloqueadas.

Issuing nativo: programas, lifecycle y controles

Programas tenant, estados terminales, controles append-only por límites/canales/MCC, seis eventos, SDK y consola por rol; el sandbox no expone datos PCI ni afirma conexión a redes.

Doble control para decisiones operativas

Casos de riesgo, excepciones de conciliación y disputas admiten políticas independientes, revalidación atómica y protección contra bypass de holds o créditos.

Cola operativa con SLA y evidencia

Riesgo, conciliación y disputas comparten ownership, prioridad, vencimiento, escalamiento, comentarios y documentos privados mediante API, SDK y consola.

RBAC y sesiones consistentes

Una matriz canónica gobierna consola y API; 401 y 403 quedan diferenciados y las sesiones vencidas preservan el destino.

Maker/checker para transferencias y settlement

Solicitudes persistidas, separación de personas, MFA, expiración y revalidación transaccional antes de ejecutar.

Riesgo, conciliación y settlement nativos

Reglas, evaluaciones, casos, importación CSV, excepciones y ciclos sandbox conectados al ledger y a webhooks.

Versionado actual

La ruta mayor es /api/v1 y cada respuesta publica Cimbra-Version: 2026-09-01 y Cimbra-Environment. Live no está habilitado; el flip de entorno reutiliza este contrato.