Ágil Factura
Ágil Factura S.A.S.
Prueba piloto · Pleia

Consulta de documentos electrónicos ante la DIAN

Una llamada devuelve todas las facturas que le emitieron a una empresa en un rango de fechas, con emisor, totales e impuestos discriminados. Esta guía la deja funcionando en cinco minutos.

Dos vías, y ya ninguna le obliga al certificado

Hasta ahora, bajar el XML original exigía el certificado digital de cada empresa. Desde septiembre de 2026 hay una vía que no lo pide. La anterior sigue funcionando: puede usar la que le convenga, o las dos.

Recomendada · sin certificado

Listado y XML, en una llamada

Recorre el rango de fechas y devuelve, por cada documento, lo que declara el catálogo y lo que dice su XML firmado. Solo con el enlace AuthToken.

  • NIT y nombre de quien le facturó
  • Prefijo, folio y fechas de emisión y vencimiento
  • Tipo de documento, estado y estado RADIAN
  • Líneas de detalle: producto, referencia, cantidad, unidad y precio
  • Impuestos por línea y por documento, con base y tarifa
  • Totales, forma y medio de pago, CUFE
Sigue disponible · con certificado

XML original por CUFE

La vía que ya conoce. Devuelve el XML firmado en base64 a partir de una lista de CUFEs, usando el certificado .p12 de la empresa.

  • Hasta 500 CUFEs por llamada
  • Útil cuando ya tiene los CUFEs de otra fuente
  • No depende del ritmo del portal de la DIAN
  • Exige custodiar un certificado por empresa
La novedad es que el certificado dejó de ser obligatorio para consultar. Pedirlo, renovarlo y custodiarlo por cada empresa del catálogo era el trámite que más frenaba estos proyectos. Sigue haciendo falta para lo que escribe en la DIAN —eventos RADIAN, emisión propia— y para obtener la representación gráfica en PDF, que la vía sin certificado no entrega.

Lo único que hay que configurar: el enlace AuthToken

Es la credencial que autoriza la consulta del catálogo de una empresa.

La DIAN lo envía por correo al representante legal, desde el portal de factura electrónica. Llega con esta forma:

https://catalogo-vpfe.dian.gov.co/User/AuthToken?pk=········%7C········&rk=NIT&token=········-····-····-····-············

Se pega completo y sin modificar, incluidos los caracteres raros. Recortarlo o reescribir alguna parte lo invalida.

Un enlace por empresa. Cada NIT tiene el suyo y solo da acceso a los documentos de esa empresa. Si el piloto abarca varias, hace falta que cada una reenvíe el suyo. Los enlaces caducan: si un día deja de responder, pida uno nuevo desde el portal.

Sus credenciales de acceso

Estos son los datos para integrar el servicio desde su sistema. La clave se la entregamos por separado, por un canal seguro: no viaja en esta página ni en el archivo que descarga.

URL del servicio
https://api.tra-di.site
Clave de acceso · cabecera X-Api-Key
se la entregamos por separado
Su clave viaja por separado, no en esta página ni en el archivo que descarga: es personal de su empresa y no debe quedar publicada. Guárdela como variable de entorno o en el gestor de secretos de su sistema, y léala desde ahí. Nunca en un repositorio, en un archivo de configuración versionado, ni en código que llegue al navegador del usuario. Si además la usa en Postman para explorar, póngala en Variables → api_key, columna Current value: la de Initial value viaja con la colección si la exporta o la comparte. Si cree que se ha filtrado, avísenos y la reemplazamos el mismo día.

Un ejemplo directo, sin Postman. Sustituya SU_CLAVE por la clave que le entregamos y PEGUE_AQUI_SU_ENLACE_AuthToken por el enlace que le envió la DIAN:

curl -X POST https://api.tra-di.site/api/cufes \
  -H "X-Api-Key: SU_CLAVE" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
        "tipo": "Received",
        "fechaDesde": "2026-08-24",
        "fechaHasta": "2026-08-31",
        "url": "PEGUE_AQUI_SU_ENLACE_AuthToken"
      }'

Puesta en marcha

Cinco pasos, una sola vez.

1

Importar la colección

En Postman, Import y seleccione el archivo APIDIAN-Extractor-Piloto-Pleia.postman_collection.json. Aparecerá una colección con cuatro peticiones, ordenadas de la más usada a la menos.

La dirección del servicio ya viene configurada. La clave de acceso se la entregamos aparte.

Descargar la colección

JSON · 18 KB · formato Postman v2.1

2

Pegar la clave y el enlace

Abra la colección, pestaña Variables, y pegue el enlace AuthToken en url_token. Guarde con Save.

En esa misma pestaña pegue también su api_key. Son los dos únicos valores que hay que configurar, y quedan guardados para todas las consultas.

3

Elegir el rango de fechas

En la pestaña Variables ajuste desde y hasta en formato AAAA-MM-DD. En el Body de cada petición elija "tipo": Received para compras, Sent para ventas.

Las peticiones vienen preparadas para traer el rango completo. Si solo quiere comprobar que el enlace funciona antes de una consulta larga, añada "limite": 10 al cuerpo: responde en unos quince segundos. Recuerde la coma al agregarlo.

4

Abrir la consola

Menú View → Show Postman Console. Ahí se imprime el primer documento completo con todos sus campos, que es lo que sirve para evaluar si cubren el requerimiento.

5

Enviar

Pulse Send y espere. La consulta abre una sesión contra el portal de la DIAN, recorre el catálogo y descarga cada XML, así que el tiempo depende de cuántos documentos haya: unos 44 por minuto.

No la cancele aunque parezca detenida. Si Postman corta la conexión no sabrá si falló el servicio o el cliente. Para rangos largos conviene poner el tiempo de espera de Postman en 0: Settings → General → Request timeout.

Qué devuelve cada documento

Un ejemplo real, con los datos del receptor sustituidos.

{
  "success": true,
  "total": 140,
  "message": "Se obtuvieron 140 CUFE(s)",
  "data": [
    {
      "cufe": "fca85322a318d4412db7f2c2ec67ce68c117f3f9c85212…",
      "tipoDoc": "01",
      "partitionKey": "co|29|fca",
      "fechaEmision": "29-06-2026",
      "fechaRecepcion": "29-06-2026",
      "grupo": "101E",
      "folio": "101E9248",
      "descripcion": "Factura electrónica",
      "nitEmisor": "891200701",
      "nombreEmisor": "DISPROPAN SAS",
      "nitReceptor": "901234567",
      "nombreReceptor": "SU EMPRESA S.A.S.",
      "estado": "Aprobado con notificación",
      "EstadoRadian": "Factura Electrónica",
      "valor": "$ 387.848",
      "valorNumerico": 387848,
      "impuestos": {
        "iva": 53494,
        "ica": 0,
        "ipc": 0,
        "iva5": 0,
        "iva19": 0
      }
    }
  ]
}
CampoQué contiene
cufeIdentificador único del documento ante la DIAN. Es la llave para pedir el XML por la vía con certificado.
tipoDocCódigo DIAN del tipo de documento. 01 factura, 91 nota crédito, 92 nota débito, 20 documento equivalente POS, 03 contingencia.
descripcionEl mismo tipo, ya en texto legible.
fechaEmision
fechaRecepcion
Cuándo se emitió y cuándo la DIAN lo recibió, en formato DD-MM-AAAA.
grupo · folioPrefijo de la numeración y número del documento.
nitEmisor
nombreEmisor
Quién le facturó. Es el dato central para conciliar cuentas por pagar.
nitReceptor
nombreReceptor
La empresa que recibe, tal como la escribió el emisor.
estadoSituación ante la DIAN: Aprobado o Aprobado con notificación.
EstadoRadianEstado en el registro de facturas como título valor: Factura Electrónica, Título Valor, Disponibilizada, Endosada, Pagada, No Aplica.
valorTotal formateado en pesos, para mostrar.
valorNumericoEl mismo total como número, listo para sumar sin procesar.
impuestosDesglose en iva, ica, ipc, iva5 e iva19, cada uno como número.
partitionKeyReferencia interna del catálogo de la DIAN.
Compras o ventas. El campo tipo del cuerpo decide qué se consulta: Received son las compras —lo que le facturaron— y Sent las ventas. La colección viene en Received.

Lo que añade la vía sin certificado

Esos campos salen del listado del catálogo. Cuando además se descarga el XML, cada documento llega con el detalle que el listado no tiene:

CampoQué contiene
LineItemsUna entrada por línea de la factura: nombre del producto, referencia, unidad de medida, cantidad, precio unitario, total e impuestos de esa línea.
TaxBreakdownLos impuestos del documento agrupados por tarifa, cada uno con su código, nombre, porcentaje, base gravable e importe. Aquí aparecen mezclados el 19 %, el 5 % y el 0 % cuando la factura los combina.
Sub Total
Total a Pagar
Retenciones
Los totales tal como los declara el XML firmado, no como texto del listado.
Metodo de Pago
Codigo Medio de Pago
Si es de contado o a crédito, y por qué medio.
Fecha de VencimientoCuándo vence, cuando el documento la declara.
Estado extracción
Detalle extracción
Qué pasó con ese documento en concreto: ok, no_aplica si no era una factura, o error con su motivo.

La vía sin certificado, en detalle

Una sola petición. Lo único que hay que saber es cuánto tarda y hasta dónde llega de una vez.

Se le indica el rango de fechas y si quiere compras o ventas. El servicio abre la sesión con su enlace AuthToken, recorre el catálogo y descarga el XML de cada documento, todo dentro de la misma llamada.

ConceptoValor
Ritmounos 44 documentos por minuto
Un mes típico (160 documentos)unos 4 minutos
Máximo por llamada400 documentos
Repetir un rango ya extraídoinmediato
Certificado digitalno hace falta

El ritmo no es una limitación nuestra: el portal de la DIAN restringe por dirección IP y rechaza las peticiones que van más rápido. Pedir más deprisa no entrega más documentos, solo produce rechazos. El servicio se encarga de mantener el paso y de reintentar lo que la DIAN frene, así que usted no tiene que hacer nada al respecto.

Si el rango no cabe, se lo decimos antes de empezar. Cuando pide más de 400 documentos, la respuesta llega sin haber descargado nada y trae los tramos de fechas en que conviene partirlo, calculados con los documentos que hay realmente en cada día. No se pierde trabajo ni se gasta cupo del portal.
Lo ya descargado no se vuelve a pedir. Un documento emitido no cambia nunca, así que se guarda. Volver a lanzar un rango que ya extrajo responde al instante y sin tocar la DIAN — útil si necesita reprocesar sin esperar de nuevo.
Dos cosas que esta vía no entrega. El PDF de la representación gráfica: la DIAN solo lo sirve por la ruta que exige resolver un captcha. Y en el listado de compras aparecen también acuses RADIAN, que no son facturas y no tienen nada que extraer; se le reportan aparte, contados como «sin factura», no como errores.

La otra vía: XML por CUFE, con certificado

Sigue disponible y sin cambios. Devuelve el XML firmado de cada CUFE en base64, y requiere el certificado digital de la empresa, que viaja en la petición. Tiene sentido cuando ya dispone de los CUFEs por otro medio, o cuando necesita un caudal que no dependa del ritmo del portal.

ConceptoValor
Máximo por llamada500 CUFEs
Recomendado100 a 150 CUFEs
Tiempo por documento1 a 2 segundos
Tamaño por documentounos 25 KB en base64
Un lote de 150unos 4 MB, entre 3 y 6 minutos
Por qué no pedir 500 de una vez. Cada XML exige una consulta firmada a la DIAN, y un lote muy grande se acerca al tiempo máximo de espera. Si se corta, se pierde la petición completa: no hay entrega parcial. Encadenar lotes de 150 procesa miles de documentos de forma estable.

¿Y los eventos RADIAN?

Sí se pueden emitir, pero no salen de esta conexión: hacen falta un certificado digital y credenciales propias.

La diferencia no es de permisos ni de plan, es de naturaleza. Lo que usa hoy solo lee. Un evento RADIAN escribe en la DIAN a nombre de quien recibe la factura: es un documento XML firmado digitalmente que queda registrado y produce efectos legales.

Lo que tiene hoy

Consulta

Listar y descargar documentos.

  • Clave X-Api-Key
  • Enlace AuthToken de la DIAN
  • Sin certificado digital
  • Solo lectura
Servicio aparte

Eventos RADIAN

Acusar, aceptar o reclamar una factura.

  • Empresa dada de alta, con token propio
  • Certificado digital .p12 del NIT que recibe, más su contraseña
  • Software ID y PIN configurados
  • Escribe en la DIAN
EventoCuándo se usa
Acuse de recibo de la Factura Electrónica de VentaSe confirma que la factura llegó
Recibo del bien y/o prestación del servicioSe confirma que lo facturado se recibió
Aceptación expresaSe acepta la factura de forma explícita
Reclamo de la Factura Electrónica de VentaSe rechaza, con su motivo

El listado que ya usa alimenta este flujo: le entrega los CUFEs, y el evento se envía por CUFE. No hace falta resolver captcha ni construir el AttachedDocument.

El certificado es por NIT. Para emitir eventos en nombre de terceros hace falta el certificado de cada empresa o un mandato que la faculte. Es una conversación distinta a la de la consulta, con implicaciones legales, y conviene resolverla antes de dimensionar el volumen.
No está incluido en el plan actual. La tarifa por documento cubre la consulta. Si les interesa habilitar eventos, escríbanos con el volumen estimado y el número de NIT que los emitirían, y lo cotizamos aparte.

Su plan

Activo desde el 1 de septiembre de 2026. Importes en pesos colombianos, antes de IVA.

Mensual fijo

$200.000

Cuota de disponibilidad del servicio. Se cobra completa desde el mes en que arranca, consuma o no.

Por documento

Según el volumen del mes

Cada documento que se le entrega, por cualquiera de las dos vías. La consulta en sí no se cobra, ni tampoco revisar este consumo.

Documentos en el mesPrecio por documentoEjemplo: coste del mes
1 – 500$150500 docs → $75.000
501 – 2.000$110840 docs → $92.400
2.001 – 5.000$803.000 docs → $240.000
5.001 – 15.000$5510.000 docs → $550.000
15.001 – 40.000$38—
40.001 – 100.000$30—
100.001 – 250.000$27—
más de 250.000$25—
El importe puede bajar al consumir más. Un mes con 500 documentos cuesta $75.000; uno con 520 cuesta $57.200, porque los 520 entran ya en el tramo de $110. No es un error: mientras el mes no cierre, la cifra que ve es una estimación y puede reducirse si el volumen sigue creciendo.

Un mes de 840 documentos sale en $200.000 de cuota + $92.400 de consumo = $292.400 antes de IVA.

Consultar su consumo

Cuánto lleva en el periodo, en cualquier momento y sin esperar a la factura.

La petición 3 · Consultar mi consumo de la colección responde con el detalle del periodo. También se puede llamar directamente:

curl -sS "https://api.tra-di.site/api/mi-consumo" \
  -H "X-Api-Key: SU_CLAVE"
CampoQué contiene
periodoEl rango que se consultó. Revíselo siempre antes de dar una cifra por buena.
consumo.documentosDocumentos facturables del periodo.
importe.tramo_documentoEl tramo de precio en el que cayó el volumen.
importe.precio_documentoPrecio unitario de ese tramo.
importe.totalTotal antes de IVA.
detallePor endpoint: cuántos documentos y en cuántas llamadas.
Sin fechas devuelve el mes en curso, del día 1 al último. Para otro periodo se añaden desde y hasta en formato AAAA-MM-DD — las dos o ninguna: si envía solo una, la otra se rellena con el mes actual y sumaría dos periodos sin avisar.
Consulte meses naturales completos. El precio por documento sale del tramo, y el tramo lo define el volumen del rango consultado. Los mismos documentos salen a un precio distinto si pregunta a caballo entre dos meses, y esa cifra no correspondería a ninguna factura. Mientras el mes no cierre, el importe es una estimación: puede bajar si el volumen sigue creciendo y alcanza un tramo mejor.

Consultar el consumo no se cobra, y solo ve el suyo: la empresa se identifica por la clave, no por un parámetro.

Si algo no sale como espera

"Sin CUFEs en el rango indicado"

Puede ser que no haya documentos en ese rango, pero también que la sesión contra el portal de la DIAN no alcanzara a establecerse. Antes de concluir que no hay documentos, repita la consulta; si a la segunda tampoco devuelve nada, verifique el rango y el tipo Received o Sent. Estamos trabajando en que ambos casos se distingan solos.

La consulta tarda mucho

Es normal, y el tiempo depende de la vía. Solo el listado: una semana responde en menos de un minuto, un mes puede tardar dos. Listado y XML: unos 44 documentos por minuto, así que un mes de 160 documentos son unos 4 minutos. El portal de la DIAN limita por dirección IP y rechaza lo que va más rápido, de modo que el servicio mantiene el paso a propósito. No la cancele: si Postman corta, no sabrá si falló el servicio o el cliente.

401 No autorizado

La clave de acceso no llegó o no coincide. Compruebe que la variable api_key de la colección conserva el valor con el que se la entregamos y que no quedó vacía al importar.

422 con una lista de campos

Falta algún dato del cuerpo o tiene mal formato. Lo más habitual son las fechas: deben ir como AAAA-MM-DD. El mensaje indica exactamente qué campo falló.

422 con rangos_sugeridos

No es un error suyo: el rango tiene más de 400 documentos y no cabe en una sola llamada. No se descargó nada y no se gastó cupo del portal. La respuesta trae los tramos de fechas en que conviene partirlo, ya calculados con los documentos que hay en cada día; copie uno en desde y hasta y repita.

Aparecen documentos con no_aplica

Tampoco es un error. El listado de compras incluye acuses RADIAN, que no son facturas y no tienen nada que extraer. Se le entregan igual, contados aparte como «sin factura», para que el total cuadre con lo que muestra el portal de la DIAN.

502 o un mensaje sobre el portal de la DIAN

El enlace AuthToken caducó o el portal rechazó la sesión. Pida un enlace nuevo desde el portal de factura electrónica y actualice la variable url_token.

Faltan valorNumerico e impuestos

La consulta se resolvió por una vía alterna que no entrega el desglose. Repita la consulta: la vía habitual sí los incluye. Si se repite, avísenos.

¿Dudas durante la prueba?

Escríbanos y lo revisamos con usted. Si prefiere, le acompañamos en la primera consulta.