Esta funcionalidad está en habilitación. Para activarla en tu empresa, escríbenos por el chat del panel de administración: el proceso incluye cargar tu resolución de la DIAN y completar la habilitación de tu empresa como facturador electrónico.
Qué hace
OnePay emite la factura electrónica a nombre de tu empresa ante la DIAN, con tu resolución y tu numeración, y le entrega el documento a tu cliente. Es el mismo endpoint que Facturas —POST /v1/invoices — y el mismo recurso. Lo que cambia es si mandas items:
En los dos casos la factura obtiene su cobro asociado, aparece en el mismo listado y se consulta por la misma URL.
Si ya facturas en otro sistema y solo necesitas recaudar, no cambia nada para ti: seguí mandando el mismo payload de siempre.
items es aditivo.Cuándo se timbra
El parámetro más importante de la integración esstamp_policy, porque decide en qué momento el documento existe ante la DIAN.
none no es lo mismo que manual. Con manual la intención es emitir más tarde; con none no se emite nunca. La diferencia importa: una factura “pendiente de emitir” que en realidad nunca se va a emitir es indistinguible de una que alguien olvidó.Con none la factura existe igual, con sus líneas y su cobro — simplemente no hay documento fiscal. Y como no lo va a haber, no se te exigen los datos fiscales del cliente: dirección, dígito de verificación ni responsabilidades fiscales.Datos que exige el receptor
La DIAN no acepta una factura con el receptor incompleto. Lo que se exige depende del tipo de documento:
Si falta algo, la API responde
422 con todos los campos faltantes de una vez, no con el primero:
Flujo
El timbrado es asíncrono. La DIAN puede tardar segundos o minutos, así quePOST /v1/invoices responde de inmediato con fiscal_status: null y el resultado te llega por webhook. No hagas polling contra el endpoint de detalle esperando el CUFE.
Ejemplo completo de implementación
Un ISP que cobra internet mensual y quiere que OnePay emita sus facturas.Paso 1 — Carga tu resolución de la DIAN
Una sola vez, con los datos que aparecen en tu resolución del portal MUISCA.draft. Actívala cuando la hayamos validado:
Carga también una resolución con
document_type: "credit_note" y su propio prefijo. Las notas crédito llevan numeración aparte, y sin ella no vas a poder anular ni devolver.Paso 2 — Asegura que tu cliente tenga los datos fiscales
Paso 3 — Previsualiza los totales
Útil para mostrar el detalle en tu propia interfaz antes de emitir. No crea nada.Paso 4 — Crea la factura
El
Idempotency-Key no es opcional en la práctica: sin él, un reintento de tu lado por un timeout de red crea dos facturas, que es IVA declarado dos veces y una nota crédito para arreglarlo.Paso 5 — Escucha los webhooks
Conon_payment, cuando tu cliente pague, OnePay timbra y te avisa:
cufe y el xml_url en tu sistema. El XML es el documento legal; el PDF es solo su representación gráfica.
Fíjate en
totals y en amount: los totales fiscales van en centavos y agrupados aparte, mientras que amount es el monto en pesos de siempre, el que ya leen tus integraciones. Están separados a propósito — mezclar las dos unidades en el mismo nivel es la forma más fácil de cobrar cien veces de más.Paso 6 — Devoluciones
Si tienes que devolver dinero, emite una nota crédito. OnePay ya la emite sola cuando reembolsas un cobro, pero también puedes hacerlo directo:amount para anular la factura completa. Puedes emitir varias notas parciales sobre la misma factura; OnePay no deja que la suma supere el total.
Errores
Todos traen uncode estable sobre el que puedes ramificar sin leer el mensaje.
Preguntas frecuentes
¿Qué pasa si me quedo sin folios?
¿Qué pasa si me quedo sin folios?
OnePay te avisa al 80% y al 95% del rango consumido, y 30 días antes de que venza la resolución. Carga la siguiente resolución con anticipación y actívala: puedes tener varias cargadas, pero solo una activa por prefijo y tipo de documento.Si te quedas sin folios, el timbrado falla con
resolution_not_activatable y las facturas se siguen creando pero no se emiten.¿Puedo facturar lo que ya cobro con /invoices?
¿Puedo facturar lo que ya cobro con /invoices?
No automáticamente. Las facturas que importas desde tu sistema de gestión no se timbran: OnePay asume que ya las emitiste tú. Si quieres migrar tu facturación a OnePay, escríbenos — hay que apagar la emisión en tu sistema anterior primero, o terminarías facturando dos veces la misma venta.
¿El precio de mis productos incluye IVA?
¿El precio de mis productos incluye IVA?
Puedes usar cualquiera de las dos formas. Con
tax.behavior: "inclusive" el unit_amount ya trae el impuesto y OnePay lo desagrega; con "exclusive" (por defecto) el impuesto se suma encima.El XML de la DIAN siempre lleva base e impuesto por separado, así que la desagregación ocurre igual — la diferencia es solo cómo nos mandas el precio.¿Puedo usar mi catálogo de productos?
¿Puedo usar mi catálogo de productos?
Sí. En vez de
description y unit_amount, manda price_id de un Precio y OnePay resuelve nombre, monto e impuesto. Puedes mezclar líneas del catálogo con líneas sueltas en la misma factura, y sobreescribir el impuesto de una línea puntual sin duplicar el producto.¿Cómo pruebo sin emitir documentos reales?
¿Cómo pruebo sin emitir documentos reales?
Usa tu API key de pruebas. El entorno de pruebas tiene su propia resolución y su propia numeración, completamente separada de producción.