Impuestos especiales en la factura por API: licores, bolsas, ICUI, IBUA e impuesto al consumo
Los impuestos de cada ítem van en items[].taxes[]. Hay dos clases:
| Clase | Se envía con | Categorías |
|---|---|---|
| Por tasa | tax_category y tax_rate |
IVA, IMP_CONSUMO, ICUI |
| Por monto | tax_category y tax_amount |
IMP_CONSUMO_LICOR, IMP_CONSUMO_DEPARTAMENTAL, IMP_BOLSA_PLASTICA, IBUA |
En los impuestos por tasa, Dataico calcula el valor y un tax_amount se ignora, salvo que envíes también base_amount: entonces tiene que ser tax_rate por la base, o la respuesta empieza con Los datos son inconsistentes. En los impuestos por monto, tax_amount es el total de la línea, no el valor por unidad. Dataico calcula el valor unitario dividiendo tax_amount entre quantity para el XML de la DIAN.
Los nombres de campo sirven con guion bajo o con guion (tax_category o tax-category).
La API no decide qué impuesto lleva cada producto ni la tarifa vigente del año: eso lo define tu contador.
Tasas válidas
| Categoría | Tasas que acepta tax_rate |
|---|---|
IVA |
0, 5, 16 y 19 |
IMP_CONSUMO |
0, 2, 4, 8 y 16 |
ICUI |
10, 15 y 20 |
En IVA e IMP_CONSUMO, una tasa que no está en la lista da este error, con las tasas válidas (el ejemplo es de IVA):
Ese valor es '20.0' invalido. Tiene que ser uno de: [0 5 16 19]
En ICUI la respuesta no nombra las tasas: El campo indicado no cumple una validación para la que no hay un mensaje específico. Contacta a soporte con el documento enviado.
Impuesto al consumo de licores
{
"sku": "AG-750",
"description": "AGUARDIENTE 750 ML",
"quantity": 5,
"price": 40000,
"taxes": [
{ "tax_category": "IMP_CONSUMO_LICOR", "tax_amount": 3480 }
]
}
3480 es el impuesto de las cinco botellas, no de cada una. Dataico lo reporta a la DIAN como impuesto al consumo de licores (código 32).
Impuesto a la bolsa plástica
La bolsa va como un ítem aparte, con price en 0 y el impuesto como monto:
{
"sku": "BOLSA",
"description": "Bolsa",
"quantity": 4,
"price": 0,
"taxes": [
{ "tax_category": "IMP_BOLSA_PLASTICA", "tax_amount": 292 }
]
}
tax_amountes cantidad por tarifa: 4 bolsas por 73 pesos (tarifa de 2026) da 292. La API no comprueba la cuenta: si la tarifa cambia, el integrador actualiza el valor.- Dataico reemplaza
skuydescriptionpor los de su producto interno de bolsa. Si el ítem no traeoriginal_price, usa la tarifa del año como valor de referencia.
ICUI e IBUA
Un producto puede llevar los dos: el ICUI por tasa y el IBUA por monto.
{
"sku": "A001",
"description": "GASEOSA",
"quantity": 1,
"price": 12000,
"taxes": [
{ "tax_category": "IBUA", "tax_amount": 1000 },
{ "tax_category": "ICUI", "tax_rate": 20 }
]
}
Retenciones
Las retenciones (RET_FUENTE, RET_ICA, RET_IVA) van en un arreglo retentions, aparte de taxes, en la factura (invoice.retentions) o en los ítems (items[].retentions), no en los dos. Si se envían en los dos lugares, la respuesta es:
Las retenciones sólo pueden ser definidas a nivel de factura o de items, no en ambas partes.
El valor de la retención lo calcula Dataico con la tasa y la base: si se envía amount, se ignora.
Recursos Adicionales
- Documentación Técnica FE
- Obsequios en la factura por API
- Descuentos, cargos y propina por API
- Guía de Solución de Problemas API DATAICO FE