Docs / API Reference / Cobros
API Reference

Cobros

Cuentas por cobrar (CxC): registra el dinero que recibes de un cliente y aplícalo contra una o varias facturas a crédito (abono parcial o pago consolidado). Incluye reportes de cartera por antigüedad y estado de cuenta por cliente.

Autenticación

Todos los endpoints de este recurso requieren el header X-API-Key con una API key que tenga permisos sobre el recurso cobros. Igual que el resto de la API, el tenant se resuelve por la propia key (no hace falta X-Tenant-Id en integraciones vía API pública).

Registrar un cobro

POST /api/v1/cobros — Crea un cobro y sus aplicaciones a factura(s)

Body

Parámetro Tipo Descripción
cliente_id required integer Id del cliente (PersonaEmpresa con es_cliente=true).
fecha required datetime Fecha en que se recibió el dinero (ISO 8601).
medio required string Medio de pago — código de la Tabla 24 SRI (ej. '01' efectivo, '16' t. débito, '19' t. crédito).
monto required number Monto total del cobro. Debe cuadrar (±0.01) con la Σ de aplicaciones.monto_aplicado.
referencia optional string Referencia libre (n° de depósito, transferencia, etc). Máx 120 caracteres.
notas optional string Notas internas.
cuenta_dinero_id optional integer Cuenta de caja/banco donde ingresó el dinero (módulo de cajas y bancos, fase posterior).
sucursal_id optional integer Sucursal de trazabilidad. Si se omite, se infiere del usuario.
aplicaciones required array Mínimo 1 elemento. Cada uno: { factura_id, monto_aplicado }.

Forma de aplicaciones[]

Parámetro Tipo Descripción
factura_id required integer Factura a la que se aplica el pago. Debe estar AUTORIZADA.
monto_aplicado required number Monto aplicado a esa factura. No puede superar el saldo pendiente de la factura.
import { Emitoo } from "emitoo";

const client = new Emitoo(); // lee la API key de EMITOO_API_KEY

const cobro = await client.cobros.crear({
  cliente_id: 12,
  fecha: new Date().toISOString(),
  medio: "01",
  monto: 150.0,
  referencia: "DEP-88213",
  aplicaciones: [
    { factura_id: 177, monto_aplicado: 100.0 },
    { factura_id: 181, monto_aplicado: 50.0 },
  ],
});

Respuesta (201 Created)

{
  "id": 88,
  "fecha": "2026-07-06T15:00:00",
  "cliente_id": 12,
  "medio": "01",
  "monto": 150.0,
  "referencia": "DEP-88213",
  "notas": null,
  "cuenta_dinero_id": null,
  "anulado": false,
  "anulado_motivo": null,
  "anulado_en": null,
  "creado_en": "2026-07-06T15:00:03",
  "aplicaciones": [
    { "id": 101, "factura_id": 177, "monto_aplicado": 100.0 },
    { "id": 102, "factura_id": 181, "monto_aplicado": 50.0 }
  ]
}

Errores

Código Cuándo ocurre
404El cliente no existe, o alguna de las facturas referenciadas en aplicaciones no existe.
409Una factura no está AUTORIZADA, o el monto_aplicado de una línea supera su saldo pendiente.
422El medio no es un código válido de la Tabla 24 SRI, o Σ(aplicaciones) no cuadra con monto.

Listar cobros

GET /api/v1/cobros?cliente_id=&desde=&hasta=&limit=&offset= — Listado con filtros opcionales

Parámetro Tipo Descripción
cliente_id optional integer Filtra por cliente.
desde optional date Fecha inicial (inclusive).
hasta optional date Fecha final (inclusive).
limit optional integer Default 50.
offset optional integer Default 0.

Obtener un cobro

GET /api/v1/cobros/{id} — Detalle completo, con sus aplicaciones a factura

Anular un cobro

POST /api/v1/cobros/{id}/anular — Anula el cobro y revierte sus aplicaciones (el saldo de las facturas vuelve a subir)

Body

Parámetro Tipo Descripción
motivo required string Motivo de la anulación. Máx 300 caracteres.

Un cobro anulado no se puede volver a anular

Un segundo intento de anular el mismo cobro responde 409. Si necesitas corregir el monto o las facturas aplicadas, anula y crea un cobro nuevo.

Cartera por antigüedad

GET /api/v1/cobros/cartera — Saldo pendiente agrupado en buckets 0-30 / 31-60 / 61-90 / 90+ días

Los días se cuentan desde fecha_vencimiento de cada factura a crédito con saldo pendiente.

{
  "buckets": [
    { "dias": "0-30",  "total": 1240.50, "cantidad": 8 },
    { "dias": "31-60", "total": 430.00,  "cantidad": 3 },
    { "dias": "61-90", "total": 0,       "cantidad": 0 },
    { "dias": "90+",   "total": 210.00,  "cantidad": 1 }
  ],
  "total_general": 1880.50
}

Estado de cuenta de un cliente

GET /api/v1/cobros/estado-cuenta/{cliente_id} — Facturas, cobros y notas de crédito aplicadas, con saldo corrido

{
  "cliente_id": 12,
  "cliente_razon_social": "ACME S.A.",
  "cliente_identificacion": "0991234567001",
  "lineas": [
    {
      "factura_id": 177,
      "numero_comprobante": "001-001-000000177",
      "fecha_emision": "2026-07-03T10:12:34",
      "fecha_vencimiento": "2026-08-02",
      "total": 150.0,
      "total_cobrado": 100.0,
      "total_nc_aplicadas": 0,
      "saldo": 50.0
    }
  ],
  "total_facturado": 150.0,
  "total_cobrado": 100.0,
  "total_nc": 0,
  "saldo_pendiente": 50.0
}

Exportar a CSV

GET /api/v1/cobros/estado-cuenta/{cliente_id}?format=csv — Mismo reporte, como archivo CSV descargable

Exportar a PDF

GET /api/v1/cobros/estado-cuenta/{cliente_id}/pdf — El mismo reporte, como PDF (Content-Type: application/pdf)

Eventos

Este módulo emite los siguientes eventos:

Evento Cuándo se dispara
cobro.registradoSe creó un cobro (POST /cobros).
cobro.anuladoSe anuló un cobro (POST /cobros/{id}/anular).
factura.pagadaEl saldo de una factura llegó a 0 tras aplicar un cobro (o una nota de crédito).
factura.por_vencerUna factura a crédito con saldo vence en 3 días. Lo emite un job diario a las 07:00 (America/Guayaquil).
factura.vencidaUna factura a crédito con saldo venció ayer. Mismo job diario a las 07:00 (America/Guayaquil).
// POST https://tu-app.com/webhooks/emitoo
// X-Emitoo-Event: cobro.registrado

{
  "evento": "cobro.registrado",
  "data": {
    "id": 88,
    "cliente_id": 12,
    "medio": "01",
    "monto": 150.0,
    "referencia": "DEP-88213",
    "aplicaciones": [
      { "factura_id": 177, "monto_aplicado": 100.0 },
      { "factura_id": 181, "monto_aplicado": 50.0 }
    ]
  }
}

Recordatorios automáticos de cobro

Combina factura.por_vencer con un workflow y el nodo de acción de email para enviar recordatorios de pago automáticos a tus clientes 3 días antes del vencimiento, sin escribir código.