Emisión masiva de documentos
Crea hasta 200 documentos en una sola llamada. La respuesta incluye información completa de cada documento creado, incluyendo PDF cuando está disponible. Los resultados también se enviarán por webhook si está configurado.
Permisos requeridos: La API Key debe tener el permiso document:create o permisos completos (*). Además, la entidad emisora debe tener credenciales SII válidas configuradas.
Headers
Idempotency-Key (Opcional)
- Tipo: String
- Descripción: Header opcional que previene la creación de lotes duplicados
- Restricciones: Máximo 256 caracteres, expira después de 24 horas
- Ejemplo:
"batch_2024_01_15_001"
X-Use-Defaults (Opcional)
⚠️ IMPORTANTE: Se recomienda encarecidamente usar el header X-Use-Defaults: true en todas tus solicitudes de emisión masiva de documentos. Este header simplifica significativamente la creación de documentos al hacer opcionales muchos campos y completar automáticamente los datos faltantes según tu configuración en Tu Pana.
- Tipo: String
- Valores permitidos:
"true","false" - Por defecto:
"false" - Descripción: Si se establece como
"true", el sistema usará valores por defecto para campos no proporcionados, reduciendo la complejidad y cantidad de datos que necesitas enviar
Campos que se vuelven opcionales o se completan automáticamente
A nivel del documento:date_issued: Si no se proporciona, se usa la fecha actual (en zona horaria de Chile)folio: Si no se proporciona, se genera automáticamente por el sistemadte_type.code: Si no se proporciona, se usa"33"(Factura Electrónica) por defectoheader.payment_method: Si no se proporciona, se establece como"2"(crédito)
document_issuer (solo con RUT):
Con X-Use-Defaults: true, solo necesitas proporcionar el rut del emisor. El sistema completa automáticamente todos los demás campos desde tu configuración:
business_name: Razón social del emisorbusiness_activity: Giro o actividad económicaaddress: Dirección del emisordistrict: Comunacity: Ciudademail: Email de contactophone_number: Teléfonoactivity_code: Código de actividad económica
document_receiver (solo con RUT):
Con X-Use-Defaults: true, solo necesitas proporcionar el rut del receptor. El sistema completa automáticamente todos los demás campos desde la configuración del cliente o datos disponibles:
business_name: Razón social del receptor ✅ Opcionalcontact: Contacto del receptor ✅ Opcionalbusiness_activity: Giro o actividad económica ✅ Opcional (no se valida si está vacío)address: Dirección del receptor ✅ Opcional (no se valida si está vacío)district: Comuna ✅ Opcional (no se valida si está vacío)city: Ciudad ✅ Opcional (no se valida si está vacío)
Request Body
documents (Obligatorio)
- Tipo: Array
- Descripción: Lista de documentos a crear en el lote
- Restricciones: Máximo 200 documentos por lote
Estructura de cada documento
Campos base (aplican a todos los tipos de documentos)
dte_type (Obligatorio)- Tipo: Object
- Campos:
code(String): Código del tipo de documento
- Tipo: String (formato YYYY-MM-DD)
- Descripción: Fecha de emisión del documento
- Obligatorio: Sí, excepto si se usa
X-Use-Defaults: true(usa fecha actual)
- Tipo: Integer
- Descripción: Número de folio del documento
- Comportamiento: Si no se proporciona, se genera automáticamente
Tipos de Documentos Soportados
Respuesta
Respuesta Inmediata de la API
201 - Documentos creados exitosamente
- Tipo: Object
- Campos:
batch_id(String): Identificador único del lotestatus(String): Estado del procesamiento ("processing")total_documents(Integer): Número total de documentos en el lotemessage(String): Mensaje descriptivo del estado
413 - Límite excedido
- Descripción: Más de 200 documentos en el array
- Campos:
error(String): Descripción del errorcode(String): Código de error
400 - Credenciales no activas
- Descripción: La empresa emisora no tiene credenciales SII activas configuradas
- Campos:
error(String): Mensaje descriptivo indicando que no hay credenciales activas para el RUT especificado
422 - Error de validación
- Descripción: Cuerpo malformado o fallo de validación
- Campos:
error(String): Descripción del errordetails(Array): Detalles específicos de los errores de validación
Respuesta del Webhook
Cuando un documento se emite exitosamente, Tu Pana envía un webhook con la siguiente estructura: event (Obligatorio)- Tipo: String
- Valor:
"document.issued" - Descripción: Tipo de evento del webhook
- Tipo: String (ISO 8601)
- Descripción: Timestamp de cuando se generó el webhook
- Tipo: Object
- Descripción: Datos completos del documento emitido
Campos del objeto data
Información básica del documento:id(Integer): ID único del documento en Tu Panafolio(String): Folio asignado por el SIIdate_issued(String): Fecha de emisión (formato YYYY-MM-DD)amount_with_iva(Number): Monto total con IVA incluidois_sandbox(Boolean): Indica si es un documento de prueba
code(String): Código del tipo de documentodescription(String): Descripción del tipo de documento
id(Integer): ID del emisor en Tu Pananame(String): Nombre/razón social del emisortax_id(String): RUT del emisor (formato con puntos y guión)email(String): Email del emisor
id(Integer): ID del receptor en Tu Pananame(String): Nombre/razón social del receptortax_id(String): RUT del receptor (formato con puntos y guión)email(String): Email del receptor
purchase_transaction_type(Integer): Tipo de transacción de comprasale_transaction_type(Integer): Tipo de transacción de ventapayment_method(String): Método de pagodue_date(String): Fecha de vencimiento (formato YYYY-MM-DD)retention_type(String): Tipo de retención (solo para boletas de honorarios)
rut(String): RUT del emisorbusiness_name(String): Razón socialbusiness_activity(String): Giro o actividad económicaphone_number(String): Teléfonoemail(String): Emailactivity_code(Integer): Código de actividad económicasii_branch_code(String): Código de sucursal SIIaddress(String): Direccióndistrict(String): Comunacity(String): Ciudad
rut(String): RUT del receptorbusiness_name(String): Razón socialbusiness_activity(String): Giro o actividad económicacontact(String): Contactoaddress(String): Direccióndistrict(String): Comunacity(String): Ciudad
net_amount(Number): Monto neto (sin IVA)iva_rate(Number): Tasa de IVA aplicadaiva_amount(Number): Monto del IVAtotal_amount(Number): Monto total
item_name(String): Nombre del producto/servicioitem_description(String): Descripción del producto/servicioquantity(Number): Cantidadunit_price(Number): Precio unitario sin IVAitem_code(String): Código del producto/servicioitem_type_code(String): Código del tipo de ítemunit(String): Unidad de medidadiscount_percent(Number): Porcentaje de descuentoother_tax(Number): Otros impuestos
dte_type_code(String): Código del tipo de DTE de referenciareference_folio(String): Folio del documento referenciadoreference_date(String): Fecha del documento referenciadoreference_reason(String): Razón de la referencia
pdf_file(String): URL temporal para descargar el PDF del documentoxml_file(String): URL temporal para descargar el XML del documento
- Descripción: Campos personalizados adicionales que se pueden incluir en el documento
- Estructura: Objeto flexible que puede contener cualquier información adicional
Consideraciones Especiales por Tipo de Documento
Ejemplos de Uso por Tipo de Documento
Factura Electrónica (DTE 33)
Factura de Compra (DTE 46)
Factura de Exportación (DTE 110)
Nota de Crédito (DTE 61)
Boleta de Honorarios por usuario autorizado (DTE 80)
El emisor de la boleta esdocument_issuer.rut, pero la emite un usuario autorizado por el SII (dueño de una credencial sii_company). header.authorized_user_rut indica cuál credencial usar cuando hay varias accesibles.
Boleta de Honorarios de Terceros (DTE 90)
Ejemplo mínimo con headerX-Use-Defaults: true: con solo RUT en emisor y receptor el backend completa business_name y el resto si existen en Tu Pana; usa fecha actual si se omite date_issued.
🧾 Factura de Compra (DTE 46)
Campos específicos del header:
-
purchase_transaction_type(Integer, Obligatorio):1: Compras del giro - Productos/servicios relacionados con tu actividad principal2: Compras fuera del giro - Productos/servicios no relacionados con tu actividad principal3: Activo fijo - Bienes que se incorporan al patrimonio de la empresa (maquinaria, muebles, etc.)
-
payment_method(String, Opcional):"1": Contado - Pago inmediato"2": Crédito - Pago diferido"3": Sin costo - Producto/servicio recibido gratuitamente
Validaciones importantes:
- Registro contable: Este documento genera asiento automático en tu contabilidad
- IVA recuperable: El IVA pagado puede ser recuperado según el tipo de compra
- Proveedor extranjero: Si el proveedor es extranjero, usar RUT genérico
55555555-5 - Fecha límite: Las compras deben registrarse dentro del mes siguiente a la recepción
Casos de uso comunes:
- Registro de compras a proveedores locales
- Incorporación de activos fijos
- Servicios profesionales recibidos
- Compras de materias primas o insumos
✈️ Factura de Exportación (DTE 110)
Campos requeridos en export_data:
-
transport_mode(String, Obligatorio):"1": Marítimo - Envío por barco"2": Aéreo - Envío por avión"3": Terrestre - Envío por tierra (camión, tren)"4": Multimodal - Combinación de modos de transporte
-
destination_country(String, Obligatorio):- Código ISO del país de destino (ej:
"US","BR","AR") - Debe coincidir con el país del receptor
- Código ISO del país de destino (ej:
-
destination_port(String, Obligatorio):- Nombre del puerto/aeropuerto/ciudad de destino
- Ejemplos:
"JFK","Santos","Buenos Aires"
-
origin_port(String, Obligatorio):- Nombre del puerto/aeropuerto/ciudad de origen en Chile
- Ejemplos:
"SCL","IQQ","ANF"
-
export_clause(String, Obligatorio):"1": A firme - Compromiso incondicional de exportar"2": Bajo protesta - Exportación sujeta a condiciones"3": Sin cláusula - Exportación sin especificar condiciones
Campos específicos del header:
-
sale_transaction_type(Integer, Obligatorio):1: Operación constituye venta - Venta normal2: Ventas por acto o contrato - Contratos especiales3: Boleto de pasaje - Para agencias de viajes
-
currency(String, Obligatorio):"USD": Dólares americanos"EUR": Euros"CLP": Pesos chilenos"UF": Unidades de Fomento
Información del receptor extranjero:
- RUT: Puede usar identificadores especiales como
99999999-9para extranjeros - Dirección: Dirección completa en el extranjero
- País: País de destino (debe coincidir con
destination_country)
Precios y cálculos:
- FOB (Free on Board): Los precios deben incluir costos hasta la entrega al transportista
- Moneda: Debe coincidir con
header.currency - Sin IVA: Las exportaciones están exentas de IVA chileno
Requisitos legales:
- Registro de exportación: Debe estar registrado en el sistema aduanero
- Certificado de origen: Puede requerirse según acuerdos comerciales
- Documentos aduaneros: Factura comercial, certificado de origen, etc.
💼 Boletas de Honorarios (DTE 80, 90)
Campos específicos del header:
retention_type(String, Obligatorio):"RETRECEPTOR": La retención la realiza el receptor (99% de los casos)"RETCONTRIBUYENTE": La retención la realiza el contribuyente emisor (casos excepcionales)
authorized_user_rut(String, Opcional): RUT del usuario autorizado por el SII (dueño de la credencialsii_company) que emite en representación del emisor. Selecciona determinísticamente la credencial cuando hay varias accesibles. Solo válido para DTE 80 y 90.
Retención automática del 14.5%:
- Cálculo: Se aplica sobre el monto bruto antes de IVA
- Responsable: Normalmente el pagador retiene y declara el impuesto
- Pago al profesional: Se paga el 85.5% restante (bruto menos retención)
Información del receptor (profesional):
- Campos opcionales: A diferencia de facturas, no todos los datos son obligatorios
- RUT obligatorio: Siempre se requiere el RUT del profesional
- Actividad económica: Debe corresponder a servicios profesionales
Diferencias entre DTE 80 y 90:
DTE 80 - Boleta de Honorarios:- Emisión directa por el pagador al profesional
- Relación directa pagador-profesional
- document_issuer: Quien paga (empresa o persona que contrata)
- Emisión por intermediario (plataformas, marketplaces)
- document_issuer: Contribuyente real (quien paga — restaurante, empresa cliente)
- document_receiver: Profesional que recibe (repartidor, freelancer, instructor)
- Requiere enrolamiento de usuarios autorizados para emisión por terceros
- Misma estructura de request que DTE 80; solo cambia
dte_type.code: "90"
Validaciones específicas:
- Tope mensual: Límite de emisión sin retención ampliada
- Tipo de servicio: Debe corresponder a honorarios profesionales
- Declaración: El retenedor debe declarar y pagar el impuesto retenido
Casos de uso:
- DTE 80: Honorarios de abogados, contadores, médicos; servicios de consultoría; pagos directos a freelancers
- DTE 90: Apps de delivery (Rappi, Uber Eats); plataformas freelance; marketplaces de servicios; plataformas educativas
🔒 Seguridad y URLs temporales
URLs de archivos temporales:
- PDF y XML: URLs válidas por 1 hora aproximadamente
- Autenticación: Incluyen tokens de acceso automático
- Recomendación: Descargar inmediatamente al recibir el webhook
Medidas de seguridad:
- Encriptación: Archivos transmitidos de forma segura
- Validación: Solo el emisor puede acceder a sus documentos
- Auditoría: Todas las descargas quedan registradas
Authorizations
API Key para autenticación. Debe proporcionarse en el header Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo 'Api-Key ' seguido de tu API key)
Headers
Previene lotes duplicados (≤ 256 caracteres, expira después de 24 h)
Si se establece como true, el sistema usará valores por defecto para campos no proporcionados:
- Fecha actual para date_issued
- Datos del emisor según configuración de la plataforma o primera actividad/dirección disponible
- Datos del receptor según configuración del cliente o primera actividad/dirección disponible
- Payment method = '2' (crédito) en el header del documento
Body
Lote de documentos a crear
Array de documentos a crear (máximo 200)
Response
Solicitud de creación de documentos aceptada. Los resultados se enviarán por webhook.
