Ir directamente al contenido
Español
  • No hay sugerencias porque el campo de búsqueda está vacío.

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_amount es 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 sku y description por los de su producto interno de bolsa. Si el ítem no trae original_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