Crea un documento equivalente electrónico tiquete POS
/api/v1/documents/posDocumento equivalente electrónico del tiquete de máquina registradora con sistema P.O.S. (tipo 20, Anexo de documento equivalente 1.0). Mismo cuerpo que la factura más point_of_sale (datos de la caja, obligatorios). Necesita un rango de tipo pos con su resolución. Para consumidor final envía customer con document_number 222222222222. Probado con la DIAN (EPOS1-3 y NAP1-2, 2026-11-12).
Parámetros de consulta
waitintegerSegundos (máximo 10) que la petición espera el resultado de la DIAN. Si llega, responde 200 con número, CUFE y estado final; si no, 202 y el resultado llega por webhook. mínimo 0, máximo 10.
Cuerpo de la petición application/json
Montos, cantidades y tarifas van como texto decimal: "5000.00", "19".
external_idstring· máx. 128 caracteresobligatorionumbering_range_idstring · uuidOpcional si la cuenta tiene un solo rango activo del tipo de documento
issued_atstring · date-timeVacío = ahora
currencystringISO 4217 (lista TipoMoneda de la DIAN); vacío = COP. En otra moneda los montos se envían en esa moneda y factuROA los convierte a pesos con exchange_rate: el XML va en COP y la moneda original queda en PaymentExchangeRate y en el PDF
exchange_rateobjectObligatoria si currency no es COP: pesos por unidad de la moneda y fecha en que se fijó (la TRM o la pactada con el comprador). factuROA no calcula ni consulta la tasa: la informa y responde por ella el emisor
+ Ver 2 campos− Ocultar 2 campos
ratestringobligatoriodatestring · dateobligatorio
exportbooleanFactura de exportación (tipo 02). Solo factura de venta; cada línea exige brand y model
delivery_termsobjectCondiciones de entrega de la exportación
+ Ver 2 campos− Ocultar 2 campos
incotermstringobligatoriospecial_termsstring
customerobjectobligatorio+ Ver 11 campos− Ocultar 11 campos
person_typeinteger1 jurídica, 2 natural
document_typestringobligatorio13 cédula, 31 NIT, 22 cédula de extranjería, 41 pasaporte...
document_numberstringobligatoriodvstringnamestringobligatoriotrade_namestringemailstringphonestringaddressobject+ Ver 8 campos− Ocultar 8 campos
linestringcity_codestringDIVIPOLA del municipio (5 dígitos)
city_namestringdepartment_codestringDIVIPOLA del departamento (2 dígitos)
department_namestringpostal_zonestringcountry_codestringISO 3166-1; vacío = CO
country_namestring
tax_level_codesarray<string>tax_schemestring
paymentobject+ Ver 3 campos− Ocultar 3 campos
methodinteger1 contado, 2 crédito
means_codestring10 efectivo, 42 consignación, 47 transferencia, 48 tarjeta crédito, 49 tarjeta débito, ZZZ otro
due_datestring · date
notesarray<string>linesarray<object>· máx. 500 elementosobligatorio+ Ver 11 campos− Ocultar 11 campos
descriptionstringobligatorioitem_codestringbrandstringMarca (opcional; la DIAN la notifica si falta en documento soporte)
modelstringModelo (opcional)
quantitystringobligatoriounit_codestringobligatoriounit_pricestringobligatorioprice_includes_taxboolean· por defecto falseunit_pricees el precio final con impuestos incluidos (como se cobra en caja). factuROA calcula la base (precio / (1 + suma de tarifas)) y agregaPayableRoundingAmountpara que el total sea exactamente la suma de cantidad por precio final (3 × 4990 con IVA 19 % = 14970.00). Solo con impuestos por porcentaje y sinallowancesen la línea.taxesarray<object>+ Ver 6 campos− Ocultar 6 campos
codestringobligatorioPor porcentaje: 01 IVA (0, 5, 16, 19), 04 INC (2, 4, 8, 16), 03 ICA, 35 ICUI (10, 15, 20). Por unidad (sin
rate, conper_unit_amount): 22 INC bolsas plásticas, 34 IBUA.ratestringPorcentaje con hasta 3 decimales
per_unit_amountstringbase_quantitystringCantidad a la que aplica per_unit_amount (IBUA: 100 ml). Vacío = 1
base_unit_codestringUnidad de base_quantity. Vacío = la de la línea
taxable_quantitystringCantidad gravada (IBUA: ml totales). Vacío = cantidad de la línea
allowancesarray<object>Descuentos y cargos de la línea; cambian el valor de la línea y la base de los impuestos.
+ Ver 4 campos− Ocultar 4 campos
typestringobligatorioreasonstringobligatorioreason_codestringSolo descuentos del documento: 00 no condicionado, 01 condicionado
amountstringobligatorio
purchase_datestring · date
deliveryobjectObligatoria cuando el adquiriente no da NIT y la venta es fuera del local (Res. 165 de 2023, art. 11 num. 3).
+ Ver 2 campos− Ocultar 2 campos
addressobjectobligatorio+ Ver 8 campos− Ocultar 8 campos
linestringcity_codestringDIVIPOLA del municipio (5 dígitos)
city_namestringdepartment_codestringDIVIPOLA del departamento (2 dígitos)
department_namestringpostal_zonestringcountry_codestringISO 3166-1; vacío = CO
country_namestring
datestring · date
allowancesarray<object>Descuentos y cargos del documento; no cambian la base de los impuestos, sí el total a pagar.
+ Ver 4 campos− Ocultar 4 campos
typestringobligatorioreasonstringobligatorioreason_codestringSolo descuentos del documento: 00 no condicionado, 01 condicionado
amountstringobligatorio
withholdingsarray<object>Retenciones informativas (solo factura y documento soporte); no se restan del total a pagar.
+ Ver 3 campos− Ocultar 3 campos
codestringobligatorio05 ReteIVA, 06 ReteFuente (renta), 07 ReteICA
ratestringobligatorioPorcentaje con hasta 3 decimales
basestringobligatorio
prepaymentsarray<object>Anticipos recibidos antes de facturar (solo factura de venta); se restan del total a pagar.
+ Ver 4 campos− Ocultar 4 campos
idstringobligatorioRecibo o transacción del anticipo
amountstringobligatorioreceived_datestring · dateinstructionstring
point_of_saleobjectobligatorioDatos de la caja (extensión InformacionCajaVenta de la DIAN)
+ Ver 5 campos− Ocultar 5 campos
register_platestringobligatorioPlaca de inventario de la caja
locationstringobligatoriocashierstringobligatorioNombres y apellidos del cajero o vendedor
register_typestringobligatoriosale_codestringobligatorio
Respuestas
202Documento en fila (pending). El número, el CUFE y la firma se asignan al enviarlo a la DIAN.
idstring · uuidaccount_idstring · uuidCuenta emisora; una casa de software la usa para saber de qué cliente es el aviso
document_typestringexternal_idstringreference_document_idstring · uuidprefixstringnumberintegernull hasta que se envía a la DIAN; un rechazo lo libera
full_numberstringdocument_keystringCUFE, CUDE, CUDS o CUNE según el tipo
environmentinteger1 producción, 2 habilitación
stagingbooleanDocumento de prueba (cuenta en staging): no fue a la DIAN y no tiene validez fiscal
issued_atstring · date-timecustomer_idstringContraparte: adquirente, vendedor (documento soporte) o trabajador (nómina)
customer_namestringcurrencystringSiempre COP: el XML y los montos van en pesos (regla FAD15 del Anexo 1.9)
payable_amountstringforeignobjectSolo si se facturó en otra moneda: moneda, tasa usada y total en esa moneda
+ Ver 3 campos− Ocultar 3 campos
currencystringexchange_ratestringpayable_amountstring
statusstringpendingesperando al worker,submittedenviado y esperando a la DIAN,accepted,rejected(por la DIAN, final) yfailed(se agotaron los reintentos).dianobject+ Ver 5 campos− Ocultar 5 campos
track_idstringstatus_codestringstatus_descriptionstringerrorsarray<string>rulesarray<object>errors separados: regla, tipo (rejection rechaza el documento; notification no impide la aceptación), mensaje de la DIAN y, si factuROA la conoce, cómo corregirla
+ Ver 4 campos− Ocultar 4 campos
rulestringtypestringmessagestringhintstring
attemptsintegererrorobjectSolo si factuROA rechazó el documento sin enviarlo a la DIAN (p. ej.
error.plan.no_documents: se quedó en fila cuando el plan se agotó o venció con la renovación cancelada)+ Ver 2 campos− Ocultar 2 campos
codestringmessagestring
emailobjectCorreo al adquiriente con el AttachedDocument y el PDF (solo facturas y notas aceptadas, con FACTUROA_EMAIL_FROM configurado).
+ Ver 6 campos− Ocultar 6 campos
statusstringabandoned: sin correo válido del adquiriente o intentos agotados (ver last_error)
attemptsintegersent_atstring · date-timelast_errorstringrecipientstringDirección del último reenvío (si se pidió otra)
resendsintegerReenvíos pedidos (máximo 5)
created_atstring · date-timeupdated_atstring · date-time
200Ya existía un documento con ese external_id; se devuelve sin crear otro.
idstring · uuidaccount_idstring · uuidCuenta emisora; una casa de software la usa para saber de qué cliente es el aviso
document_typestringexternal_idstringreference_document_idstring · uuidprefixstringnumberintegernull hasta que se envía a la DIAN; un rechazo lo libera
full_numberstringdocument_keystringCUFE, CUDE, CUDS o CUNE según el tipo
environmentinteger1 producción, 2 habilitación
stagingbooleanDocumento de prueba (cuenta en staging): no fue a la DIAN y no tiene validez fiscal
issued_atstring · date-timecustomer_idstringContraparte: adquirente, vendedor (documento soporte) o trabajador (nómina)
customer_namestringcurrencystringSiempre COP: el XML y los montos van en pesos (regla FAD15 del Anexo 1.9)
payable_amountstringforeignobjectSolo si se facturó en otra moneda: moneda, tasa usada y total en esa moneda
+ Ver 3 campos− Ocultar 3 campos
currencystringexchange_ratestringpayable_amountstring
statusstringpendingesperando al worker,submittedenviado y esperando a la DIAN,accepted,rejected(por la DIAN, final) yfailed(se agotaron los reintentos).dianobject+ Ver 5 campos− Ocultar 5 campos
track_idstringstatus_codestringstatus_descriptionstringerrorsarray<string>rulesarray<object>errors separados: regla, tipo (rejection rechaza el documento; notification no impide la aceptación), mensaje de la DIAN y, si factuROA la conoce, cómo corregirla
+ Ver 4 campos− Ocultar 4 campos
rulestringtypestringmessagestringhintstring
attemptsintegererrorobjectSolo si factuROA rechazó el documento sin enviarlo a la DIAN (p. ej.
error.plan.no_documents: se quedó en fila cuando el plan se agotó o venció con la renovación cancelada)+ Ver 2 campos− Ocultar 2 campos
codestringmessagestring
emailobjectCorreo al adquiriente con el AttachedDocument y el PDF (solo facturas y notas aceptadas, con FACTUROA_EMAIL_FROM configurado).
+ Ver 6 campos− Ocultar 6 campos
statusstringabandoned: sin correo válido del adquiriente o intentos agotados (ver last_error)
attemptsintegersent_atstring · date-timelast_errorstringrecipientstringDirección del último reenvío (si se pidió otra)
resendsintegerReenvíos pedidos (máximo 5)
created_atstring · date-timeupdated_atstring · date-time
402En producción la cuenta (o su casa de software) no tiene un plan activo: error.plan.inactive. No se crea el documento
codestringmessagestringerrorsarray<object>Solo en 400: cada campo inválido con su explicación (en español, o en inglés con Accept-Language: en)
+ Ver 2 campos− Ocultar 2 campos
fieldstringRuta del campo en el JSON enviado
messagestring
detailsarray<string>Rutas de los campos inválidos (compatibilidad; usa errors)
request_idstring
400Datos inválidos (details trae los campos)
codestringmessagestringerrorsarray<object>Solo en 400: cada campo inválido con su explicación (en español, o en inglés con Accept-Language: en)
+ Ver 2 campos− Ocultar 2 campos
fieldstringRuta del campo en el JSON enviado
messagestring
detailsarray<string>Rutas de los campos inválidos (compatibilidad; usa errors)
request_idstring
401Falta la key o es inválida, está deshabilitada, vencida o revocada (error.missing_api_key, error.invalid_api_key, error.api_key.disabled, error.api_key.expired, error.api_key.revoked)
codestringmessagestringerrorsarray<object>Solo en 400: cada campo inválido con su explicación (en español, o en inglés con Accept-Language: en)
+ Ver 2 campos− Ocultar 2 campos
fieldstringRuta del campo en el JSON enviado
messagestring
detailsarray<string>Rutas de los campos inválidos (compatibilidad; usa errors)
request_idstring
409Conflicto con el estado actual (p. ej. documento referenciado no aceptado, rango agotado)
codestringmessagestringerrorsarray<object>Solo en 400: cada campo inválido con su explicación (en español, o en inglés con Accept-Language: en)
+ Ver 2 campos− Ocultar 2 campos
fieldstringRuta del campo en el JSON enviado
messagestring
detailsarray<string>Rutas de los campos inválidos (compatibilidad; usa errors)
request_idstring
422Faltan datos para generar el XML (error.document.incomplete, campos en details)
codestringmessagestringerrorsarray<object>Solo en 400: cada campo inválido con su explicación (en español, o en inglés con Accept-Language: en)
+ Ver 2 campos− Ocultar 2 campos
fieldstringRuta del campo en el JSON enviado
messagestring
detailsarray<string>Rutas de los campos inválidos (compatibilidad; usa errors)
request_idstring