Documentación · Referencia · API v1 · versión 2026-10-22
Objetos
Todos los objetos de la API de Trevol con sus campos, tipos y cuáles son obligatorios.
Cada objeto de la API, con sus campos. Los campos obligatorios llevan «sí». Los tipos enlazan a su objeto.
Balance
El saldo prepago de Trevol. Es de la cuenta, no de la empresa: todas las empresas de la cuenta lo comparten (shared: true) y cualquier llave de cualquiera de ellas, de lectura o de escritura, test o live, ve el mismo. Solo lo que se emite en producción (llaves live) lo consume; la habilitación (test) no cobra. available es lo que se puede gastar (en pesos); held, lo apartado por documentos que la DIAN todavía valida; overdraft, cuánto puede bajar available de cero al apartar un documento; low_threshold, el umbral del aviso de saldo bajo (el 20 % de la última recarga; null sin recargas). level: empty con available ≤ 0, low por debajo de low_threshold, si no ok. Con available por debajo del precio de un documento, emitir en producción responde 402 insufficient_balance. El evento balance.low avisa por webhook.
objectbalanceobligatoriocurrencyCOPobligatorioavailableenteroobligatorioLo que se puede gastar, en pesos (puede ser negativo).heldenteroobligatorioApartado por documentos que la DIAN todavía valida.overdraftenteroobligatorioCuánto puede bajaravailablede cero al apartar un documento.low_thresholdentero (puede ser null)obligatorioEl umbral del aviso de saldo bajo; null sin recargas.levelok|low|emptyobligatorioupdated_atfecha y hora (puede ser null)obligatorioCuándo cambió el saldo por última vez; null si nunca tuvo.sharedtrueobligatorioSiempre true: el saldo es de la cuenta y lo comparten todas sus empresas.
BalanceTransaction
Un movimiento del saldo de la cuenta (un documento es una sola fila).
idtextoobligatorioÚsalo enstarting_afterpara pedir la página siguiente.objectbalance_transactionobligatoriotypedocument|top_up|bonus|adjustment|top_up_reversal|license_fee|expiration|otherobligatoriostatuscharged|pending|released|completedobligatorioDe un documento: pending, charged o released. Lo demás: completed.amountenteroobligatorioLo que hizo con el disponible, en pesos y con signo (released: 0).available_afterentero (puede ser null)obligatorioEl disponible justo después.descriptiontextoobligatorioEn español, como en la app.documentobjeto (puede ser null)obligatorioSolo entype: document.companyobjeto (puede ser null)obligatorioLa empresa de la cuenta que emitió el documento.referencetexto (puede ser null)La referencia TRV-REC-… de una recarga o de su reverso.created_atfecha y horaobligatorio
Carrier
document_typetextoTipo de documento del transportador (tabla 13.2.1).document_numbertextoSin DV ni puntos; el DV lo calcula Trevol.nametextotax_responsibilitieslista de textoTabla 13.2.6.1 (O-13, O-15, O-23, O-47, R-99-PN). Máximo 20.emailtextophonetextoaddressForeignAddress
Company
La empresa de la llave, su ambiente y sus numeraciones activas.
objectcompanyidtextonittexto (puede ser null)check_digitentero (puede ser null)nametexto (puede ser null)La razón social.trade_nametexto (puede ser null)statusenabled|not_enabledenvironmenttest|live|null(puede ser null)numberinglista de objetoLas numeraciones (resoluciones) activas del ambiente de la llave.keyobjetoLa llave con que se llamó.capabilitiesobjeto libreLo que ESTA llave puede emitir ahora (documento soporte, equivalente, nómina, eventos RADIAN). Informativo: si una lectura falla, esa clave no aparece.
Consumption
unittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).subtotaldecimalobligatorioNúmero o texto decimal con punto («150000.50»).discountslista de ConsumptionAdjustmentMáximo 50.chargeslista de ConsumptionAdjustmentMáximo 50.meterMeter
Contingency
physical_documentPhysicalDocument
Currency
codetextoobligatorioMoneda (tabla 13.3.3, ISO 4217), distinta de COP.exchange_ratedecimalobligatorioTRM o tasa pactada: pesos por 1 unidad de la moneda (hasta 6 decimales).rate_datefecha (AAAA-MM-DD)obligatorioEl día de la tasa; no puede ser posterior a la factura.alternativeSupportCurrency
Customer
final_consumerbooleanodocument_typetextoTipo de documento (tabla 13.2.1 de la DIAN): 13 CC, 31 NIT, 22 CE, 41 PA…document_numbertextoSin DV ni puntos; el DV lo calcula Trevol.check_digitenteroOpcional: si viene, tiene que ser el DV del NIT.nametextoperson_typelegal|naturalPor defecto se deduce del NIT.emailtextophonetextoaddresstextocitytextomunicipality_codetextoCódigo DANE del municipio (5 dígitos).department_codetextotax_responsibilitieslista de textoTabla 13.2.6.1 (O-13, O-15, O-23, O-47, R-99-PN). Máximo 20.tax_schemetextoTaxScheme del adquiriente: 01, 04, ZA o ZZ (por defecto ZZ).countrytextoPaís del cliente (tabla 13.4.1, ISO 3166-1 alfa-2). Distinto de "CO": cliente en el exterior, sinmunicipality_code; concity,regionypostal_code. Solo en facturas.regiontextoDepartamento, estado o provincia del cliente en el exterior. Solo en facturas.region_codetextoCódigo de la región del cliente en el exterior (máximo 6). Solo en facturas.postal_codetextoCódigo postal del cliente en el exterior (máximo 10). Solo en facturas.
Delivery
Con la versión 2026-10-22, el PDF, el ZIP y el correo se hacen en segundo plano después del 201: casi siempre llegan pending y se completan en segundos (GET o el evento ….delivered). Si pides …/pdf o …/zip antes, se generan al momento. Con la 2026-10-21 se hacen antes del 201, como en la fase 1.
statuspending|completed|null(puede ser null)null si el documento no estáaccepted;completedcon PDF, ZIP y un correo en estado final (sent, skipped, failed, bounced o complained).pdfbooleanozipbooleanoxmlbooleanoemailobjeto (puede ser null)
Document
idtextoinv_… | cn_… | dn_…objectinvoice|credit_note|debit_noteenvironmenttest|livestatuspending|sending|accepted|rejected|error|contingency|processingprocessingsolo en la versión 2026-10-22: la DIAN no confirmó y Trevol sigue resolviendo el documento (el resultado llega por GET y por webhook; no crees otro documento para la misma venta). En 2026-10-21 ese documento se ve comoerror.numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|app|contapymecufetexto (puede ser null)cudetexto (puede ser null)qrtexto (puede ser null)issued_atfecha y hora (puede ser null)customerCustomeritemslista de ItempaymentPaymentinvoiceInvoiceReferencedocument_typetextoTipo de factura (tabla 13.1.3): 01 venta, 02 exportación.operation_typetextoTipo de operación (tabla 13.1.5.1).currencyCurrencycop_totalsbooleanodelivery_termsDeliveryTermsshipmentShipmentdue_diligencetextoDebida diligencia (tabla 18.3).interoperabilityInteroperabilitytotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales, siempre en pesos. Con moneda extranjera,currencytrae el equivalente.dianobjetodeliveryDeliverycreated_atfecha y horaupdated_atfecha y hora (puede ser null)
DocumentEventData
Resumen de un documento. Pide el documento completo con GET /v1/{invoices|credit_notes|debit_notes}/{id}.
objectinvoice|credit_note|debit_noteobligatorioidtextoobligatorioinv_… | cn_… | dn_… (el mismo de la respuesta de la API).statuspending|sending|accepted|rejected|error|contingencyobligatorioNuncaprocessing: ese estado solo existe en las respuestas de la API.environmenttest|liveobligatorionumbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)Tu identificador, solo en los documentos creados por la API.originapi|app|contapymecufetexto (puede ser null)En las facturas.cudetexto (puede ser null)En las notas crédito y débito.issued_atfecha y hora (puede ser null)totaltexto (puede ser null)Texto decimal con dos decimales.invoiceobjeto (puede ser null)En las notas: la factura de Trevol que corrigen.dianobjetoobligatoriodeliveryobjetoobligatorioerrorobjetoSolo en….error. El texto es fijo por código: nunca el mensaje de la DIAN.
EquivalentAdjustmentItem
codetextoCódigo (texto).descriptiontextoobligatoriounittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).unit_pricedecimalobligatorioPrecio unitario SIN impuestos.taxeslista de ItemTaxImpuestos de la línea: {code, rate} porcentual, {code: "01", excluded: true} o nominal {code, unit_amount, unit?, quantity?}. Máximo 12.discountslista de ItemAllowanceMáximo 10.chargeslista de ItemAllowanceMáximo 10.free_of_chargeFreeOfChargestandard_codeStandardCodebrandtextomodeltextoincomeown|collected|third_partyMandatos (tabla 16.16): "own" (por defecto), "collected" o "third_party".mandatorItemMandator
EquivalentDocument
Un documento equivalente electrónico (tiquete POS 20 y los demás tipos de la tabla 16.3). Se expide como la factura: archivos pdf, xml, zip y dian_response.
idtextopos_… (todos los tipos de documento equivalente)objectequivalent_documentenvironmenttest|livestatuspending|sending|accepted|rejected|error|contingency|processing|validatingprocessingsolo en la versión 2026-10-22: la DIAN no confirmó y Trevol sigue resolviendo el documento (el resultado llega por GET y por webhook; no crees otro documento para la misma venta). En 2026-10-21 ese documento se ve comoerror.validating: el set de pruebas de la DIAN (habilitación) recibió el documento y todavía lo valida; no es un error, responde 202 en las dos versiones y Trevol solo consulta (nunca reenvía).numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|app|contapymecudetexto (puede ser null)El código único del documento (CUDE, 96 hex).qrtexto (puede ser null)issued_atfecha y hora (puede ser null)customerCustomeritemslista de EquivalentItempaymentPaymentdocument_type20|25|27|30|35|40|45|50|55|60Tipo de documento equivalente (tabla 16.3).operation_typetextoTipo de operación (CustomizationID, tabla 16.4.1).totalsobjeto (puede ser null)Montos como texto decimal con 2 decimales, siempre en pesos. Con moneda extranjera,currencytrae el equivalente.dianobjetodeliveryDeliverycreated_atfecha y horaupdated_atfecha y hora (puede ser null)noteslista de textoperiodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeprepaymentslista de Prepaymentroundingbooleano o decimalwithholdingslista de WithholdingposPosextensionExtensionorigin_noteOriginNotecontingencyobjeto (puede ser null)
EquivalentDocumentAdjustment
Una nota de ajuste de un documento equivalente (crédito 94 o débito 93). Se expide como la factura: archivos pdf, xml, zip y dian_response.
idtextoposa_…objectequivalent_document_adjustmentenvironmenttest|livestatuspending|sending|accepted|rejected|error|contingency|processing|validatingprocessingsolo en la versión 2026-10-22: la DIAN no confirmó y Trevol sigue resolviendo el documento (el resultado llega por GET y por webhook; no crees otro documento para la misma venta). En 2026-10-21 ese documento se ve comoerror.validating: el set de pruebas de la DIAN (habilitación) recibió el documento y todavía lo valida; no es un error, responde 202 en las dos versiones y Trevol solo consulta (nunca reenvía).numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|app|contapymecudetexto (puede ser null)El código único del documento (CUDE, 96 hex).qrtexto (puede ser null)issued_atfecha y hora (puede ser null)customerCustomeritemslista de EquivalentAdjustmentItempaymentPaymenttotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales, siempre en pesos. Con moneda extranjera,currencytrae el equivalente.dianobjetodeliveryDeliverycreated_atfecha y horaupdated_atfecha y hora (puede ser null)noteslista de textoperiodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeprepaymentslista de Prepaymentroundingbooleano o decimalnote_typecredit|debitconcepttextoConcepto de la nota (tabla 16.6): 1 a 5.descriptiontextoequivalent_documentEquivalentDocumentReference
EquivalentDocumentAdjustmentInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.customerCustomerOpcional conequivalent_document.id: se toma el adquirente del documento (si viene, tiene que ser el mismo).- Las líneas (1 a 500). Máximo 500.
paymentPaymentnoteslista de textoMáximo 10.periodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.prepaymentslista de PrepaymentAnticipos (informativos: no restan del total). Máximo 20.roundingbooleano o decimaltrue = redondeo al peso; o un valor entre -2.00 y 2.00.note_typecredit|debitobligatorio"credit" (nota de ajuste crédito, 94) o "debit" (débito, 93).concepttextoobligatorioConcepto de la nota (tabla 16.6): "1" devolución parcial, "2" anulación del documento (lleva exactamente sus valores), "3" rebaja o descuento, "4" ajuste de precio, "5" otros.descriptiontextoOpcional (20 a 5000 caracteres). Sin ella, Trevol pone el texto de la tabla (el EXACTO en la nota débito: NADBF04).- El documento que ajusta: {"id": "pos_…"} (de Trevol: validado, de la empresa y el ambiente de la llave) o {number, cude, issue_date, document_type, total?} si es de otra plataforma (
totalhace falta para anularlo).
EquivalentDocumentEventData
Resumen de un documento equivalente electrónico o de su nota de ajuste (nunca datos del comprador ni líneas). Pide el documento completo con GET /v1/{equivalent_documents|equivalent_document_adjustments}/{id}.
statuspending|sending|accepted|rejected|error|contingencyobligatorioNuncaprocessing: ese estado solo existe en las respuestas de la API.environmenttest|liveobligatorionumbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)Tu identificador, solo en los documentos creados por la API.originapi|app|contapymeissued_atfecha y hora (puede ser null)totaltexto (puede ser null)Texto decimal con dos decimales.dianobjetoobligatorioerrorobjetoSolo en….error. El texto es fijo por código: nunca el mensaje de la DIAN.objectequivalent_document|equivalent_document_adjustmentobligatorioidtextoobligatoriopos_… | posa_…cudetexto (puede ser null)Código único del documento.document_typetextoEl tipo de documento equivalente (20 POS, 25, 27, 30…). Solo enequivalent_document.equivalent_documentobjetoEn la nota de ajuste: el documento equivalente que ajusta.deliveryobjetoobligatorio
EquivalentDocumentInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.customerCustomerEl adquirente. Para consumidor final: {"final_consumer": true}. La relación de juegos (30) no llevacustomer: el adquirente es la DIAN.- Las líneas (1 a 500). Retenciones solo como autorretenciones del emisor (
self_withholding: true). Máximo 500. paymentPaymentnoteslista de textoMáximo 10.periodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.prepaymentslista de PrepaymentAnticipos (informativos: no restan del total). Máximo 20.withholdingslista de WithholdingRetenciones (informativas): 05 ReteIVA, 06 ReteRenta, 07 ReteICA. Máximo 10.roundingbooleano o decimaltrue = redondeo al peso; o un valor entre -2.00 y 2.00.document_typetextoTipo de documento equivalente (tabla 16.3): "20" tiquete POS (por defecto), "25" boleta de cine, "27" espectáculos públicos, "30" juegos localizados y no localizados (se acepta "32"), "35" transporte de pasajeros, "40" peajes, "45" extracto, "50" tiquete aéreo, "55" bolsa de valores o "60" servicios públicos.operation_typetextoTipo de operación (CustomizationID, tabla 16.4.1) del tipo de documento. Por defecto, el primero del tipo ("10" en el POS).posPosObligatorio en el tiquete POS (20) y prohibido en los demás: la caja que expide el tiquete y, opcional, los beneficios del comprador.extensionExtensionLa información propia del tipo, con UNA clave, la de sudocument_type:cinema(25),show(27),games(30),transport(35),air(50),stock_exchange(55) opublic_services(60). Prohibida en el POS (20), peajes (40) y extracto (45).prefixtextoSolo en los tipos sin resolución (todos menos el POS): el prefijo del consecutivo propio (1 a 4 letras o dígitos). Por defecto, el del tipo (DEC, DEEP, DEJL, DETT, DEP, EXT, DETA, DEBV, SPD).origin_noteOriginNoteLa nota de ajuste que dio origen a este documento (opcional).contingencyContingencySolo la contingencia 07 (el emisor transcribe un documento físico):physical_documentcon number, date y type. La 08 (la DIAN no contestó) no se pide: la decide Trevol y el documento responde202constatus: contingency.numberingNumberingSolo en el POS: el prefijo de la resolución POS que numera (una empresa con varias cajas o establecimientos tiene varias). Sin él, la más nueva vigente. Si no existe,numbering_unavailable(no_resolution).
EquivalentItem
codetextoCódigo (texto).descriptiontextoobligatoriounittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).unit_pricedecimalobligatorioPrecio unitario SIN impuestos.taxeslista de ItemTaxImpuestos de la línea: {code, rate} porcentual, {code: "01", excluded: true} o nominal {code, unit_amount, unit?, quantity?}. Máximo 12.discountslista de ItemAllowanceMáximo 10.chargeslista de ItemAllowanceMáximo 10.withholdingslista de ItemWithholdingRetenciones (informativas): 05 ReteIVA, 06 ReteRenta, 07 ReteICA. Máximo 10.free_of_chargeFreeOfChargestandard_codeStandardCodebrandtextomodeltextoincomeown|collected|third_partyMandatos (tabla 16.16): "own" (por defecto), "collected" (ingreso recaudado para terceros) o "third_party" (facturado para terceros); los dos últimos conmandator. En 272 y 274 la línea del mandante va con "collected".mandatorItemMandatorEl mandante de un ingreso para terceros (con NIT en 272 y 274).
Event
Exactamente lo que se manda al endpoint (los bytes firmados) y lo que devuelve GET /v1/events. El mismo id (también en la cabecera webhook-id) llega en cada reintento y en un reenvío manual: úsalo para no procesar dos veces el mismo evento.
idtextoobligatorioobjecteventobligatoriotypeinvoice.accepted|invoice.rejected|invoice.error|invoice.delivered|invoice.email_bounced|invoice.email_failed|credit_note.accepted|credit_note.rejected|credit_note.error|credit_note.delivered|credit_note.email_bounced|credit_note.email_failed|debit_note.accepted|debit_note.rejected|debit_note.error|debit_note.delivered|debit_note.email_bounced|debit_note.email_failed|balance.low|numbering.low|numbering.expiring|certificate.expiring|support_document.accepted|support_document.rejected|support_document.error|support_document_adjustment.accepted|support_document_adjustment.rejected|support_document_adjustment.error|equivalent_document.accepted|equivalent_document.rejected|equivalent_document.error|equivalent_document.delivered|equivalent_document.email_bounced|equivalent_document.email_failed|equivalent_document_adjustment.accepted|equivalent_document_adjustment.rejected|equivalent_document_adjustment.error|equivalent_document_adjustment.delivered|equivalent_document_adjustment.email_bounced|equivalent_document_adjustment.email_failed|payroll.accepted|payroll.rejected|payroll.error|payroll_adjustment.accepted|payroll_adjustment.rejected|payroll_adjustment.error|radian_event.accepted|radian_event.rejected|radian_event.error|webhook.testobligatoriotimestampfecha y horaobligatorioUTC.environmenttest|liveobligatorioapi_versiontextoobligatorioLa versión vigente más nueva de la API; el resumen del documento no cambia con la versión de la llave.
Extension
La información propia del tipo de documento equivalente: UNA clave, la de su document_type (cinema 25, show 27, games 30, transport 35, air 50, stock_exchange 55, public_services 60).
cinemaCinemaExtensionshowShowExtensiongamesGamesExtensiontransportTransportExtensionairAirExtensionstock_exchangeStockExchangeExtensionpublic_servicesPublicServicesExtension
GamesExtension
- Máximo 2.
creditslista de GameCreditMáximo 500.
InvoiceInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.customerCustomer- Las líneas (1 a 500). Máximo 500.
paymentPaymentnoteslista de textoMáximo 10.periodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.prepaymentslista de PrepaymentAnticipos (informativos: no restan del total). Máximo 20.withholdingslista de WithholdingRetenciones (informativas): 05 ReteIVA, 06 ReteRenta, 07 ReteICA. Máximo 10.roundingbooleano o decimaltrue = redondeo al peso; o un valor entre -2.00 y 2.00.document_typetextoTipo de factura (tabla 13.1.3): "01" venta (por defecto) o "02" exportación. La contingencia (03/04) todavía no está disponible en la API.operation_typetextoTipo de operación (tabla 13.1.5.1): "10" estándar (por defecto), "09" AIU, "11" mandatos, "12" transporte de carga, "14" notarios, "15" compra o "16" venta de divisas, o "SS-CUFE" (sector salud, coninteroperability).currencyCurrencyMoneda extranjera: los valores del pedido van en ESA moneda; la factura y el CUFE van en pesos (× la tasa). Sincurrency, la factura es en pesos.cop_totalsbooleanoConcurrency: informa la moneda y la tasa en la interoperabilidad («Exportación» / «Factura de Venta»).delivery_termsDeliveryTermsCondiciones de entrega de la exportación (tabla 13.3.7: INCOTERM).shipmentShipmentEl envío físico de la mercancía (fecha, dirección y transportador). No se llamadelivery: esa clave de la respuesta es el estado de los archivos y del correo.due_diligencetextoDebida diligencia (tabla 18.3: "01"–"04"). Obligatoria en la compra y venta de divisas (15/16) y prohibida en los demás tipos de operación.interoperabilityInteroperabilityGrupo de interoperabilidad (Suplemento H). Obligatorio conoperation_type"SS-CUFE".
Item
codetextoCódigo (texto).descriptiontextoobligatoriounittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).unit_pricedecimalobligatorioPrecio unitario SIN impuestos.taxeslista de ItemTaxImpuestos de la línea: {code, rate} porcentual, {code: "01", excluded: true} o nominal {code, unit_amount, unit?, quantity?}. Máximo 12.discountslista de ItemAllowanceMáximo 10.chargeslista de ItemAllowanceMáximo 10.withholdingslista de ItemWithholdingRetenciones (informativas): 05 ReteIVA, 06 ReteRenta, 07 ReteICA. Máximo 10.free_of_chargeFreeOfChargestandard_codeStandardCodebrandtextomodeltextoaiutextoAIU (solo conoperation_type"09"): "A" administración, "I" imprevistos, "U" utilidad. Solo en facturas.aiu_contracttextoEl objeto del contrato AIU: solo en la línea A, y obligatorio en ella. Solo en facturas.incomeown|third_partyMandatos (11): "own" (por defecto) o "third_party" (conmandator). Solo en facturas.mandatorItemMandatorEl mandante de un ingreso para terceros. Solo en facturas.consignmentItemConsignmentLa remesa del RNDC (transporte de carga, 12). Solo en facturas.notaryItemNotaryMatrícula inmobiliaria y valor comercial (notarios, 14). Solo en facturas.propertieslista de ItemPropertyPropiedades libres de la línea (hasta 20; no en el transporte de carga). Solo en facturas. Máximo 20.
ItemConsignment
rndc_filingtextoobligatorioNúmero de radicación de la remesa en el RNDC (1 a 100 000 millones).numbertextoobligatorioConsecutivo interno de la remesa (alfanumérico, hasta 15 caracteres).freightdecimalobligatorioPesos, sin decimales (la ley los fija en pesos: no se convierte).quantitydecimalobligatorioCantidad transportada, sin decimales.unittextoobligatorio"KGM" kilogramos o "GLL" galones.
ItemTax
codetextoobligatorioCódigo (texto).ratedecimalTarifa en % (ICA y ReteICA: por mil).excludedbooleanounit_amountdecimalNúmero o texto decimal con punto («150000.50»).unittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalNúmero o texto decimal con punto («150000.50»).volume_ccdecimalNúmero o texto decimal con punto («150000.50»).nametexto
NoteInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.customerCustomer- Las líneas (1 a 500). Máximo 500.
paymentPaymentnoteslista de textoMáximo 10.periodPeriodreferencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.prepaymentslista de PrepaymentAnticipos (informativos: no restan del total). Máximo 20.withholdingslista de WithholdingRetenciones (informativas): 05 ReteIVA, 06 ReteRenta, 07 ReteICA. Máximo 10.roundingbooleano o decimaltrue = redondeo al peso; o un valor entre -2.00 y 2.00.concepttextoobligatorioConcepto de corrección: NC 1–6, ND 1–4.descriptiontextoinvoiceInvoiceReference
NumberingExpiringEventData
numbering.expiring (solo producción): la resolución vence en 30 y en 7 días.
objectnumberingdocumentinvoice|support_document|equivalent_documentDe qué documento es la numeración (la fase 3 avisa también del documento soporte y del POS).prefixtexto (puede ser null)resolution_numbertextovalid_tofecha (AAAA-MM-DD)days_leftentero
NumberingLowEventData
numbering.low (solo producción): a la resolución le quedan pocos números (10 % del rango, y otra vez con 10 números).
objectnumberingdocumentinvoice|support_document|equivalent_documentDe qué documento es la numeración (la fase 3 avisa también del documento soporte y del POS).prefixtexto (puede ser null)resolution_numbertextoremainingenterotoentero
Payment
formcash|creditobligatoriocash (contado) | credit (crédito: con due_date o term_days).term_daysenterodue_datefecha (AAAA-MM-DD)methodslista de PaymentMethodMedios de pago (tabla 13.3.4.2): 10 efectivo, 42 consignación, 47 transferencia… Máximo 5.
Payroll
Una nómina electrónica individual (102). Archivos xml, zip y dian_response.
idtextopr_…objectpayrollenvironmenttest|livestatuspending|sending|validating|accepted|rejected|error|processingvalidating: el set de pruebas de la DIAN (habilitación) recibió la nómina y todavía la valida; no es un error, responde 202 en las dos versiones y Trevol solo consulta (nunca reenvía).processing: solo en la versión 2026-10-22, la DIAN no contestó y Trevol sigue resolviendo el documento.numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|appcunetexto (puede ser null)El código único de la nómina (CUNE, 96 hex).qrtexto (puede ser null)issued_atfecha y hora (puede ser null)submissionsync|test_set|null(puede ser null)sync: SendNominaSync;test_set: el set de pruebas de habilitación.periodPayrollPeriodpay_periodtextocurrencytextoexchange_ratedecimalTasa de cambio a pesos. Obligatoria con una moneda distinta de COP y prohibida con COP.noveltyPayrollNoveltynoteslista de textoMáximo 20.employeePayrollEmployeepaymentPayrollPaymentpayment_dateslista de fecha (AAAA-MM-DD)Máximo 31.earningsPayrollEarningsdeductionsPayrollDeductionsroundingdecimalRedondeo hasta 2.00; no suma a los totales.generation_placePayrollPlaceemployerPayrollEmployertotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales. Null en un ajuste Eliminar.dianobjetofilesobjetoQué archivos hay (…/xml, …/zip, …/dian_response). No hay PDF.created_atfecha y horaupdated_atfecha y hora (puede ser null)
PayrollAdjustment
Una nota de ajuste de nómina electrónica (103: Reemplazar o Eliminar). Archivos xml, zip y dian_response.
idtextopra_…objectpayroll_adjustmentenvironmenttest|livestatuspending|sending|validating|accepted|rejected|error|processingvalidating: el set de pruebas de la DIAN (habilitación) recibió la nómina y todavía la valida; no es un error, responde 202 en las dos versiones y Trevol solo consulta (nunca reenvía).processing: solo en la versión 2026-10-22, la DIAN no contestó y Trevol sigue resolviendo el documento.numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|appcunetexto (puede ser null)El código único de la nómina (CUNE, 96 hex).qrtexto (puede ser null)issued_atfecha y hora (puede ser null)submissionsync|test_set|null(puede ser null)sync: SendNominaSync;test_set: el set de pruebas de habilitación.typereplace|delete|null(puede ser null)predecessorPayrollReference (puede ser null)periodPayrollPeriodpay_periodtextocurrencytextoexchange_ratedecimalTasa de cambio a pesos. Obligatoria con una moneda distinta de COP y prohibida con COP.noteslista de textoMáximo 20.employeePayrollEmployeepaymentPayrollPaymentpayment_dateslista de fecha (AAAA-MM-DD)Máximo 31.earningsPayrollEarningsdeductionsPayrollDeductionsroundingdecimalRedondeo hasta 2.00; no suma a los totales.generation_placePayrollPlaceemployerPayrollEmployertotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales. Null en un ajuste Eliminar.dianobjetofilesobjetoQué archivos hay (…/xml, …/zip, …/dian_response). No hay PDF.created_atfecha y horaupdated_atfecha y hora (puede ser null)
PayrollAdjustmentInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente. En las nóminas es único entre las nóminas y sus ajustes (aparte de las facturas y los eventos).typereplace|deleteobligatorio"replace" (Reemplazar: el ajuste lleva todos los datos de la nómina menosnovelty) o "delete" (Eliminar: solopredecessor,notes,generation_placeyemployer).- El documento que se ajusta: {"id": "pr_…"} (una nómina de Trevol) o {"id": "pra_…"} (otro ajuste, el último de la cadena), o sus datos {number, cune, issue_date}.
periodPayrollPeriodpay_periodtextocurrencytextoexchange_ratedecimalNúmero o texto decimal con punto («150000.50»).noteslista de textoMáximo 20.employeePayrollEmployeepaymentPayrollPaymentpayment_dateslista de fecha (AAAA-MM-DD)Máximo 31.earningsPayrollEarningsdeductionsPayrollDeductionsroundingdecimaltrue = redondeo al peso; o un valor entre -2.00 y 2.00.generation_placePayrollPlaceemployerPayrollEmployer
PayrollDeductions
- Salud (obligatoria).
- Pensión (obligatoria).
solidarity_fundPayrollSolidarityFundunionslista de PayrollPercentAmountMáximo 100.sanctionslista de PayrollSanctionMáximo 100.payroll_loanslista de PayrollLoanMáximo 100.third_party_paymentslista de decimalMáximo 100.advanceslista de decimalMáximo 100.otherlista de decimalMáximo 100.voluntary_pensiondecimalNúmero o texto decimal con punto («150000.50»).withholding_taxdecimalNúmero o texto decimal con punto («150000.50»).afcdecimalNúmero o texto decimal con punto («150000.50»).cooperativedecimalNúmero o texto decimal con punto («150000.50»).tax_garnishmentdecimalNúmero o texto decimal con punto («150000.50»).complementary_plandecimalNúmero o texto decimal con punto («150000.50»).educationdecimalNúmero o texto decimal con punto («150000.50»).refunddecimalNúmero o texto decimal con punto («150000.50»).debtdecimalNúmero o texto decimal con punto («150000.50»).
PayrollEarnings
- El sueldo básico (obligatorio).
transportlista de PayrollTransportMáximo 100.overtimelista de PayrollOvertimeMáximo 500.vacationPayrollVacationservice_bonusPayrollServiceBonusseverancePayrollSeverancedisabilitieslista de PayrollDisabilityMáximo 100.leavesPayrollLeavesbonuseslista de PayrollSalaryAmountsMáximo 100.allowanceslista de PayrollSalaryAmountsMáximo 100.strikeslista de PayrollUnpaidPeriodMáximo 100.other_conceptslista de PayrollOtherConceptMáximo 100.compensationslista de PayrollCompensationMáximo 100.epctv_bonuseslista de PayrollEpctvBonusMáximo 100.commissionslista de decimalMáximo 100.third_party_paymentslista de decimalMáximo 100.advanceslista de decimalMáximo 100.endowmentdecimalNúmero o texto decimal con punto («150000.50»).sustenance_supportdecimalNúmero o texto decimal con punto («150000.50»).teleworkdecimalNúmero o texto decimal con punto («150000.50»).retirement_bonusdecimalNúmero o texto decimal con punto («150000.50»).indemnitydecimalNúmero o texto decimal con punto («150000.50»).refunddecimalNúmero o texto decimal con punto («150000.50»).
PayrollEmployee
typetextoobligatorioTipo de trabajador (tabla 5.5.3).subtypetextohigh_risk_pensionbooleanodocument_typetextoobligatorioTipo de documento del trabajador (tabla 5.2.1).document_numbertextoobligatorioSolo dígitos, sin puntos ni comas ni espacios.first_surnametextoobligatoriosecond_surnametextoobligatorioObligatorio (NIE047): la DIAN lo exige aunque la base no.first_nametextoobligatorioother_namestextointegral_salarybooleanocontract_typetextoobligatorioTipo de contrato (tabla 5.5.2).salarydecimalobligatorioNúmero o texto decimal con punto («150000.50»).codetextoEl código interno del empleado (filtra las listas conemployee_code; no es un dato de identificación).
PayrollEventData
Resumen de una nómina electrónica (102) o de su nota de ajuste (103): SIN el trabajador (ni su documento, nombre o salario) y SIN montos. Pide el documento completo con GET /v1/{payrolls|payroll_adjustments}/{id}.
objectpayroll|payroll_adjustmentobligatorioidtextoobligatoriopr_… | pra_…statuspending|sending|validating|accepted|rejected|errorobligatorioenvironmenttest|liveobligatorionumbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|appcunetexto (puede ser null)issued_atfecha y hora (puede ser null)typereplace|delete|null(puede ser null)Solo en la nota de ajuste.predecessorobjeto (puede ser null)submissionsync|test_set|null(puede ser null)dianobjetoobligatorioerrorobjetoSolo en….error. Texto fijo por código.
PayrollInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente. En las nóminas es único entre las nóminas y sus ajustes (aparte de las facturas y los eventos).- El periodo que se liquida y el tiempo laborado (
time_workedse calcula si no se manda: años de 360 días y meses de 30). pay_periodtextoobligatorioPeriodo de nómina (tabla 5.5.1): "1" semanal, "2" decenal, "3" catorcenal, "4" quincenal, "5" mensual, "6" otro.currencytextoMoneda (ISO 4217). Por defecto COP; con otra vaexchange_rate.exchange_ratedecimalTasa de cambio a pesos. Obligatoria con una moneda distinta de COP y prohibida con COP.noveltyPayrollNoveltyEl CUNE del documento con la novedad contractual, si la hay. Solo en la nómina.noteslista de textoMáximo 20.- El trabajador. Sus datos solo salen en las respuestas a esta llave (la del empleador): nunca en webhooks, en el registro de peticiones ni en lo que se guarda de la idempotencia.
payment_dateslista de fecha (AAAA-MM-DD)obligatorioLas fechas de pago (1 a 31). Máximo 31.roundingdecimalRedondeo hasta 2.00; no suma a los totales.generation_placePayrollPlaceDónde se generó el documento. Por defecto, el municipio de la empresa.employerPayrollEmployerSolo si la empresa es persona natural: sus apellidos y nombres (si la razón social no se separa bien en «apellido1 apellido2 nombre1»).
PayrollLeaves
maternity_paternitylista de PayrollPaidPeriodMáximo 100.paidlista de PayrollPaidPeriodMáximo 100.unpaidlista de PayrollUnpaidPeriodMáximo 100.
PayrollOvertime
typetextoobligatorioTabla 5.5.5: HED, HEN, HRN, HEDDF, HRDDF, HENDF, HRNDF. El porcentaje sale de la tabla.quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).amountdecimalobligatorioNúmero o texto decimal con punto («150000.50»).starttextoAAAA-MM-DDTHH:MM:SS (NIE074).endtextoAAAA-MM-DDTHH:MM:SS (NIE074).percentdecimalNúmero o texto decimal con punto («150000.50»).
PayrollVacation
regularlista de PayrollPaidPeriodMáximo 100.compensatedlista de PayrollCompensatedVacationMáximo 100.
Pos
buyerPosBuyer
PosRegister
platetextoobligatorioPlaca de inventario de la caja (DEPD26).locationtextoobligatorioUbicación de la caja (DEPD28).cashiertextoobligatorioNombre del cajero o vendedor (DEPD30).typetextoobligatorioTipo de caja (DEPD32).sale_codetextoCódigo de la venta. Por defecto, el número del documento (DEPD34).
Preview
El resultado de calcular sin emitir: el documento que se emitiría, con sus totales. No gasta numeración, saldo ni le manda nada a la DIAN. Lleva además los campos del pedido normalizados (cambian de un tipo de documento a otro).
objectpreviewdocumenttextoElobjectdel documento que se emitiría (invoice,credit_note,payroll…).environmenttest|live|null(puede ser null)totalsobjeto libreLos totales calculados: la misma forma quetotalsdel documento (en nómina, devengados, deducciones y total del comprobante).
Problem
typetextoobligatoriotitletextoobligatoriostatusenteroobligatoriocodeauthentication_required|certificate_problem|company_not_enabled|dian_rejected|dian_unavailable|duplicate_document|external_id_in_use|file_unavailable|idempotency_key_required|idempotency_key_reused|insufficient_balance|internal_error|invalid_api_key|invalid_json|invalid_request|invalid_state|method_not_allowed|not_found|numbering_unavailable|permission_denied|previous_event_pending|rate_limited|request_in_progress|tacit_acceptance_not_due|top_up_above_maximum|top_up_below_minimum|top_ups_unavailable|unsupported_version|validation_error|webhook_limit_reachedobligatoriodetailtextoretryablebooleanoobligatorioretry_afterenterorequest_idtextoerrorslista de objetodocumentDocumentexisting_idtextoEnexternal_id_in_useyduplicate_document: el id (con el prefijo de su clase) del recurso que ya existe.reasonmissing_legal_representative|missing_pin|missing_software|missing_technical_key|no_resolution|payroll_not_enabled|prefix_in_use|resolution_exhausted|resolution_expired|resolution_not_yet_validEncompany_not_enabled(missing_legal_representative,missing_pin,missing_software,payroll_not_enabled) y ennumbering_unavailable(missing_technical_key,no_resolution,prefix_in_use,resolution_exhausted,resolution_expired,resolution_not_yet_valid): por qué.previoustextoEnprevious_event_pending: el evento que la DIAN todavía no muestra.minimum_copentero (puede ser null)Entop_up_below_minimum: la recarga mínima, en pesos.maximum_copentero (puede ser null)Entop_up_above_maximum: la recarga máxima, en pesos.limittextoEnrate_limited: qué límite se pasó.available_fromfecha (AAAA-MM-DD) (puede ser null)Entacit_acceptance_not_due: desde cuándo procede la aceptación tácita.nullsi la DIAN todavía no muestra el recibo del bien (032) de la compradora: consulta de nuevo en unos minutos conGET /v1/invoices/{id}/tacit_acceptance.ruleslista de objeto libreEntacit_acceptance_not_due: las reglas (LGC…) que la DIAN aplicaría; las locales llevanlocal: true.
PublicServicesExtension
servicetextoobligatoriocompanytextoobligatorioreasontextocontracttextoobligatoriousetextoobligatoriostratumtextoobligatoriopayment_due_datefecha (AAAA-MM-DD)payment_referencetextodue_datefecha (AAAA-MM-DD)periodfecha (AAAA-MM-DD)cycle_daysenteronoteslista de textoMáximo 10.- Máximo 50.
third_partieslista de ThirdPartyChargeMáximo 20.
RadianEvent
Un evento RADIAN 030–034 sobre una factura. Solo archivo xml. Un rechazo es final.
idtextoobjectradian_eventenvironmenttest|livestatuspending|sending|validating|accepted|rejected|error|processingvalidating: la DIAN respondió 98 («en proceso de validación»); no es un error, responde 202 en las dos versiones y Trevol solo consulta (el 98 significa «no reenvíes»).processing: solo en la 2026-10-22, un envío en duda o el evento anterior que aún no aparece: Trevol lo sigue resolviendo.errorincluye el envío en duda de la 2026-10-21.event_code030|031|032|033|034numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|appcudetexto (puede ser null)issued_atfecha y hora (puede ser null)invoiceobjeto030–033: la factura recibida (con el emisor). 034: {id, cufe, number} de la factura propia; sinidsi no se emitió con Trevol (la trajo la sincronización con la DIAN).claimEventClaim (puede ser null)softwareown|dian_freeproviderdian|companydianobjetoalready_registeredbooleanotrue: GetStatusEvent ya mostraba el CUDE de ESTE evento (un envío en duda que sí llegó); se cerróacceptedsin reenviar.already_registered_elsewherebooleanotrue: la DIAN rechazó con LGC01, la factura ya tiene ese evento (quizá de otro software); no hace falta enviarlo.tacitbooleano033 rechazada con DC24c: la factura ya quedó aceptada tácitamente.created_atfecha y horaupdated_atfecha y hora (puede ser null)
RadianEventData
Resumen de un evento RADIAN (030–034): sin nombres ni NIT del emisor de la factura. Pide el evento completo con GET /v1/radian_events/{id}.
objectradian_eventobligatorioidtextoobligatoriostatuspending|sending|validating|accepted|rejected|errorobligatorioenvironmenttest|liveobligatorioevent_code030|031|032|033|034obligatorionumbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|appcudetexto (puede ser null)issued_atfecha y hora (puede ser null)invoiceobjetodianobjetoobligatorioerrorobjetoSolo en….error. Texto fijo por código.
RadianEventInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente. En los eventos es único entre los eventos (aparte de las facturas y las nóminas).event_codetextoobligatorio"030" acuse de recibo, "031" reclamo, "032" recibo del bien o servicio, "033" aceptación expresa (las cuatro sobre una factura RECIBIDA) o "034" aceptación tácita (sobre una factura PROPIA a crédito). Los 035 a 051 necesitan un participante RADIAN y no están disponibles.invoiceReceivedInvoice030–033: la factura RECIBIDA sobre la que va el evento (CUFE, número y quién la emitió). 034: la factura PROPIA por su CUFE,{cufe, number?}(solo esos dos), en lugar deinvoice_id: sirve también para las facturas que no se emitieron con Trevol (las trae la sincronización con la DIAN). Si el CUFE es de una factura de Trevol, es lo mismo que mandar suinvoice_id.invoice_idtexto034: el id (inv_…) de una factura de Trevol: propia, validada, a crédito y que no sea de consumidor final. Va aparte deinvoicepara que cada esquema sea plano en los SDK. Para una factura que no se emitió con Trevol, usainvoice: {cufe}(exactamente uno de los dos).claimEventClaimSolo en el reclamo (031) y obligatorio en él: {code: "01" a "04", note?}.softwareown|dian_free030–033:own(el Software Propio de la empresa, por defecto) odian_free(el software gratuito de la DIAN). El 034 se firma con el Software Propio.providerdian|company030–033: quién es el proveedor tecnológico:dian(por defecto condian_free) ocompany(por defecto conown).
ReceivedInvoice
cufetextoEl CUFE de la factura (96 caracteres hexadecimales).numbertextoEl número de la factura, con su prefijo. En el 034 es opcional: si viene, tiene que ser el de la factura de ese CUFE.typetextoTipo de documento de la factura ("01" a "04"; por defecto "01"). No va en el 034.issuerReceivedInvoiceIssueracquirer_document_typetextoEl tipo de documento con que el emisor identificó a la empresa en la factura ("31" NIT o "13" cédula). Por defecto, el de la empresa (si no, la regla AAH09).
References
purchase_orderDocumentReferencedespatcheslista de DocumentReferenceMáximo 20.receiptslista de DocumentReferenceMáximo 20.
RequestLog
Una petición de la API (sin cuerpo, consulta, IP ni llave). Se guardan 30 días y son las de la empresa y el ambiente de la llave.
objectrequestobligatorioidtextoobligatorioElRequest-Idde la respuesta: compártelo si pides ayuda.methodGET|POST|PUT|PATCH|DELETEobligatoriopathtextoobligatorioLa plantilla de la ruta, no la ruta real: /v1/invoices/{id}/pdfstatusenteroobligatorioEl estado HTTP que se respondió.codetexto (puede ser null)Elcodedel error (validation_error…); null si salió bien.duration_msenteroobligatorioLo que tardó Trevol en responder, en milisegundos.key_idtexto (puede ser null)La llave que hizo la petición (key_…, la de GET /v1/company); null si ya se borró.document_idtexto (puede ser null)El documento (inv_…, cn_…, dn_…) sobre el que se actuó, si lo hay.idempotent_replayedbooleanoSe respondió con el resultado guardado de una Idempotency-Key repetida.api_version2026-10-21|2026-10-22|null(puede ser null)created_atfecha y horaobligatorio
Seller
residentbooleanoResidente fiscal en Colombia. Por defecto,countryes CO.person_typelegal|naturalPor defecto se deduce del NIT.document_typetextoobligatorioResidente: solo "31" (NIT). No residente: 21, 22, 31, 41, 42, 47 o 50 (tabla 16.2.1).document_numbertextoobligatorioSin dígito de verificación; Trevol calcula el DV del NIT.check_digitenteroOpcional: si viene, tiene que ser el DV del NIT.nametextoobligatorioaddresstextotax_schemetexto"ZZ" (no aplica, por defecto) o "01" (IVA).tax_responsibilitieslista de textoO-13, O-15, O-23, O-47, O-48, O-49 o R-99-PN (por defecto R-99-PN). Máximo 20.countrytextoISO 3166-1 alfa-2 (tabla 16.4.1). Por defecto CO.municipality_codetextoSolo vendedor residente: código DANE del municipio.department_codetextopostal_codetextoResidente: de la tabla 16.4.4, del mismo departamento. No residente: libre, hasta 10 caracteres.citytextoObligatoria si no es residente.regiontextoSolo vendedor no residente.
Shipment
datefecha (AAAA-MM-DD)addressForeignAddresscarrierCarrier
StockExchangeExtension
trade_numbertextoobligatoriosettlement_datefecha (AAAA-MM-DD)obligatorionominal_quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).yieldsdecimalNúmero o texto decimal con punto («150000.50»).valuedecimalobligatorioNúmero o texto decimal con punto («150000.50»).commission_percentdecimalobligatorioNúmero o texto decimal con punto («150000.50»).
SupportAdjustmentItem
codetextoCódigo (texto).descriptiontextoobligatoriounittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).unit_pricedecimalobligatorioPrecio unitario SIN impuestos.taxeslista de SupportItemTaxSolo IVA: {code: "01", rate: 0 | 5 | 19} o {code: "01", excluded: true}. Máximo 12.discountslista de ItemAllowanceDescuentos de la línea, sin código; la razón va de 10 a 5000 caracteres (NSBE04). Máximo 10.chargeslista de SupportItemChargeMáximo 10.standard_codeStandardCode
SupportDocument
Un documento soporte en adquisiciones a no obligados a facturar (Invoice 05). Se genera, no se expide: archivos xml y dian_response.
idtextosd_…objectsupport_documentenvironmenttest|livestatuspending|sending|accepted|rejected|error|processingprocessingsolo en la versión 2026-10-22: la DIAN no confirmó y Trevol sigue resolviendo el documento (el resultado llega por GET y por webhook; no crees otro documento para la misma venta). En 2026-10-21 ese documento se ve comoerror.numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|app|contapymeqrtexto (puede ser null)issued_atfecha y hora (puede ser null)itemslista de SupportItempaymentPaymentcurrencySupportCurrencytotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales, siempre en pesos. Con moneda extranjera,currencytrae el equivalente.dianobjetodeliveryobjetoEl documento soporte se genera, no se expide: no hay PDF, ZIP ni correo. Solo hay XML y la respuesta de la DIAN.created_atfecha y horaupdated_atfecha y hora (puede ser null)cudstexto (puede ser null)El código único del documento (CUDS, 96 hex).sellerSellernoteslista de textoreferencesReferencesallowance_chargeslista de AllowanceChargetransmissionper_operation|weeklyadjustment_noteSupportAdjustmentReference (puede ser null)
SupportDocumentAdjustment
Una nota de ajuste de un documento soporte (CreditNote 95). Se genera, no se expide: archivos xml y dian_response.
idtextosda_…objectsupport_document_adjustmentenvironmenttest|livestatuspending|sending|accepted|rejected|error|processingprocessingsolo en la versión 2026-10-22: la DIAN no confirmó y Trevol sigue resolviendo el documento (el resultado llega por GET y por webhook; no crees otro documento para la misma venta). En 2026-10-21 ese documento se ve comoerror.numbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)originapi|app|contapymeqrtexto (puede ser null)issued_atfecha y hora (puede ser null)itemslista de SupportAdjustmentItempaymentPaymentcurrencySupportCurrencytotalsobjeto (puede ser null)Montos como texto decimal con 2 decimales, siempre en pesos. Con moneda extranjera,currencytrae el equivalente.dianobjetodeliveryobjetoEl documento soporte se genera, no se expide: no hay PDF, ZIP ni correo. Solo hay XML y la respuesta de la DIAN.created_atfecha y horaupdated_atfecha y hora (puede ser null)cudstexto (puede ser null)El código único del documento (CUDS, 96 hex).sellerSellernoteslista de textoreferencesReferencesallowance_chargeslista de AllowanceChargeconcepttextoConcepto de la nota (tabla 16.2.4): 1 a 5.descriptiontextosupport_documentSupportDocumentReference
SupportDocumentAdjustmentInput
external_idtextoTu identificador del documento: único entre los documentos API de la empresa y el ambiente.sellerSellerOpcional consupport_document.id: se toma el vendedor del documento soporte (si viene, tiene que ser el mismo).- Las líneas de la nota (1 a 500): sin retenciones ni fecha de compra. Máximo 500.
paymentPaymentnoteslista de textoMáximo 10.referencesReferencesallowance_chargeslista de AllowanceChargeDescuentos y recargos globales (no tocan las bases). Máximo 20.currencySupportCurrencyconcepttextoobligatorioConcepto de la nota de ajuste (tabla 16.2.4): "1" devolución parcial, "2" anulación del documento soporte (lleva exactamente sus valores), "3" rebaja o descuento, "4" ajuste de precio, "5" otros.descriptiontextoobligatorioQué se corrige y por qué (de 20 a 5000 caracteres, NSBF04).- El documento soporte que ajusta: {"id": "sd_…"} (de Trevol: validado, de la empresa y el ambiente de la llave) o {number, cuds, issue_date, total?} si es de otra plataforma (
totalhace falta para anularlo).
SupportDocumentEventData
Resumen de un documento soporte o de su nota de ajuste (nunca datos del proveedor ni líneas). Pide el documento completo con GET /v1/{support_documents|support_document_adjustments}/{id}.
statuspending|sending|accepted|rejected|error|contingencyobligatorioNuncaprocessing: ese estado solo existe en las respuestas de la API.environmenttest|liveobligatorionumbertexto (puede ser null)prefixtexto (puede ser null)external_idtexto (puede ser null)Tu identificador, solo en los documentos creados por la API.originapi|app|contapymeissued_atfecha y hora (puede ser null)totaltexto (puede ser null)Texto decimal con dos decimales.dianobjetoobligatorioerrorobjetoSolo en….error. El texto es fijo por código: nunca el mensaje de la DIAN.objectsupport_document|support_document_adjustmentobligatorioidtextoobligatoriosd_… | sda_…cudstexto (puede ser null)Código único del documento soporte.support_documentobjetoEn la nota de ajuste: el documento soporte que ajusta.deliverynullEl documento soporte no se expide al vendedor: no hay PDF ni correo.
SupportDocumentInput
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).
SupportItem
codetextoCódigo (texto).descriptiontextoobligatoriounittextoUnidad de medida (tabla 13.3.6). Por defecto 94 (unidad).quantitydecimalobligatorioNúmero o texto decimal con punto («150000.50»).unit_pricedecimalobligatorioPrecio unitario SIN impuestos.taxeslista de SupportItemTaxSolo IVA: {code: "01", rate: 0 | 5 | 19} o {code: "01", excluded: true}. Máximo 12.discountslista de ItemAllowanceDescuentos de la línea, sin código; la razón va de 10 a 5000 caracteres (DSBE04). Máximo 10.chargeslista de SupportItemChargeMáximo 10.withholdingslista de SupportItemWithholdingLas practica la empresa al vendedor: 05 ReteIVA (15 o 100 %) o 06 ReteRenta. No restan del total a pagar. Máximo 10.standard_codeStandardCodepurchase_datefecha (AAAA-MM-DD)Fecha de la compra. Obligatoria en el acumulado semanal (entre 6 días antes de hoy y hoy); por operación no se informa.
TacitAcceptance
¿Procede ya la aceptación tácita (034) sobre una factura propia? Solo lectura: consulta GetStatusEvent con el certificado de la empresa y no envía nada. Límite propio: 30 por minuto por llave (las dos consultas, juntas).
objecttacit_acceptanceinvoice_idtextoSolo si la factura es de Trevol.cufetextoEl CUFE de la factura.numbertextoEl número de la factura.allowedbooleanoavailable_fromfecha (AAAA-MM-DD) (puede ser null)Desde cuándo procede (3 días hábiles después del recibo del bien, 032).ruleslista de objetoLas reglas (LGC…) que impiden el 034 ahora; llevanlocal: true.
ThirdPartyCharge
servicetextoobligatorioreasontextocontracttextoperiodtextonotetextototaldecimalobligatorioNúmero o texto decimal con punto («150000.50»).chargeslista de ConsumptionAdjustmentMáximo 50.
TopUpBuyer
El comprador de la factura de la recarga. Sin él, la empresa de la llave.
document_type13|31|22|41obligatorio13 cédula, 31 NIT, 22 cédula de extranjería, 41 pasaporte (lo que acepta la facturación de la recarga).document_numbertextoobligatorioSin DV ni puntos (con 13 y 31, solo dígitos).check_digittexto o enteroCon NIT, obligatorio: el DV del NIT. No va con los demás.person_typelegal|naturalobligatoriolegal (persona jurídica, solo con NIT) o natural.nametextoobligatorioRazón social o, para una persona natural, nombres y apellidos (al menos dos palabras).emailtextoobligatorioA dónde llega la factura de la recarga.phonetextoaddresstextomunicipality_codetextoCódigo DANE del municipio (5 dígitos).
TopUpInput
amount_copenteroobligatorioEn pesos, entre la recarga mínima y la máxima.buyerTopUpBuyer
WebhookDelivery
Un evento hacia un endpoint, con sus reintentos (8 automáticos en unas 32 horas; 3 si es manual).
idtextoobligatorioobjectwebhook_deliveryobligatorioendpoint_idtextoobligatorioevent_idtextoobligatorioevent_typetexto (puede ser null)statuspending|sending|succeeded|failed|canceledobligatorioattemptsenteroobligatoriomanualbooleanonext_attempt_atfecha y hora (puede ser null)last_attemptobjeto (puede ser null)created_atfecha y hora (puede ser null)succeeded_atfecha y hora (puede ser null)
WebhookEndpoint
idtextoobligatorioobjectwebhook_endpointobligatorioenvironmenttest|liveobligatoriourltextoobligatorioLa URL completa solo la ven las llaves de escritura; las de lectura ven el esquema y el host (el camino va enmascarado: a veces es un secreto).descriptiontexto (puede ser null)eventslista de*|invoice.accepted|invoice.rejected|invoice.error|invoice.delivered|invoice.email_bounced|invoice.email_failed|credit_note.accepted|credit_note.rejected|credit_note.error|credit_note.delivered|credit_note.email_bounced|credit_note.email_failed|debit_note.accepted|debit_note.rejected|debit_note.error|debit_note.delivered|debit_note.email_bounced|debit_note.email_failed|balance.low|numbering.low|numbering.expiring|certificate.expiring|support_document.accepted|support_document.rejected|support_document.error|support_document_adjustment.accepted|support_document_adjustment.rejected|support_document_adjustment.error|equivalent_document.accepted|equivalent_document.rejected|equivalent_document.error|equivalent_document.delivered|equivalent_document.email_bounced|equivalent_document.email_failed|equivalent_document_adjustment.accepted|equivalent_document_adjustment.rejected|equivalent_document_adjustment.error|equivalent_document_adjustment.delivered|equivalent_document_adjustment.email_bounced|equivalent_document_adjustment.email_failed|payroll.accepted|payroll.rejected|payroll.error|payroll_adjustment.accepted|payroll_adjustment.rejected|payroll_adjustment.error|radian_event.accepted|radian_event.rejected|radian_event.errorobligatorioEventos del catálogo (49 tipos, hasta 60 en la lista), o ["*"] para todos (no se mezcla).balance.low,numbering.lowynumbering.expiringsolo existen en producción (llaves live).webhook.testno se suscribe. Máximo 60.catalog_version1|2Qué catálogo recibe con["*"]:1= el de la fase 2 (facturas, notas, saldo, numeración y certificado);2= también documento soporte, documento equivalente, nómina y eventos RADIAN. Los endpoints creados antes de la fase 3 quedan en 1 hasta que guardes de nuevo su lista de eventos (PATCHevents); los nuevos nacen en 2. Una lista explícita siempre recibe lo que pide.statusenabled|paused|disabledobligatoriopaused: lo pausaste tú.disabled: lo desactivó Trevol por fallos sostenidos (10 seguidos durante 5 días); se reactiva con PATCH status=enabled.disabled_reasonsustained_failures|null(puede ser null)secret_rotated_atfecha y hora (puede ser null)created_atfecha y hora (puede ser null)updated_atfecha y hora (puede ser null)secrettextoSOLO al crear o rotar, una única vez: guárdalo. Verifica cada entrega con él (Standard Webhooks).
WebhookEndpointInput
urltextoobligatoriohttps:// con un nombre de dominio (no una IP), sin usuario ni clave, puerto 443 o 1024–65535. En cada intento se resuelve el nombre y se rechaza toda dirección privada o local.descriptiontexto (puede ser null)eventslista de*|invoice.accepted|invoice.rejected|invoice.error|invoice.delivered|invoice.email_bounced|invoice.email_failed|credit_note.accepted|credit_note.rejected|credit_note.error|credit_note.delivered|credit_note.email_bounced|credit_note.email_failed|debit_note.accepted|debit_note.rejected|debit_note.error|debit_note.delivered|debit_note.email_bounced|debit_note.email_failed|balance.low|numbering.low|numbering.expiring|certificate.expiring|support_document.accepted|support_document.rejected|support_document.error|support_document_adjustment.accepted|support_document_adjustment.rejected|support_document_adjustment.error|equivalent_document.accepted|equivalent_document.rejected|equivalent_document.error|equivalent_document.delivered|equivalent_document.email_bounced|equivalent_document.email_failed|equivalent_document_adjustment.accepted|equivalent_document_adjustment.rejected|equivalent_document_adjustment.error|equivalent_document_adjustment.delivered|equivalent_document_adjustment.email_bounced|equivalent_document_adjustment.email_failed|payroll.accepted|payroll.rejected|payroll.error|payroll_adjustment.accepted|payroll_adjustment.rejected|payroll_adjustment.error|radian_event.accepted|radian_event.rejected|radian_event.errorobligatorioEventos del catálogo (49 tipos, hasta 60 en la lista), o ["*"] para todos (no se mezcla).balance.low,numbering.lowynumbering.expiringsolo existen en producción (llaves live).webhook.testno se suscribe. Máximo 60.
WebhookEndpointUpdate
urltextohttps:// con un nombre de dominio (no una IP), sin usuario ni clave, puerto 443 o 1024–65535. En cada intento se resuelve el nombre y se rechaza toda dirección privada o local.descriptiontexto (puede ser null)eventslista de*|invoice.accepted|invoice.rejected|invoice.error|invoice.delivered|invoice.email_bounced|invoice.email_failed|credit_note.accepted|credit_note.rejected|credit_note.error|credit_note.delivered|credit_note.email_bounced|credit_note.email_failed|debit_note.accepted|debit_note.rejected|debit_note.error|debit_note.delivered|debit_note.email_bounced|debit_note.email_failed|balance.low|numbering.low|numbering.expiring|certificate.expiring|support_document.accepted|support_document.rejected|support_document.error|support_document_adjustment.accepted|support_document_adjustment.rejected|support_document_adjustment.error|equivalent_document.accepted|equivalent_document.rejected|equivalent_document.error|equivalent_document.delivered|equivalent_document.email_bounced|equivalent_document.email_failed|equivalent_document_adjustment.accepted|equivalent_document_adjustment.rejected|equivalent_document_adjustment.error|equivalent_document_adjustment.delivered|equivalent_document_adjustment.email_bounced|equivalent_document_adjustment.email_failed|payroll.accepted|payroll.rejected|payroll.error|payroll_adjustment.accepted|payroll_adjustment.rejected|payroll_adjustment.error|radian_event.accepted|radian_event.rejected|radian_event.errorEventos del catálogo (49 tipos, hasta 60 en la lista), o ["*"] para todos (no se mezcla).balance.low,numbering.lowynumbering.expiringsolo existen en producción (llaves live).webhook.testno se suscribe. Máximo 60.statusenabled|pausedenabled reactiva (también uno desactivado por Trevol) y pone en cero el contador de fallos.