🧾 Responsabilidades tributarias
Las responsabilidades tributarias son las obligaciones fiscales que declara cada parte del documento
electrónico: la empresa emisora, el adquiriente, el proveedor del documento soporte y las partes de
entrega. En el RUT salen en la casilla 53 – Responsabilidades, Calidades y Atributos y el anexo
técnico de la DIAN las pide en el elemento cbc:TaxLevelCode de cac:PartyTaxScheme.
Un tercero puede cumplir varias a la vez (por ejemplo gran contribuyente y autorretenedor). Por eso,
además del campo de siempre type_liability_id —una sola—, existe type_liability_ids, un arreglo con
todas las que marque ese tercero.
El catálogo
Son los registros de la tabla type_liabilities del API. Los ids de una instalación estándar:
| id | Código | Nombre |
|---|---|---|
| 7 | O-13 | Gran contribuyente |
| 9 | O-15 | Autorretenedor |
| 14 | O-23 | Agente de retención en el impuesto sobre las ventas |
| 112 | O-47 | Régimen Simple de Tributación – SIMPLE |
| 117 | R-99-PN | No aplica – Otros |
R-99-PN es el valor que se usa cuando el tercero no informa ninguna responsabilidad, así que no
acompaña a las demás: cuando se envían varias responsabilidades reales, el API lo descarta del
cbc:TaxLevelCode.
Responsabilidades de la empresa emisora
Se registran una sola vez en la configuración de la empresa y valen para todos sus documentos.
POST/PUT /api/ubl2.1/config/{nit}/{dv}
{
"type_document_identification_id": 6,
"type_organization_id": 1,
"type_regime_id": 1,
"type_liability_id": 14,
"type_liability_ids": [7, 9],
"business_name": "EMPRESA DE PRUEBA SAS",
"merchant_registration": "0000000-00"
}
type_liability_id: la responsabilidad principal. Sigue siendo obligatoria.type_liability_ids: las demás. Se combinan con la principal y se eliminan los repetidos, así que no hace falta volver a incluirla en el arreglo.- Si no hay responsabilidades adicionales envíe
null,[]o no envíe el campo: las tres formas se entienden como "ninguna" y el documento sale con la responsabilidad principal.
Las responsabilidades guardadas también se devuelven en la consulta de configuración de la empresa
(GET /api/ubl2.1/config/query/{nit}), con la que otros sistemas importan la empresa desde el API.
Desde el panel
En Empresa › Nueva empresa, la principal se elige en Tipo Responsabilidad y las demás en Responsabilidades adicionales, un campo de selección múltiple debajo de la fila Tipo Responsabilidad / Organización / Régimen. Para quitar una se pulsa la × de su etiqueta.

El mismo campo está en Editar Empresa, pestaña Información de la Empresa, del listado de empresas. Y al cargar la Ficha RUT en el asistente, el API lee la casilla 53 y marca solas todas las responsabilidades que encuentre: la de mayor prioridad queda en Tipo Responsabilidad y el resto en Responsabilidades adicionales.
Responsabilidades del cliente y de las demás partes
Van en el cuerpo de cada documento, dentro del objeto de la parte que corresponda:
| Parte | Campo |
|---|---|
| Adquiriente (facturas, notas, documentos equivalentes) | customer.type_liability_ids |
| Proveedor (documento soporte y su nota de ajuste) | seller.type_liability_ids |
| Tercero de entrega | deliveryparty.type_liability_ids |
Ejemplo de una factura (POST /api/ubl2.1/invoice):
{
"number": 990000001,
"type_document_id": 1,
"customer": {
"identification_number": "900428042",
"dv": "1",
"name": "TAMPAC TECNOLOGIA EN AUTOMATIZACION SAS",
"phone": "3001234567",
"address": "CALLE 1 # 1 - 1",
"email": "cliente@ejemplo.com",
"type_document_identification_id": 6,
"type_organization_id": 1,
"type_regime_id": 1,
"municipality_id": 1006,
"type_liability_id": 14,
"type_liability_ids": [7, 9]
}
}
El campo es opcional y se valida igual en todos los tipos de documento: factura, factura de exportación, mandato, transporte, AIU, contingencias, notas crédito y débito, documento equivalente, documento soporte y la regeneración de PDF. Si alguno de los ids no existe en el catálogo, el API responde con el error de validación del campo.
Cómo queda en el XML
Los códigos se envían en un solo cbc:TaxLevelCode, separados por punto y coma y ordenados por el id del
catálogo, no por el orden en que se enviaron. El atributo listName es el código del régimen
(type_regime_id): 48 responsable de IVA, 49 no responsable.
Con el customer del ejemplo anterior (type_liability_id: 14 más type_liability_ids: [7, 9]):
<cac:PartyTaxScheme>
<cbc:RegistrationName>TAMPAC TECNOLOGIA EN AUTOMATIZACION SAS</cbc:RegistrationName>
<cbc:CompanyID schemeID="1" schemeName="31">900428042</cbc:CompanyID>
<cbc:TaxLevelCode listName="48">O-13;O-15;O-23</cbc:TaxLevelCode>
...
</cac:PartyTaxScheme>
El mismo valor se informa en el AttachedDocument (ad*.xml), en la parte de entrega, en el emisor del
documento soporte y en los eventos RADIAN.
Cómo queda en el PDF
La representación gráfica imprime los nombres de las responsabilidades separados por coma, tanto en los datos del emisor del encabezado como en los del adquiriente:
Responsabilidad: Gran contribuyente, Autorretenedor, Agente de retención en el impuesto sobre las ventas
Si el tercero solo informó type_liability_id, se imprime el nombre de esa única responsabilidad.
El API acepta varias por tercero, pero quien envía los documentos tiene que guardarlas y mandarlas. Si el
sistema que integra (por ejemplo el Facturador PRO) guarda una sola responsabilidad en la ficha del
cliente, en los documentos llegará solo esa aunque el cliente cumpla varias: hay que habilitar el campo
múltiple también allá y enviarlo en type_liability_ids.