API de Integración DTE
Permite a un ERP, CRM o software a medida emitir Documentos Tributarios Electrónicos. El integrador envía solo la información comercial (receptor, ítems, fechas). DiffSii completa el emisor, asigna folio CAF, firma con el certificado digital, timbra y envía el DTE al SII.
Base URL de producción: https://saas.diffsii.cl
Qué hace DiffSii en cada emisión
- Valida el payload (RUT, tipo DTE, ítems, referencias).
- Completa el emisor desde la empresa autenticada.
- Reserva el siguiente folio CAF (Software de Mercado) o deja que Mipyme lo asigne.
- Firma, timbra (TED) y envía el sobre al SII.
- Registra el documento en el libro de ventas y devuelve folio, trackId y
pdfUrl.
Autenticación
Todos los endpoints de emisión requieren JWT. Obtén el token con un usuario de la empresa (idealmente un usuario técnico de integración).
Obtener token
Request:
curl -X POST "https://saas.diffsii.cl/api/auth/login-local" \
-H "Content-Type: application/json" \
-d '{
"email": "integracion@tuempresa.cl",
"password": "tu_password_segura"
}'
Body:
{
"email": "integracion@tuempresa.cl",
"password": "tu_password_segura"
}
Respuesta 200:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "Integración ERP",
"email": "integracion@tuempresa.cl",
"companies": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Empresa de Prueba SpA",
"rut": "76111111-1"
}
]
}
}
token para el header Authorization: Bearer
y el id de la empresa como companyId (también en X-Company-ID).
En los ejemplos siguientes se usa
a1b2c3d4-e5f6-7890-abcd-ef1234567890.
Emitir DTE
Headers
Authorization: Bearer {token}Content-Type: application/jsonX-Company-ID: {companyId}(recomendado)
Request completo (Factura afecta 33)
curl -X POST "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-d '{
"tipoDte": 33,
"fechaEmision": "2026-10-17",
"fechaVencimiento": "2026-11-16",
"formaPago": 2,
"referenciaExterna": "ERP-OC-9988",
"receptor": {
"rut": "76123456-0",
"razonSocial": "Cliente Demo SpA",
"giro": "Comercio al por mayor",
"direccion": "Av. Apoquindo 100",
"comuna": "Las Condes",
"ciudad": "Santiago",
"contacto": "compras@clientedemo.cl"
},
"items": [
{
"codigo": "SKU-01",
"nombre": "Servicio de consultoría",
"cantidad": 1,
"unidad": "UN",
"precio": 100000,
"descuentoPct": 0,
"exento": false
},
{
"codigo": "SKU-02",
"nombre": "Horas extra de implementación",
"cantidad": 4,
"unidad": "HR",
"precio": 25000,
"descuentoPct": 10,
"exento": false
}
],
"referencias": [],
"descuentoGlobalPct": 0,
"includeXml": false
}'
folioes opcional. Si se omite, DiffSii reserva el siguiente folio CAF o lo asigna Mipyme.referenciaExternaes la llave de idempotencia: si se repite, se responde el DTE ya emitido sin reenviar al SII.includeXml: trueagregaxmlDteen la respuesta.
Ejemplos por tipo de DTE
Reemplaza el token y el companyId. Los totales (neto, IVA, total) los calcula DiffSii;
no los envíes. El emisor tampoco: sale de la ficha de la empresa.
Factura exenta (34)
curl -X POST "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-d '{
"tipoDte": 34,
"fechaEmision": "2026-10-17",
"formaPago": 2,
"referenciaExterna": "ERP-EXENTA-120",
"receptor": {
"rut": "76123456-0",
"razonSocial": "Cliente Demo SpA",
"giro": "Educación",
"direccion": "Av. Apoquindo 100",
"comuna": "Las Condes",
"ciudad": "Santiago"
},
"items": [
{
"codigo": "CAP-01",
"nombre": "Capacitación profesional exenta",
"cantidad": 2,
"unidad": "UN",
"precio": 150000,
"exento": true
}
]
}'
Respuesta 201 (IVA en 0):
{
"exito": true,
"folio": 88,
"tipoDte": 34,
"trackId": "1234567891",
"estado": "ENVIADO",
"modalidad": "software_mercado",
"fechaEmision": "2026-10-17",
"receptor": { "rut": "76123456-0", "razonSocial": "Cliente Demo SpA" },
"totales": { "neto": 0, "exento": 300000, "iva": 0, "total": 300000 },
"referenciaExterna": "ERP-EXENTA-120",
"documentoId": "9f1c2e3a-4b5d-6789-abcd-111122223333",
"pdfUrl": "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/34/88/pdf?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"detalle": null
}
Boleta afecta (39)
curl -X POST "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-d '{
"tipoDte": 39,
"fechaEmision": "2026-10-17",
"formaPago": 1,
"referenciaExterna": "POS-CAJA1-55421",
"receptor": {
"rut": "1-9",
"razonSocial": "Cliente genérico"
},
"items": [
{
"nombre": "Venta mostrador",
"cantidad": 1,
"precio": 11900,
"exento": false
}
]
}'
En boleta el receptor puede ser RUT 1-9 (cliente genérico).
precio es neto unitario: 11.900 neto → IVA 2.261 → total 14.161.
Nota de crédito (61)
Obligatorio informar el documento origen en referencias.
curl -X POST "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-d '{
"tipoDte": 61,
"fechaEmision": "2026-10-18",
"formaPago": 2,
"referenciaExterna": "ERP-NC-9988-1",
"receptor": {
"rut": "76123456-0",
"razonSocial": "Cliente Demo SpA",
"giro": "Comercio al por mayor",
"direccion": "Av. Apoquindo 100",
"comuna": "Las Condes",
"ciudad": "Santiago"
},
"items": [
{
"codigo": "SKU-01",
"nombre": "Anulación servicio de consultoría",
"cantidad": 1,
"unidad": "UN",
"precio": 100000,
"exento": false
}
],
"referencias": [
{
"tipoDoc": "33",
"folio": "14503",
"fecha": "2026-10-17",
"razon": "Anula documento por error de facturación"
}
]
}'
La nota de débito (56) usa el mismo esquema de referencias.
JavaScript (secuencia completa)
async function emitirFactura33() {
const BASE = 'https://saas.diffsii.cl';
const COMPANY_ID = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890';
const login = await fetch(`${BASE}/api/auth/login-local`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'integracion@tuempresa.cl',
password: 'tu_password_segura'
})
}).then((r) => r.json());
const headers = {
Authorization: `Bearer ${login.token}`,
'Content-Type': 'application/json',
'X-Company-ID': COMPANY_ID
};
const emitido = await fetch(`${BASE}/api/integration/companies/${COMPANY_ID}/dte`, {
method: 'POST',
headers,
body: JSON.stringify({
tipoDte: 33,
fechaEmision: '2026-10-17',
fechaVencimiento: '2026-11-16',
formaPago: 2,
referenciaExterna: 'ERP-OC-9988',
receptor: {
rut: '76123456-0',
razonSocial: 'Cliente Demo SpA',
giro: 'Comercio al por mayor',
direccion: 'Av. Apoquindo 100',
comuna: 'Las Condes',
ciudad: 'Santiago'
},
items: [
{ codigo: 'SKU-01', nombre: 'Servicio de consultoría', cantidad: 1, unidad: 'UN', precio: 100000 }
]
})
}).then((r) => r.json());
console.log(emitido.folio, emitido.trackId, emitido.pdfUrl);
const consulta = await fetch(
`${BASE}/api/integration/companies/${COMPANY_ID}/dte/${emitido.tipoDte}/${emitido.folio}`,
{ headers }
).then((r) => r.json());
const pdf = await fetch(emitido.pdfUrl);
const blob = await pdf.blob();
return { emitido, consulta, blob };
}
emitirFactura33();
Campos
| Campo | Obligatorio | Notas |
|---|---|---|
tipoDte |
Sí | 33, 34, 39, 41, 46, 52, 56, 61 |
receptor.rut |
Sí | Con o sin puntos. Se valida dígito verificador. |
receptor.razonSocial |
Sí* | Puede omitirse si el RUT ya existe en Clientes de DiffSii. |
items[].nombre |
Sí | Descripción del detalle |
items[].cantidad |
Sí | Default 1 |
items[].precio |
Sí | Entero CLP, neto unitario |
items[].exento |
No | true para líneas no afectas |
fechaEmision |
No | YYYY-MM-DD. Default: hoy |
formaPago |
No | 1 contado, 2 crédito, 3 sin costo. Default 2 |
referencias |
56 y 61 | Documento origen: tipoDoc, folio, fecha, razon |
Respuesta 201 y PDF
Respuesta del ejemplo de factura 33 (ítem 100.000 + 4×25.000 con 10% dto. = neto 190.000):
{
"exito": true,
"folio": 14503,
"tipoDte": 33,
"trackId": "1234567890",
"estado": "ENVIADO",
"modalidad": "software_mercado",
"fechaEmision": "2026-10-17",
"receptor": {
"rut": "76123456-0",
"razonSocial": "Cliente Demo SpA"
},
"totales": {
"neto": 190000,
"exento": 0,
"iva": 36100,
"total": 226100
},
"referenciaExterna": "ERP-OC-9988",
"documentoId": "4c8a1d2e-9b70-4f11-8c22-0aa1bb2cc3dd",
"pdfUrl": "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503/pdf?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"detalle": null
}
pdfUrl abre el PDF del DTE. Incluye un token de descarga válido 30 días; no requiere el JWT de sesión.
Descarga con el token del link:
curl -L "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503/pdf?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-o DTE_33_14503.pdf
O autenticado con el JWT de integración:
curl -L "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503/pdf" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-o DTE_33_14503.pdf
El documento queda registrado en el libro de ventas de DiffSii.
Reemisión idempotente (200)
Si vuelves a enviar el mismo referenciaExterna, no se reenvía al SII:
{
"exito": true,
"idempotente": true,
"folio": 14503,
"tipoDte": 33,
"trackId": "1234567890",
"estado": "Aceptado",
"modalidad": "software_mercado",
"fechaEmision": "2026-10-17",
"receptor": { "rut": "76123456-0", "razonSocial": "Cliente Demo SpA" },
"totales": { "neto": 190000, "exento": 0, "iva": 36100, "total": 226100 },
"referenciaExterna": "ERP-OC-9988",
"documentoId": "4c8a1d2e-9b70-4f11-8c22-0aa1bb2cc3dd",
"pdfUrl": "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503/pdf?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"detalle": "Documento ya emitido con esta referenciaExterna. No se volvió a enviar al SII."
}
Consultar un DTE emitido
curl "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Respuesta 200:
{
"exito": true,
"folio": 14503,
"tipoDte": 33,
"estado": "Aceptado",
"fechaEmision": "2026-10-17",
"periodo": "2026-10",
"origen": "api",
"receptor": { "rut": "76123456-0" },
"totales": { "neto": 190000, "exento": 0, "iva": 36100, "total": 226100 },
"referenciaExterna": "ERP-OC-9988",
"trackId": "1234567890",
"documentoId": "4c8a1d2e-9b70-4f11-8c22-0aa1bb2cc3dd",
"pdfUrl": "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/33/14503/pdf?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Si el DTE no existe:
{ "error": "Documento no encontrado en DiffSii." }
Siguiente folio CAF
curl "https://saas.diffsii.cl/api/integration/companies/a1b2c3d4-e5f6-7890-abcd-ef1234567890/dte/siguiente-folio?tipoDte=33" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "X-Company-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Software de Mercado (CAF vigente):
{
"success": true,
"tipoDte": 33,
"emissionType": "software_mercado",
"hasCaf": true,
"exhausted": false,
"siguienteFolio": 14503,
"folioDesde": 14000,
"folioHasta": 14999,
"totalDisponibles": 497
}
Sistema Gratuito SII / Mipyme:
{
"success": true,
"tipoDte": 33,
"emissionType": "gratuito_sii",
"hasCaf": false,
"exhausted": false,
"siguienteFolio": 0,
"modo": "automatico_sii",
"message": "En el Sistema Gratuito SII el folio lo asigna el portal Mipyme al timbrar."
}
Útil para previsualizar el correlativo. En emisión, si no envías folio, DiffSii lo reserva automáticamente.
Errores de emisión
| HTTP | Cuándo |
|---|---|
| 400 | Payload inválido (RUT, ítems, tipoDte, NC/ND sin referencia) |
| 401 | Sin JWT o token expirado |
| 403 | Sin permiso de ventas, empresa ajena o tope del plan |
| 409 | Periodo cerrado, sin CAF o CAF agotado |
| 502 | El SII rechazó o no confirmó el envío |
400 — nota de crédito sin documento origen:
{
"error": "Payload de emisión inválido.",
"details": [
"Las notas de crédito (61) y débito (56) requieren al menos una referencia al documento origen."
]
}
400 — RUT inválido:
{
"error": "Payload de emisión inválido.",
"details": ["RUT con dígito verificador incorrecto: 76123456-9"]
}
403:
{ "error": "Tu cuenta no tiene permisos para emitir ventas." }
409 — periodo cerrado:
{ "error": "El periodo 2026-10 está cerrado. No es posible emitir DTE." }
409 — sin CAF:
{
"error": "No hay CAF autorizado para el tipo de documento 33. Sincronice o solicite un CAF al SII.",
"code": "SIN_CAF"
}
502 — el SII no confirmó:
{
"exito": false,
"folio": 14503,
"tipoDte": 33,
"trackId": null,
"estado": "RECHAZADO",
"modalidad": "software_mercado",
"fechaEmision": "2026-10-17",
"receptor": { "rut": "76123456-0", "razonSocial": "Cliente Demo SpA" },
"totales": { "neto": 190000, "exento": 0, "iva": 36100, "total": 226100 },
"referenciaExterna": "ERP-OC-9988",
"documentoId": null,
"pdfUrl": null,
"detalle": "El SII rechazó el envío."
}
Requisitos en DiffSii
- Empresa con certificado digital (Software de Mercado) o clave tributaria (Sistema Gratuito SII / Mipyme).
- CAF vigente del tipo de documento, si emite por Software de Mercado.
- Resolución SII y RUT envía configurados en la ficha de la empresa.
- Usuario con acceso al módulo de ventas.
Para inyectar compras/ventas ya emitidas (sin timbrar), usa la API de movimientos B2B.