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.