Documentación · Referencia · API v1 · versión 2026-10-22
Documento soporte
Las operaciones de Documento soporte de la API de Trevol: parámetros, cuerpo, respuestas y ejemplos de código.
Documento soporte en adquisiciones a no obligados a facturar (05) y su nota de ajuste (95). Se generan, no se expiden: sin PDF, ZIP ni correo.
Los ejemplos son peticiones con cURL. La llave va en TREVOL_API_KEY; los cuerpos de ejemplo son los de la especificación. Los errores comunes están en Errores.
Emitir un documento soporte
POST /v1/support_documents · createSupportDocument
Genera un documento soporte (tipo 05): el respaldo de una compra a quien no está obligado a facturar (una persona natural, un campesino, un proveedor del exterior). Trevol valida a fondo ANTES de reservar un número, numera con el rango de documento soporte vigente más nuevo (o el del prefijo de numbering), firma con el certificado de la empresa y lo manda a la DIAN. Se genera, no se expide: no hay PDF, ZIP ni correo; el XML y la respuesta de la DIAN se descargan en las dos versiones. La empresa necesita su software registrado ante la DIAN (company_not_enabled con reason: missing_software) y un rango vigente con números libres (numbering_unavailable, no_resolution). La purchase_date de cada línea no puede ser posterior a hoy (DSFC02b/c). Cuenta como documento de facturación en el cobro.
Respuestas. 201 la DIAN lo validó (status: accepted). 202 solo en la versión 2026-10-22: la DIAN no contestó (processing), otra petición lo está enviando (sending) o, en habilitación, el set de pruebas todavía lo valida (validating, en las dos versiones); trae Location y Retry-After, y el resultado llega por GET y por webhook: no crees otro documento para la misma operación. 422 validation_error (se revisó a fondo ANTES de reservar: no se gastó el número, y errors[] dice el campo), dian_rejected (con document y las reglas traducidas; corrige con PUT y el mismo número), company_not_enabled o numbering_unavailable (con reason). 402 insufficient_balance (producción sin saldo: queda pending con su número). 409 external_id_in_use o duplicate_document (con existing_id). 503 dian_unavailable en la 2026-10-21. Pide Idempotency-Key: repetir la misma devuelve lo mismo sin enviar nada.
Parámetros
Idempotency-KeycabeceratextoobligatorioObligatoria: 1 a 255 caracteres ASCII visibles, única por pedido (7 días).
Cuerpo (SupportDocumentInput, obligatorio)
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.- Quien vende y no está obligado a facturar (el SNO). La empresa de la llave es la compradora: sus datos salen de la empresa. No hay
customer. - Las líneas (1 a 500). Retenciones solo por línea (
withholdings: 05 ReteIVA, 06 ReteRenta); las del documento no se publican. Máximo 500. paymentPaymentnoteslista de textoMáximo 10.referencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.currencySupportCurrencytransmissionper_operation|weeklyper_operation(por defecto, un documento por compra) oweekly(acumulado semanal con un mismo vendedor: cada línea lleva supurchase_date).adjustment_noteSupportAdjustmentReferenceLa nota de ajuste que originó este documento (opcional): {"id": "sda_…"} o {number, cuds, issue_date}.numberingNumberingOpcional: el prefijo de la resolución de documento soporte que numera (una empresa con varios rangos). Sin él, la más nueva vigente. Si no existe,numbering_unavailable(no_resolution).
Respuestas
| Estado | Qué pasó |
|---|---|
| 201 | El documento (SupportDocument) |
| 202 | Versión 2026-10-22: la DIAN no contestó (status: processing; Trevol termina el documento y avisa por webhook; no crees otro documento para la misma venta, y si repites con la misma Idempotency-Key respondemos sin enviar) o el documento se está enviando (status: sending); también la contingencia (status: contingency). Lleva Location y, salvo la contingencia, Retry-After: 30. En 2026-10-21 la DIAN sin contestar es un 503 dian_unavailable. (SupportDocument) |
| 402 | Error (application/problem+json) (Problem) |
| 409 | Error (application/problem+json) (Problem) |
| 422 | Error (application/problem+json) (Problem) |
| 429 | Error (application/problem+json) (Problem) |
| 503 | Error (application/problem+json) (Problem) |
| Error | Error (application/problem+json) (Problem) |
POST /v1/support_documents
curl -X POST "https://api.trevol.si/v1/support_documents" \
-H "Authorization: Bearer $TREVOL_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"external_id": "OC-991",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"notes": [
"Compra de la semana 42 de octubre"
]
}'{
"id": "sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b",
"object": "support_document",
"environment": "test",
"status": "accepted",
"number": "DS994001",
"prefix": "DS",
"external_id": "OC-991",
"origin": "api",
"cuds": "abababababababababababababababababababababababababababababababababababababababababababababababab",
"qr": "https://catalogo-vpfe-hab.dian.gov.co/document/searchqr?documentkey=abababababababababababababababababababababababababababababababababababababababababababababababab",
"issued_at": "2026-10-23T09:15:02-05:00",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"transmission": "per_operation",
"adjustment_note": null,
"totals": {
"subtotal": "216000.00",
"discounts": "0.00",
"line_extension": "216000.00",
"tax_exclusive": "0.00",
"taxes": [],
"allowances": "0.00",
"charges": "0.00",
"rounding": "0.00",
"total": "216000.00",
"withholdings": [],
"prepayments": "0.00",
"net_payable": null,
"items": [
{
"gross": "216000.00",
"discount": "0.00",
"line_extension": "216000.00"
}
]
},
"dian": {
"status_code": "00",
"message": "Procesado Correctamente.",
"rules": []
},
"delivery": {
"status": null,
"pdf": false,
"zip": false,
"xml": true,
"email": null
},
"created_at": "2026-10-23T09:15:02-05:00",
"updated_at": "2026-10-23T09:15:03-05:00"
}Calcular un documento soporte sin emitirlo
POST /v1/support_documents/preview · previewSupportDocument
Valida y calcula los totales del documento soporte sin reservar un número ni enviar nada. No pide Idempotency-Key y no se cobra.
Cuerpo (SupportDocumentInput, obligatorio)
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.- Quien vende y no está obligado a facturar (el SNO). La empresa de la llave es la compradora: sus datos salen de la empresa. No hay
customer. - Las líneas (1 a 500). Retenciones solo por línea (
withholdings: 05 ReteIVA, 06 ReteRenta); las del documento no se publican. Máximo 500. paymentPaymentnoteslista de textoMáximo 10.referencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.currencySupportCurrencytransmissionper_operation|weeklyper_operation(por defecto, un documento por compra) oweekly(acumulado semanal con un mismo vendedor: cada línea lleva supurchase_date).adjustment_noteSupportAdjustmentReferenceLa nota de ajuste que originó este documento (opcional): {"id": "sda_…"} o {number, cuds, issue_date}.numberingNumberingOpcional: el prefijo de la resolución de documento soporte que numera (una empresa con varios rangos). Sin él, la más nueva vigente. Si no existe,numbering_unavailable(no_resolution).
Respuestas
POST /v1/support_documents/preview
curl -X POST "https://api.trevol.si/v1/support_documents/preview" \
-H "Authorization: Bearer $TREVOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "OC-991",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"notes": [
"Compra de la semana 42 de octubre"
]
}'Reenviar una pendiente o en error
POST /v1/support_documents/{id}/send · sendSupportDocument
Vuelve a enviar un documento soporte pending o error (por ejemplo, después de recargar saldo).
Sin cuerpo. Con un documento accepted responde 200 con el documento tal cual; con uno que la DIAN todavía verifica no reenvía nada (202); con uno rejected es 409 invalid_state (se corrige con PUT). No pide Idempotency-Key (reintentarlo es seguro).
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | El documento (SupportDocument) |
| 202 | Versión 2026-10-22: la DIAN no contestó (status: processing; Trevol termina el documento y avisa por webhook; no crees otro documento para la misma venta, y si repites con la misma Idempotency-Key respondemos sin enviar) o el documento se está enviando (status: sending); también la contingencia (status: contingency). Lleva Location y, salvo la contingencia, Retry-After: 30. En 2026-10-21 la DIAN sin contestar es un 503 dian_unavailable. (SupportDocument) |
| 409 | Error (application/problem+json) (Problem) |
| Error | Error (application/problem+json) (Problem) |
POST /v1/support_documents/{id}/send
curl -X POST "https://api.trevol.si/v1/support_documents/sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b/send" \
-H "Authorization: Bearer $TREVOL_API_KEY"{
"id": "sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b",
"object": "support_document",
"environment": "test",
"status": "accepted",
"number": "DS994001",
"prefix": "DS",
"external_id": "OC-991",
"origin": "api",
"cuds": "abababababababababababababababababababababababababababababababababababababababababababababababab",
"qr": "https://catalogo-vpfe-hab.dian.gov.co/document/searchqr?documentkey=abababababababababababababababababababababababababababababababababababababababababababababababab",
"issued_at": "2026-10-23T09:15:02-05:00",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"transmission": "per_operation",
"adjustment_note": null,
"totals": {
"subtotal": "216000.00",
"discounts": "0.00",
"line_extension": "216000.00",
"tax_exclusive": "0.00",
"taxes": [],
"allowances": "0.00",
"charges": "0.00",
"rounding": "0.00",
"total": "216000.00",
"withholdings": [],
"prepayments": "0.00",
"net_payable": null,
"items": [
{
"gross": "216000.00",
"discount": "0.00",
"line_extension": "216000.00"
}
]
},
"dian": {
"status_code": "00",
"message": "Procesado Correctamente.",
"rules": []
},
"delivery": {
"status": null,
"pdf": false,
"zip": false,
"xml": true,
"email": null
},
"created_at": "2026-10-23T09:15:02-05:00",
"updated_at": "2026-10-23T09:15:03-05:00"
}Listar (documento soporte)
GET /v1/support_documents · listSupportDocuments
Paginación por cursor (limit hasta 100, starting_after) y filtros status, external_id, created_from y created_to. status=error trae también los que están en verificación (processing).
Parámetros
limitconsultaenterostarting_afterconsultatextostatusconsultatextoexternal_idconsultatextocreated_fromconsultatextocreated_toconsultatexto
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | {object: list, data, has_more, next_cursor} (objeto) |
| Error | Error (application/problem+json) (Problem) |
GET /v1/support_documents
curl "https://api.trevol.si/v1/support_documents?limit=100" \
-H "Authorization: Bearer $TREVOL_API_KEY"Un documento soporte
GET /v1/support_documents/{id} · retrieveSupportDocument
El documento soporte tal como se emitió: lo que mandaste, los totales, el CUDS y la respuesta de la DIAN. delivery no aplica (status: null).
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | El documento (SupportDocument) |
| Error | Error (application/problem+json) (Problem) |
GET /v1/support_documents/{id}
curl "https://api.trevol.si/v1/support_documents/sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b" \
-H "Authorization: Bearer $TREVOL_API_KEY"{
"id": "sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b",
"object": "support_document",
"environment": "test",
"status": "accepted",
"number": "DS994001",
"prefix": "DS",
"external_id": "OC-991",
"origin": "api",
"cuds": "abababababababababababababababababababababababababababababababababababababababababababababababab",
"qr": "https://catalogo-vpfe-hab.dian.gov.co/document/searchqr?documentkey=abababababababababababababababababababababababababababababababababababababababababababababababab",
"issued_at": "2026-10-23T09:15:02-05:00",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"transmission": "per_operation",
"adjustment_note": null,
"totals": {
"subtotal": "216000.00",
"discounts": "0.00",
"line_extension": "216000.00",
"tax_exclusive": "0.00",
"taxes": [],
"allowances": "0.00",
"charges": "0.00",
"rounding": "0.00",
"total": "216000.00",
"withholdings": [],
"prepayments": "0.00",
"net_payable": null,
"items": [
{
"gross": "216000.00",
"discount": "0.00",
"line_extension": "216000.00"
}
]
},
"dian": {
"status_code": "00",
"message": "Procesado Correctamente.",
"rules": []
},
"delivery": {
"status": null,
"pdf": false,
"zip": false,
"xml": true,
"email": null
},
"created_at": "2026-10-23T09:15:02-05:00",
"updated_at": "2026-10-23T09:15:03-05:00"
}Archivo xml
GET /v1/support_documents/{id}/xml · downloadSupportDocumentXml
El XML firmado que se mandó a la DIAN (application/xml).
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | xml (archivo) |
| Error | Error (application/problem+json) (Problem) |
GET /v1/support_documents/{id}/xml
curl "https://api.trevol.si/v1/support_documents/sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b/xml" \
-H "Authorization: Bearer $TREVOL_API_KEY" \
-o support_document_xml.xmlArchivo dian_response
GET /v1/support_documents/{id}/dian_response · downloadSupportDocumentDianResponse
El ApplicationResponse con que la DIAN contestó (application/xml), en las dos versiones.
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | dian_response (archivo) |
| Error | Error (application/problem+json) (Problem) |
GET /v1/support_documents/{id}/dian_response
curl "https://api.trevol.si/v1/support_documents/sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b/dian_response" \
-H "Authorization: Bearer $TREVOL_API_KEY" \
-o support_document_dian_response.xmlCorregir un documento soporte rechazado (mismo número) y reenviarlo
PUT /v1/support_documents/{id} · correctSupportDocument
Corrige un documento soporte rechazado con el mismo número y lo vuelve a enviar.
Solo si el documento está rejected, error o pending. Uno accepted no se corrige (se ajusta con una nota) y uno que la DIAN todavía verifica es 409 invalid_state: espera el resultado. El external_id y la numeración no se cambian. Pide Idempotency-Key.
Parámetros
Idempotency-KeycabeceratextoobligatorioObligatoria: 1 a 255 caracteres ASCII visibles, única por pedido (7 días).
Cuerpo (SupportDocumentInput, obligatorio)
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.- Quien vende y no está obligado a facturar (el SNO). La empresa de la llave es la compradora: sus datos salen de la empresa. No hay
customer. - Las líneas (1 a 500). Retenciones solo por línea (
withholdings: 05 ReteIVA, 06 ReteRenta); las del documento no se publican. Máximo 500. paymentPaymentnoteslista de textoMáximo 10.referencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.currencySupportCurrencytransmissionper_operation|weeklyper_operation(por defecto, un documento por compra) oweekly(acumulado semanal con un mismo vendedor: cada línea lleva supurchase_date).adjustment_noteSupportAdjustmentReferenceLa nota de ajuste que originó este documento (opcional): {"id": "sda_…"} o {number, cuds, issue_date}.numberingNumberingOpcional: el prefijo de la resolución de documento soporte que numera (una empresa con varios rangos). Sin él, la más nueva vigente. Si no existe,numbering_unavailable(no_resolution).
Respuestas
| Estado | Qué pasó |
|---|---|
| 200 | El documento (SupportDocument) |
| 202 | Versión 2026-10-22: la DIAN no contestó (status: processing; Trevol termina el documento y avisa por webhook; no crees otro documento para la misma venta, y si repites con la misma Idempotency-Key respondemos sin enviar) o el documento se está enviando (status: sending); también la contingencia (status: contingency). Lleva Location y, salvo la contingencia, Retry-After: 30. En 2026-10-21 la DIAN sin contestar es un 503 dian_unavailable. (SupportDocument) |
| 409 | Error (application/problem+json) (Problem) |
| Error | Error (application/problem+json) (Problem) |
PUT /v1/support_documents/{id}
curl -X PUT "https://api.trevol.si/v1/support_documents/sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b" \
-H "Authorization: Bearer $TREVOL_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"external_id": "OC-991",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"notes": [
"Compra de la semana 42 de octubre"
]
}'{
"id": "sd_3f0c1a2b3f0c1a2b3f0c1a2b3f0c1a2b",
"object": "support_document",
"environment": "test",
"status": "accepted",
"number": "DS994001",
"prefix": "DS",
"external_id": "OC-991",
"origin": "api",
"cuds": "abababababababababababababababababababababababababababababababababababababababababababababababab",
"qr": "https://catalogo-vpfe-hab.dian.gov.co/document/searchqr?documentkey=abababababababababababababababababababababababababababababababababababababababababababababababab",
"issued_at": "2026-10-23T09:15:02-05:00",
"seller": {
"resident": true,
"person_type": "natural",
"document_type": "31",
"document_number": "1020304050",
"name": "PEREZ GOMEZ ANA MARIA",
"address": "Vereda El Silencio, finca La Esperanza",
"municipality_code": "25053",
"postal_code": "252007",
"tax_responsibilities": [
"R-99-PN"
]
},
"items": [
{
"description": "Leche cruda",
"unit": "LTR",
"quantity": "120",
"unit_price": "1800"
}
],
"payment": {
"form": "cash",
"methods": [
{
"code": "10"
}
]
},
"transmission": "per_operation",
"adjustment_note": null,
"totals": {
"subtotal": "216000.00",
"discounts": "0.00",
"line_extension": "216000.00",
"tax_exclusive": "0.00",
"taxes": [],
"allowances": "0.00",
"charges": "0.00",
"rounding": "0.00",
"total": "216000.00",
"withholdings": [],
"prepayments": "0.00",
"net_payable": null,
"items": [
{
"gross": "216000.00",
"discount": "0.00",
"line_extension": "216000.00"
}
]
},
"dian": {
"status_code": "00",
"message": "Procesado Correctamente.",
"rules": []
},
"delivery": {
"status": null,
"pdf": false,
"zip": false,
"xml": true,
"email": null
},
"created_at": "2026-10-23T09:15:02-05:00",
"updated_at": "2026-10-23T09:15:03-05:00"
}