Novedades
Aquí se anotan los cambios de la API que afectan a quien integra. La versión vigente es v1.
Política de versiones
Sección titulada «Política de versiones»- La versión mayor va en la ruta:
/v1. - Dentro de
v1solo hay cambios compatibles: campos nuevos en las respuestas, campos opcionales nuevos en las solicitudes, endpoints nuevos, códigos de error nuevos y valores nuevos en enumeraciones de respuesta. Tu cliente debe tolerar campos y valores que no conoce. - Rompería el contrato, y por eso iría a
/v2: quitar o renombrar campos, códigos o rutas; volver obligatorio algo opcional; cambiar tipos o formatos (por ejemplo, de los montos); cambiar el significado de un estado. - Un endpoint o campo que se retire se anuncia con las cabeceras
DeprecationySunset(RFC 8594) y se mantiene al menos 6 meses.
El contrato de cada versión está en la referencia de la API v1, generada desde el código.
v1 (vigente)
Sección titulada «v1 (vigente)»Cambios de comportamiento
Sección titulada «Cambios de comportamiento»Cambios que no tocan la forma del contrato (v1 sigue siendo compatible) pero cambian lo que la API hace con los datos existentes.
- Cada empresa puede declarar su software y su fabricante. En el portal, en Empresa → Software y fabricante, una empresa escribe quién fabrica su software, el NIT del fabricante si quiere y el nombre del software; una sola configuración para sandbox, habilitación y producción. Es lo que declaran sus documentos en la línea «Software: … · Fabricante: …» del PDF y en
print.software. El nombre del software solo se puede declarar junto a un fabricante propio: sin él, los documentos declaran el software y el fabricante de foliios. Un cambio aplica a los documentos que se emitan después: los ya emitidos conservan lo que declararon, también al reenviarlos. La API v1 no cambia. Noviembre de 2026. - La representación gráfica nombra al fabricante del software, no al emisor. Antes, la línea del software del PDF ponía al emisor como fabricante cuando usaba software propio y en todos los documentos del sandbox. Ahora dice «Software: … · Fabricante: …, NIT …» con el software y el fabricante que el documento declara, los mismos de
print.software, y agrega «Proveedor tecnológico: NIT …» solo cuando el software está registrado con un NIT distinto al del emisor (nunca en el sandbox). Un documento ya entregado conserva su PDF; al reenviarlo se genera con la redacción nueva. Noviembre de 2026. - La emisión espera el resultado de la DIAN. Antes,
POST .../documentsrespondía siempre202con el documento enpending. Ahora la solicitud espera y el código dice cómo terminó:201con el documentoaccepted(o encontingency),200si quedórejectedofailed, con el detalle endian, y202conLocationyRetry-Aftersi se acabó la espera y sigue en proceso. El parámetro nuevo?wait=Najusta la espera en segundos y?wait=0no espera; unwaitinválido responde400 invalid_query. Si la DIAN no respondió a tiempo y puede tener el documento, el202traeoutcome_code: dian_outcome_uncertain: no lo emitas de nuevo con otraIdempotency-Key, consúltalo conGET.resubmityretryesperan igual, y una repetición con la mismaIdempotency-Keyresponde con el código del estado actual del documento. Si tu cliente exigía202, acepta también201y200, y usa un tiempo de espera HTTP mayor quewait. Ver emitir una factura. Noviembre de 2026. - Los documentos de habilitación se conservan 7 días. Un documento emitido con una clave
sk_test_no tiene validez fiscal y ahora vence a los 7 días de creado: consultarlo, descargar su XML, su PDF o su AttachedDocument, reintentarlo, reenviarlo o corregirlo responde410 document_expired, y más tarde404. Los de producción no cambian. Ver habilitación. Noviembre de 2026. - Una nota que el UBL no puede llevar se rechaza antes de numerar. Una nota crédito o débito con
withholdings, o una nota crédito conprepaid_payments, antes se aceptaba, tomaba número y terminaba enfailedconrendering_failed. Ahora responde422 validation_failedcon el campo (withholdings_in_note,prepaid_payments_in_credit_note) y no consume número, saldo ni laIdempotency-Key. Además, todo documento se escribe una vez de prueba antes de numerar: si a la configuración de la empresa le falta una pieza (identificador o PIN del software, clave técnica de la resolución, NIT del proveedor del software), la respuesta es409 environment_not_configuredy sudetaildice cuál; ante un defecto de la plataforma,500 internal_error. En ningún caso consume número, saldo ni laIdempotency-Key. - El número de un documento que falló sin firmarse se puede reutilizar (numeración manual). Antes, pedir el número de cualquier documento
failedrespondía409 number_already_usedy el número quedaba perdido. Ahora, si el documento que lo tiene estáfailedsincufe, coninvalid_documentorendering_failed, la emisión de un documento nuevo con ese número se acepta de inmediato; lo mismo si estárejectedy su número había quedado retenido. Hace falta unaIdempotency-Keynueva: la misma clave sigue devolviendo elfailedoriginal. Con numeración automática nada cambia: ese número no se reasigna y el cliente no elige números. Ver numeración y series. Noviembre de 2026. - El reenvío ya no conserva el escenario forzado del sandbox. Antes, corregir y reenviar un documento (
POST .../resubmit) cuya emisión forzó un escenario con la cabeceraFoliios-Sandbox-Scenariomantenía ese mismo escenario. Ahora el reenvío se reevalúa desde el contenido corregido (una nota[sandbox:<id>]o un comprador999000NNN), igual que una emisión nueva. Para forzar un escenario en ese reenvío en particular, el cuerpo deresubmitacepta el campo opcionalsandbox_scenario(nunca la cabecera, que un reenvío no lee). Fecha: sin fecha registrada. Ver rechazos y reenvío. - Una nota ya no acepta el
resolution_idde una factura. Antes, una nota crédito o débito con cualquierresolution_idse aceptaba y el campo se ignoraba. Ahora ese campo, en una nota, solo puede faltar o ser el de la serie de la nota (elresolution_idque la API devuelve para ella): cualquier otro responde422 validation_failedcon el camporesolution_idy el códigonot_allowed, sin consumir número ni atar laIdempotency-Key. Aplica a la emisión por la API y por el MCP, a la validación, a los borradores y a cada fila de una emisión masiva. Una nota emitida antes de que existieran las series propias devuelve elresolution_idde su factura: no lo copies en una nota nueva. Si tu integración lo envía, quítalo de las notas. La regla se revisa antes que laIdempotency-Key: si repites una nota ya emitida con su misma clave y elresolution_idde una factura en el cuerpo, recibes ese422y no el documento original; la nota sigue emitida una sola vez y la consultas conGET .../documents/{document_id}. Ver notas crédito y débito. Noviembre de 2026. - El correo de una factura ya no recuerda la aceptación tácita. El correo que recibe el comprador de una factura ya no trae el recordatorio del plazo de reclamo y de la aceptación tácita: la aceptación, los reclamos y su registro en RADIAN son del emisor y del comprador. 2026-11-05.
Cambios compatibles
Sección titulada «Cambios compatibles»- Evento nuevo
document.delivery_complained. Cuando un destinatario marca como spam el correo de un documento, foliios envía este evento con el documento ydata.complaint.complained_at. No trae la dirección nidata.delivery, y la entrega no cambia de estado; la dirección queda enGET .../suppressionsconreason: complaint. Un endpoint sin lista de eventos lo recibe sin cambiar nada; uno con lista debe agregarlo para recibirlo. Se puede probar en el sandbox conPOST /v1/sandbox/events. Ver entrega por correo y webhooks. Noviembre de 2026. print.software.manufacturer_idpuede sernull. El NIT del fabricante del software pasa de texto obligatorio astring | null: la clave está siempre y valenullcuando el documento no declara ninguno.printya no depende de ese dato. El software y el fabricante deprint.softwareson los mismos que imprime la representación gráfica del documento y quedan fijos cuando se emite. Ver emitir una factura. Noviembre de 2026.- Campo
printen el documento. La respuesta de un documento incorpora el campo opcionalprint, con lo necesario para imprimir unoacceptedo encontingency:cufe,qr_text,qr_url,validated_at(nullen contingencia),status_label,softwarey, en facturas,numbering_authorization. Esnullen cualquier otro estado y puede venirnulltambién en un documento aceptado: tu cliente debe tolerarlo. Ver emitir una factura. Noviembre de 2026. - Cuota mensual en habilitación. Cada empresa emite hasta 1.000 documentos nuevos por mes con claves
sk_test_. Al pasarse, la emisión responde con el código nuevo429 test_quota_exceeded, conlimity sinRetry-After: el cupo vuelve el día 1, en hora de Colombia. El set de habilitación y las repeticiones con la mismaIdempotency-Keyno cuentan. Ver límites por empresa. Noviembre de 2026. - Activación de la cuenta para producción. Configurar el ambiente de producción en el portal (crear una clave
sk_live_, guardar el software, registrar resoluciones) exige una cuenta activada. Sin activar, el portal responde con el código nuevo402 activation_requiredy no cambia nada. La habilitación y el sandbox no lo necesitan. Ver paso a producción. Noviembre de 2026. number_reusabley quién tiene un número ocupado. Los documentos traen el campo nuevonumber_reusable, y el eventodocument.failedlo trae endata.number_reusable:truecuando el documento estárejected, ofailedsin haberse firmado nunca (invalid_documentorendering_failed). Los errores409 number_already_usedy409 number_in_verificationagreganholder_document_idyholder_status, el id y el estado del documento que tiene el número. Ver numeración y series e idempotencia y reintentos. Noviembre de 2026.- Límites por empresa en producción. Cada empresa admite 100 escrituras y 300 lecturas por minuto (REST y MCP juntos), 1.000 documentos en proceso, 5 emisiones síncronas abiertas, 1 lote en admisión y 5 lotes por minuto. Códigos
429nuevos:in_flight_limitedyconcurrency_limited;rate_limitedsuma el miembrolimit. Las respuestas traenRetry-AfteryX-RateLimit-Limit,-Remainingy-Reset. Un lote entra completo o no entra.GET .../acquirers/...cuenta como lectura. Ver límites por empresa. Noviembre de 2026. - Verificación de integración del sandbox. Endpoint nuevo
GET /v1/companies/{company_id}/sandbox/integration-check, con la herramienta equivalenteget_integration_checken el MCP. Calcula, desde los datos de la empresa, cuatro comprobaciones derivadas y dos declaradas. Solo para claves de sandbox. Ver verificación de integración. Noviembre de 2026. - Campos nuevos en el listado y en el documento. El listado de documentos (
GET .../documents) incorporatype,payable_amount,currency,origin,actoryapproved_by, y la respuesta de un documento incorporaorigin,actoryapproved_by. Los cuatro primeros del listado sonnullen documentos guardados antes de que el listado los llevara. Octubre de 2026. - Series propias de notas crédito y débito. Las notas se numeran con su propia serie (
NCyND) y la API ignora elresolution_idque llegue en ellas: ya no hace falta enviarlo. Si la serie de la empresa no está configurada, la emisión de esa nota responde409 note_series_not_configured. Ver numeración y series. Fecha: sin fecha registrada. - Catálogo del sandbox versionado.
GET /v1/sandbox/scenariostrae suversion; la versión vigente del catálogo y de las reglas del sandbox es la del encabezado de la referencia de escenarios.
Documentación
Sección titulada «Documentación»- Guía de tirilla para puntos de venta. Página nueva: tirilla en un punto de venta. Explica cómo emitir con
?wait=Ndesde un punto de venta, con o sin operador, qué imprimir con cada respuesta (201,200,202,429o sin respuesta), qué va en la tirilla campo por campo desdeprinty desde tu venta, el QR, el consumidor final, la contingencia y la reimpresión. Trae una receta en Python con pruebas. La API v1 no cambia. Noviembre de 2026.
Sandbox: notificaciones de un documento aceptado
Sección titulada «Sandbox: notificaciones de un documento aceptado»El sandbox devuelve, sin pedir ningún escenario, las notificaciones que la habilitación real de la DIAN dio a documentos aceptados (por ejemplo RUT01), para que un documento aceptado se vea igual en el sandbox y en habilitación. Ver escenarios. Noviembre de 2026.
Cómo enterarte de los cambios
Sección titulada «Cómo enterarte de los cambios»- Esta página se actualiza con cada cambio visible de la API.
- Las páginas de la referencia generada siempre reflejan el código vigente.
- Los agentes pueden leer
llms.txty los.mdde cada página, que siempre son la versión actual.