Docs / API Reference / Pagos a proveedores
API Reference

Pagos a proveedores

Cuentas por pagar (CxP): registra el dinero que le pagas a un proveedor y aplícalo contra una o varias compras o liquidaciones de compra (abono parcial o pago consolidado). Lo que no se aplica queda como anticipo al proveedor, y un pago también puede cancelarse con cruce contra cuentas contables en vez de caja o bancos. Espejo de Cobros sobre Compra en vez de Factura. Incluye la agenda de pagos semanal.

Autenticación

Todos los endpoints de este recurso requieren el header X-API-Key con una API key que tenga permisos sobre el recurso pagos_proveedor. 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 pago

POST /api/v1/pagos-proveedor — Crea un pago y sus aplicaciones a compra(s)

Body

Parámetro Tipo Descripción
proveedor_id required integer Id del proveedor (PersonaEmpresa con es_proveedor=true).
fecha required datetime Fecha en que se entregó el dinero (ISO 8601). No puede ser futura ni caer en un período contable cerrado (400). Ver fechas contables.
medio required string Medio de pago — código de la Tabla 24 SRI (ej. '01' efectivo, '16' t. débito, '19' t. crédito, '20' otros con utilización del sistema financiero). '15' (compensación de deudas) para un pago con cruce.
monto required number Monto total del pago. Σ aplicaciones.monto_aplicado debe ser ≤ monto (±0.01); lo que sobra queda como anticipo (monto_anticipo).
referencia optional string Referencia libre (n° de transferencia, cheque, etc). Máx 120 caracteres.
notas optional string Notas internas.
cuenta_dinero_id optional integer Cuenta de caja/banco desde la que salió el dinero: crea el egreso en ella (ver Cuentas y bancos). Si se omite y la empresa tiene una sola cuenta activa del tipo que corresponde al medio ('01' caja, '16'/'19' tarjeta, '20' banco), se usa esa. No se admite en un pago con cruce.
sucursal_id optional integer Sucursal de trazabilidad. Si se omite, se infiere del usuario.
aplicaciones optional array Documentos que cancela. Puede ir vacío (anticipo puro, con monto > 0). Default [].
cruce optional array Líneas contables de un pago con cruce (ver más abajo). Default [].

Forma de aplicaciones[]

Parámetro Tipo Descripción
compra_id optional integer Compra (documento recibido) a la que se aplica el pago. Exactamente uno de compra_id o liquidacion_id.
liquidacion_id optional integer Liquidación de compra emitida (autorizada) a la que se aplica el pago.
monto_aplicado required number Monto aplicado a ese documento. No puede superar su saldo pendiente (total − total_pagado).
import { Emitoo } from "emitoo";

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

const pago = await client.pagosProveedor.crear({
  proveedor_id: 7,
  fecha: new Date().toISOString(),
  medio: "01",
  monto: 320.0,
  referencia: "TRF-55021",
  aplicaciones: [
    { compra_id: 214, monto_aplicado: 200.0 },
    { compra_id: 219, monto_aplicado: 120.0 },
  ],
});

Respuesta (201 Created)

{
  "id": 41,
  "fecha": "2026-07-06T09:30:00",
  "proveedor_id": 7,
  "medio": "01",
  "monto": 320.0,
  "referencia": "TRF-55021",
  "notas": null,
  "cuenta_dinero_id": null,
  "cruce_lineas": [],
  "monto_anticipo": 0,
  "saldo_anticipo": 0,
  "anulado": false,
  "anulado_motivo": null,
  "anulado_en": null,
  "creado_en": "2026-07-06T09:30:04",
  "aplicaciones": [
    { "id": 61, "compra_id": 214, "liquidacion_id": null, "monto_aplicado": 200.0, "desde_anticipo": false, "fecha_aplicacion": null },
    { "id": 62, "compra_id": 219, "liquidacion_id": null, "monto_aplicado": 120.0, "desde_anticipo": false, "fecha_aplicacion": null }
  ]
}

Errores

Código Cuándo ocurre
400fecha futura o en un período contable cerrado; una línea de cruce inválida (ver pagos con cruce).
404El proveedor no existe, o alguna de las compras o liquidaciones referenciadas en aplicaciones no existe, está anulada o es de otro proveedor.
409El monto_aplicado de una línea supera el saldo pendiente de ese documento, o la liquidación no está en un estado que admita pagos.
422El medio no es un código válido de la Tabla 24 SRI; Σ(aplicaciones) supera monto; no hay aplicaciones y monto es 0; una aplicación trae compra y liquidación a la vez (o ninguna); o un cruce que no cumple sus reglas de forma.

Listar pagos

GET /api/v1/pagos-proveedor?proveedor_id=&desde=&hasta=&limit=&offset= — Listado con filtros opcionales

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

Obtener un pago

GET /api/v1/pagos-proveedor/{id} — Detalle completo, con sus aplicaciones a compra

Anular un pago

POST /api/v1/pagos-proveedor/{id}/anular — Anula el pago y revierte sus aplicaciones (el saldo de las compras vuelve a subir)

Body

Parámetro Tipo Descripción
motivo required string Motivo de la anulación. Máx 300 caracteres.
fecha optional date Fecha del reverso (asiento espejo y movimiento inverso en el banco), YYYY-MM-DD. Si se omite: la del pago si su período sigue abierto; si no, hoy. Dada: no futura, no anterior al pago, en un período abierto y fuera de una conciliación bancaria cerrada (400).

Cuándo no se puede anular

Un segundo intento de anular el mismo pago responde 409, igual que anular un pago cuyo anticipo ya se aplicó a documentos (primero deshaz esas aplicaciones) o cuyo egreso del banco está en una conciliación bancaria cerrada. Si necesitas corregir el monto o las compras aplicadas, anula y crea un pago nuevo; si solo está mal la fecha, cámbiala.

Cambiar la fecha de un pago

PATCH /api/v1/pagos-proveedor/{id}/fecha — Corrige la fecha del pago, de su egreso en el banco y de su asiento (sin rehacerlo)

Parámetro Tipo Descripción
fecha required date Body. Nueva fecha (YYYY-MM-DD); se conserva la hora original.
{
  "fecha": "2026-09-28T09:30:00",
  "asiento_movido": true,
  "avisos": []
}

asiento_movido indica si el pago tenía asiento y se movió con él (mismo número). avisos lista efectos colaterales, por ejemplo que el egreso se desmarcó de una conciliación en curso porque la nueva fecha quedó después de su corte. Si parte del anticipo ya se aplicó, el pago no puede quedar después de esa aplicación. Las reglas comunes están en fechas contables: 400 por fecha inválida, 409 si el pago está anulado o el cambio toca una conciliación bancaria cerrada.

Pagos con cruce

Un pago con cruce cancela compras o liquidaciones contra una o varias cuentas contables en vez de caja o bancos. Caso típico: la factura del proveedor la pagó una compañía relacionada y el valor se carga a la cuenta por pagar a esa relacionada. No mueve dinero (no toca ninguna cuenta de dinero ni la conciliación bancaria) y genera el asiento Debe cuentas por pagar / Haber las cuentas del cruce.

Forma de cruce[]

Parámetro Tipo Descripción
cuenta_id required integer Cuenta contable del plan de la empresa: imputable, activa, que no sea de caja/bancos ni la propia cuenta por pagar a proveedores.
monto required number Mayor que 0.
tercero_id optional integer Persona o empresa del catálogo para el auxiliar de la cuenta (p. ej. la relacionada).
descripcion optional string Máx 200 caracteres.

Reglas del pago con cruce (si no se cumplen, 422):

  • medio debe ser "15" (compensación de deudas) y no se envía cuenta_dinero_id.
  • Σ cruce[].monto debe ser exactamente igual a monto, al centavo.
  • Se aplica completo a documentos: aplicaciones no puede ir vacío y su Σ debe cuadrar con monto. Un cruce no deja anticipo.

Una cuenta que no existe en el plan, de agrupación, inactiva, de caja/bancos o igual a la cuenta por pagar que se cancela responde 400 con el número de línea. Se anula y se cambia de fecha igual que un pago normal.

curl -X POST https://api.emitoo.io/api/v1/pagos-proveedor \
  -H "X-API-Key: $EMITOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "proveedor_id": 7,
    "fecha": "2026-10-06T10:00:00",
    "medio": "15",
    "monto": 450.00,
    "referencia": "Pagada por Relacionada S.A.",
    "aplicaciones": [
      { "compra_id": 230, "monto_aplicado": 450.00 }
    ],
    "cruce": [
      { "cuenta_id": 2105, "monto": 450.00, "tercero_id": 31, "descripcion": "CxP a la relacionada" }
    ]
  }'

El pago trae las líneas en cruce_lineas:

"cruce_lineas": [
  {
    "id": 9,
    "cuenta_id": 2105,
    "cuenta_codigo": "201.03.02",
    "cuenta_nombre": "Cuentas por pagar relacionadas",
    "monto": 450.0,
    "tercero_id": 31,
    "tercero_nombre": "RELACIONADA S.A.",
    "descripcion": "CxP a la relacionada"
  }
]

Anticipos a proveedores

Un pago que entrega más de lo que aplica (o que va sin aplicaciones, antes de recibir la factura) deja la diferencia como anticipo: monto_anticipo es lo que quedó sin aplicar al crearlo y saldo_anticipo lo que falta aplicar. Contablemente es un activo (anticipos a proveedores) hasta que se aplica a una compra o liquidación del mismo proveedor. Aplicarlo baja el saldo del documento sin mover dinero y genera su propio asiento con la fecha de aplicación. Es el espejo de los anticipos de clientes.

Registrar un anticipo

curl -X POST https://api.emitoo.io/api/v1/pagos-proveedor \
  -H "X-API-Key: $EMITOO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "proveedor_id": 7,
    "fecha": "2026-10-01T10:00:00",
    "medio": "20",
    "monto": 800.00,
    "referencia": "TRF-7781",
    "cuenta_dinero_id": 3,
    "aplicaciones": []
  }'

Registrar un anticipo emite el evento pago_proveedor.registrado de siempre; aplicarlo emite compra.pagada (o liquidacion.pagada) si el documento queda en cero. No hay eventos propios de anticipos.

Anticipos por aplicar

GET /api/v1/pagos-proveedor/anticipos?proveedor_id= — Pagos no anulados con saldo_anticipo > 0, del más antiguo al más reciente

[
  {
    "pago_id": 57,
    "fecha": "2026-10-01T10:00:00",
    "proveedor_id": 7,
    "proveedor_nombre": "Distribuidora Andina S.A.",
    "referencia": "TRF-7781",
    "monto_anticipo": 800.0,
    "saldo_anticipo": 500.0
  }
]

Aplicar un anticipo

POST /api/v1/pagos-proveedor/{id}/aplicar-anticipo — Aplica el anticipo del pago a compras o liquidaciones del mismo proveedor

Parámetro Tipo Descripción
fecha required date | datetime Fecha de la aplicación (y de su asiento). No anterior al pago, no futura y en un período abierto.
aplicaciones required array Mínimo 1. Cada una: { compra_id | liquidacion_id, monto_aplicado > 0 }.
{
  "fecha": "2026-10-06",
  "aplicaciones": [
    { "compra_id": 241, "monto_aplicado": 300.00 }
  ]
}

Devuelve el pago con la nueva aplicación (desde_anticipo: true y su fecha_aplicacion).

CódigoCuándo ocurre
400fecha futura o en un período cerrado.
404El pago o un documento no existen, están anulados o son de otro proveedor.
409Pago anulado; Σ aplicado supera saldo_anticipo; monto mayor al saldo del documento; liquidación que no admite pagos; fecha anterior a la del pago.
422Una aplicación trae compra y liquidación a la vez, o ninguna; aplicaciones vacío.

Deshacer una aplicación del anticipo

DELETE /api/v1/pagos-proveedor/{id}/aplicaciones/{aplicacion_id}?fecha= — Devuelve el saldo al documento y al anticipo, y revierte su asiento

Solo para aplicaciones hechas desde el anticipo (409 si la aplicación se hizo con el pago). fecha (query, opcional) es la del reverso del asiento; sin ella, la de la aplicación si su período sigue abierto. Devuelve el pago actualizado.

Agenda de pagos

GET /api/v1/pagos-proveedor/agenda — Compras con saldo pendiente, agrupadas por semana ISO (lunes) de fecha_vencimiento

Cada compra con saldo > 0 se agrupa en la semana (lunes ISO) de su fecha_vencimiento (o de fecha_emision si no tiene vencimiento). Útil para planificar los pagos de la semana.

{
  "semanas": [
    {
      "semana": "2026-07-06",
      "total": 320.0,
      "cantidad": 2,
      "compras": [
        {
          "id": 214,
          "numero_doc": "001-001-000000214",
          "proveedor_razon_social": "Distribuidora Andina S.A.",
          "fecha_vencimiento": "2026-07-08",
          "total": 200.0,
          "total_pagado": 0,
          "saldo": 200.0
        },
        {
          "id": 219,
          "numero_doc": "001-002-000000019",
          "proveedor_razon_social": "Suministros del Pacífico",
          "fecha_vencimiento": "2026-07-10",
          "total": 120.0,
          "total_pagado": 0,
          "saldo": 120.0
        }
      ]
    }
  ],
  "total_general": 320.0
}

Eventos

Este módulo emite los siguientes eventos:

Evento Cuándo se dispara
pago_proveedor.registradoSe creó un pago (POST /pagos-proveedor).
pago_proveedor.anuladoSe anuló un pago (POST /pagos-proveedor/{id}/anular).
compra.pagadaEl saldo de una compra llegó a 0 tras aplicar un pago o un anticipo.
liquidacion.pagadaEl saldo de una liquidación de compra llegó a 0 tras aplicar un pago o un anticipo.
// POST https://tu-app.com/webhooks/emitoo
// X-Emitoo-Event: pago_proveedor.registrado

{
  "evento": "pago_proveedor.registrado",
  "data": {
    "id": 41,
    "proveedor_id": 7,
    "medio": "01",
    "monto": 320.0,
    "referencia": "TRF-55021",
    "compras": [214, 219]
  }
}

Automatiza el pago a proveedores

Combina compra.creada con un workflow para avisar por email o WhatsApp cuando llega una compra con vencimiento próximo, usando la misma agenda que ves en GET /pagos-proveedor/agenda.