API de facturación electrónica · DIAN Colombia

El ciclo fiscal completo, en un solo contrato.

Emisión, recepción y nómina electrónica bajo una misma API REST. Sin acoplarte al proveedor tecnológico que hay debajo: hablas de facturas, no de su dialecto.

POST /invoices/v1/sales-invoices
Authorization: Bearer pk_live_…
Idempotency-Key: 8f2c1b90-4d17-4e0a-9c31
Content-Type: application/json

{
  "customer": { "identification": "901234567", … },
  "items": [ { "price": "70000.00", … } ],
  "payment_details": [ { "amount": "83300.00" } ]
}

→ 202 Accepted
{
  "transaction_id": "91003243-14b6-4bed-9fd7",
  "status": "pending",
  "totals": { "total": "83300.00" }
}
operaciones
47
tipos de documento
7
ámbitos
4

Tres ámbitos, versionados por separado

Cada uno se despliega y se versiona por su cuenta: quien solo factura no carga con el módulo de nómina.

/invoices/v1

Emisión

Cinco tipos de documento, cada uno con su ciclo completo.
  • Factura de venta
  • Nota crédito y nota débito
  • Documento soporte y nota de ajuste
  • Rangos de numeración
/receptions/v1

Recepción

Lo que otros te emiten, y cómo respondes ante la DIAN.
  • Bandeja de documentos recibidos
  • Carga por CUFE
  • Eventos RADIAN, con su plazo de tres días
/payrolls/v1

Nómina

23 conceptos de devengado y 18 de deducción, con nombres de negocio.
  • Nómina electrónica
  • Notas de ajuste (eliminación)
  • Rangos propios de nómina

Cuatro cosas que no tendrás que resolver tú

Un número del rango autorizado por la DIAN no se puede devolver: la única corrección es otro documento fiscal. Casi todo el trabajo del adaptador está en evitar eso.

Un reintento no emite dos veces

Todo POST que emite exige Idempotency-Key, y la barrera vive en la base de datos: el reintento puede llegar a otra instancia.

Un 201 no significa aceptada

La única señal de verdad es is_validated. Las advertencias de la autoridad se conservan incluso cuando el documento sí se validó.

Los totales se verifican

Base gravable, impuesto y total se comparan contra lo que devuelve el proveedor. Es el detector más barato de un error de cálculo.

Errores que dicen qué pasó

RFC 7807 con correlation_id en cada respuesta, y una spec OpenAPI generada desde el mismo código que valida — no puede desincronizarse.

Solicitar acceso

Cuéntanos qué emites y con qué trabajas. Respondemos con credenciales de sandbox y una propuesta según tu volumen.