Documentación de la API

Todo lo que tu ERP, tu CRM o tu core necesitan para operar sin entrar al portal: consultar cuentas y clientes, darlos de alta, seguir cada entrada, barrer saldo y originar salidas. Las decisiones que requieren una persona —aprobar, resolver excepciones, configurar— se siguen tomando en el portal.

Empezar

  1. 1

    Creá la credencial

    En API y webhooks, elegí sobre qué empresas opera y qué puede hacer. La llave se muestra una sola vez.

  2. 2

    Probá en el ambiente de pruebas

    Una empresa aparte con datos que no son reales. Las credenciales de pruebas solo la ven a ella.

  3. 3

    Registrá la dirección de avisos

    Para enterarte al instante de cada entrada, salida o cambio de cuenta, sin consultar en bucle.

Tu primera llamada

curl "https://conectademo.monetae.io/api/public/v1/accounts?limit=5" \
  -H "Authorization: Bearer <tu llave>"

Convenciones

Autenticación

Mandá la llave en Authorization: Bearer …. Cada llamada queda registrada a nombre de esa integración.

Empresa

Toda operación ocurre dentro de una empresa. Enviá company_id cuando la credencial abarca más de una; si abarca una sola, se asume.

Repetir sin duplicar

En las creaciones mandá Idempotency-Key: repetir la llamada con la misma llave devuelve el resultado original. En salidas y barridos es obligatoria.

Listados

Paginación por cursor: pedí limit y seguí con el next_cursor de la respuesta.

Montos y fechas

Los montos viajan como decimal en texto con su moneda; las fechas en ISO 8601 en UTC.

Identificadores

Cada recurso tiene su identificador propio. El número de cuenta virtual no es el identificador de la cuenta: sirve para recibir dinero.

Cuentas · 4

Saldos · 3

Clientes · 6

Recaudos · 2

Salidas · 5

Barridos · 4

Obligaciones · 6

Aplicaciones · 4

Webhooks · 7

Avisos automáticos (webhooks)

En lugar de consultar en bucle, registrá una dirección y Conecta te avisa. Cada aviso viaja firmado con el secreto del destino en la cabecera x-conecta-signature y se reintenta hasta seis veces con esperas crecientes si el destino falla. Un mismo hecho puede llegar más de una vez: descartá duplicados por event_id. El orden de llegada no está garantizado.

Verificar la firma antes de procesar

// La firma llega en la cabecera x-conecta-signature
const esperada = crypto
  .createHmac("sha256", SECRETO_DEL_DESTINO)
  .update(cuerpoCrudoDelAviso)
  .digest("hex");
// Compará con la cabecera antes de procesar el aviso

Transacciones entrantes

EventoNombreCuándo se envía
payin.receivedTransacción entrante recibidaLa plataforma recibió una transferencia entrante y la registró.
payin.review_requiredTransacción entrante que requiere revisiónLa entrada no pudo atribuirse automáticamente y quedó retenida en Suspense.
payin.creditedTransacción entrante acreditada a una cuentaEl dinero pasó de Suspense a una cuenta virtual concreta.
payin.redirectedTransacción entrante reatribuidaLa entrada se reatribuyó a otra cuenta virtual de la misma empresa.
payin.return_requestedDevolución solicitadaSe solicitó devolver la entrada: el monto queda bloqueado y todavía no sale.
payin.return_cancelledDevolución canceladaSe canceló la devolución antes de enviarla al riel; el dinero queda donde estaba.
payin.return_processingDevolución en procesoLa devolución se envió al riel: el monto pasó a Devoluciones en tránsito.
payin.returnedTransacción entrante devuelta al pagadorLa devolución se liquidó y el dinero salió del perímetro.
payin.return_failedDevolución fallidaEl riel no pudo devolver: el monto vuelve a Suspense y abre una revisión.

Transferencias salientes

EventoNombreCuándo se envía
payout.completedTransferencia saliente ejecutadaUna salida se ejecutó.
payout.failedTransferencia saliente fallidaUna salida falló.

Maestro de clientes

EventoNombreCuándo se envía
customer.createdCliente creadoSe dio de alta un cliente en el Maestro, junto con su cuenta virtual principal.

Cuentas virtuales

EventoNombreCuándo se envía
account.createdCuenta virtual creadaSe creó una cuenta virtual.
account.primary_changedCuenta principal del cliente cambiadaEl cliente pasó a tener otra cuenta virtual principal.
account.suspendedCuenta virtual suspendidaSe suspendió una cuenta.
account.reactivatedCuenta virtual reactivadaSe reactivó una cuenta.
account.fulfilledCuenta virtual cumplidaUna cuenta alcanzó su monto esperado.
account.expiredCuenta virtual vencidaUna cuenta venció.
account.closedCuenta virtual cerradaSe cerró una cuenta.

Obligaciones y aplicación de pagos

EventoNombreCuándo se envía
obligation.createdObligación creadaSe creó una obligación (pago único, plan de cuotas o cobro recurrente).
obligation.paidObligación completadaTodos los períodos de la obligación quedaron aplicados.
installment.paidCuota o período pagadoUn período quedó totalmente aplicado.
payment.allocatedPago aplicadoParte o todo un pago recibido se aplicó a una obligación.
payment.unapplied_balance_changedSaldo sin aplicar actualizadoCambió el saldo recibido que todavía no tiene destino económico.

Errores

Todo error responde con el mismo formato: code, message, el field que lo provocó cuando aplica, y un request_id para soporte. Los 4xx piden corregir la llamada; ante un 500 o un 503 reintentá con la misma llave de idempotencia.

CódigoHTTPCuándo ocurre
unauthenticated401Falta la cabecera Authorization.
invalid_credential401La llave no existe o no es válida.
credential_revoked401La llave fue revocada o venció su período de gracia.
permission_denied403La credencial no tiene el permiso que exige el endpoint.
company_not_allowed403La credencial no opera sobre esa empresa.
invalid_request400La petición no es utilizable; por ejemplo, un PATCH sin ningún campo que modificar.
invalid_parameter400Un dato enviado no cumple el formato esperado.
missing_parameter400Falta un dato obligatorio.
invalid_cursor400El cursor de paginación no es válido.
unsupported_version400Se pidió una versión de la API que no existe.
idempotency_key_required400El endpoint exige Idempotency-Key.
resource_not_found404El recurso no existe para esa empresa.
duplicate_reference409Ya existe un recurso con esa referencia externa.
resource_conflict409El recurso cambió de estado y la operación ya no aplica.
idempotency_key_reused409Misma llave con un cuerpo distinto.
request_in_progress409La misma llave está siendo procesada en este momento.
account_not_active422La cuenta no admite la operación en su estado actual.
account_lifecycle_closed422La cuenta está cerrada o archivada: reabrirla es una decisión del portal.
insufficient_funds422La cuenta origen no tiene saldo suficiente.
destination_not_registered422La cuenta bancaria destino no está registrada.
beneficiary_name_mismatch422El titular destino no coincide con la empresa.
amount_out_of_range422El monto supera los límites de la integración.
rail_not_enabled422El riel no está habilitado para esa empresa o corredor.
operation_not_available_via_api422La operación solo se puede realizar en el portal.
rate_limit_exceeded429Se superó el máximo de llamadas por minuto.
internal_error500Error inesperado; volvé a intentar con la misma llave de idempotencia.
service_unavailable503Servicio temporalmente no disponible; reintentá más tarde.