Integra emisión de DTEs chilenos en tu sistema en minutos. API REST + JSON, autenticación por API Key.
Todas las solicitudes deben incluir tu API Key en el header X-API-Key. Genera y administra tus claves desde el panel de tu cuenta.
Header requerido
X-API-Key: fai_live_xxxxxxxxxxxx
Formato de API Key
Prefijo fai_live_ para producción, fai_test_ para certificación SII.
curl -X GET https://factuia.cl/api/v1/empresa/saldo \
-H "X-API-Key: fai_live_xxxxxxxxxxxx"
Los errores devuelven un JSON con la clave message y, en casos de validación, errors.
| Código | Significado | Acción recomendada |
|---|---|---|
| 200 | OK | Solicitud exitosa |
| 201 | Created | DTE emitido correctamente |
| 400 | Bad Request | Revisa los campos del body — se devuelven errors detallados |
| 401 | Unauthorized | API Key ausente o inválida |
| 403 | Forbidden | Sin permiso para este recurso (plan sin API) |
| 404 | Not Found | DTE no encontrado en tu empresa |
| 422 | Unprocessable | Validación de negocio fallida (ej: RUT inválido, folio agotado) |
| 429 | Too Many Requests | Rate limit superado — espera y reintenta |
| 500 | Server Error | Error interno — contáctanos si persiste |
// Ejemplo respuesta 422
{
"message": "El RUT del receptor es inválido.",
"errors": {
"receptor.rut": ["El RUT 12345678-0 no existe en el SII."]
}
}
El límite se devuelve en los headers de cada respuesta.
X-RateLimit-Limit
60 solicitudes por minuto por API Key
X-RateLimit-Remaining
Solicitudes restantes en la ventana actual
Retry-After
Segundos a esperar si recibes 429
/api/v1/dte/factura
Emite una factura afecta (tipo 33) o exenta (tipo 34) firmada y enviada al SII en tiempo real. Si el SII acepta el documento, devuelve el folio asignado y el XML firmado.
Request Body
{
"tipo": "33", // 33 afecta | 34 exenta
"receptor": {
"rut": "76123456-7",
"razon_social": "Cliente SA",
"giro": "Tecnología",
"direccion": "Av. Apoquindo 1234",
"ciudad": "Santiago",
"comuna": "Las Condes" // opcional
},
"items": [
{
"nombre": "Consultoría abril",
"cantidad": 1,
"precio_unitario": 500000,
"descuento_pct": 0 // opcional
}
],
"forma_pago": "contado", // contado | credito
"referencia": "OC-2026-001", // opcional
"observacion": "..." // opcional
}
Response 201
{
"id": "dte_abc123",
"folio": 1042,
"tipo": 33,
"estado_sii": "ACEPTADO",
"monto_total": 595000,
"pdf_url": "https://factuia.cl/api/v1/dte/dte_abc123/pdf",
"xml_url": "https://factuia.cl/api/v1/dte/dte_abc123/xml",
"emitido_en": "2026-04-08T10:23:00Z"
}
/api/v1/dte/boleta
Emite una boleta electrónica afecta (tipo 39) o exenta (tipo 41). El receptor es facultativo — si se omite, se emite a consumidor final.
{
"tipo": "39", // 39 afecta | 41 exenta
"receptor": { // opcional en boleta
"rut": "12345678-9",
"razon_social": "Juan Pérez"
},
"items": [
{ "nombre": "Producto A", "cantidad": 2, "precio_unitario": 15000 }
]
}
/api/v1/dte/nc
Emite una nota de crédito electrónica referenciando el DTE original. Puede anular completamente o hacer un ajuste parcial.
{
"dte_referencia_id": "dte_abc123", // ID interno del DTE a referenciar
"motivo": "Anulación de factura",
"tipo_nc": "anulacion", // anulacion | correccion | descuento
"items": [ // omitir para anulación total
{ "nombre": "Ajuste precio", "cantidad": 1, "precio_unitario": 50000 }
]
}
/api/v1/dte/nd
Emite una nota de débito referenciando el DTE original, para cobros adicionales o correcciones al alza.
{
"dte_referencia_id": "dte_abc123",
"motivo": "Cobro adicional por flete",
"items": [
{ "nombre": "Flete adicional", "cantidad": 1, "precio_unitario": 30000 }
]
}
/api/v1/dte/guia
{
"receptor": {
"rut": "76123456-7", "razon_social": "Bodega Sur",
"direccion_despacho": "Ruta 5 Sur km 12", "ciudad": "Maipú"
},
"indicador_traslado": 1, // 1=venta 2=consignación 3=traslado interno
"items": [
{ "nombre": "Cajas producto X", "cantidad": 50, "precio_unitario": 8000 }
]
}
/api/v1/dte/lote
Envía hasta 100 DTEs del mismo tipo en una sola llamada. El procesamiento es asíncrono — se devuelve un lote_id para consultar el estado de cada documento.
Request
{
"tipo": "33",
"documentos": [
{
"receptor": { ... },
"items": [ ... ]
},
{ ... } // hasta 100
]
}
Response 202
{
"lote_id": "lot_xyz789",
"total": 12,
"estado": "procesando",
"webhook_url": "https://tu-app.com/webhook"
}
/api/v1/dte/{id}
Devuelve el estado actualizado de un DTE. El campo estado_sii se sincroniza en tiempo real con el SII.
// Response 200
{
"id": "dte_abc123",
"tipo": 33,
"folio": 1042,
"estado_sii": "ACEPTADO", // PENDIENTE | ACEPTADO | RECHAZADO | REPARO
"receptor_rut": "76123456-7",
"receptor_razon_social": "Cliente SA",
"monto_neto": 500000,
"monto_iva": 95000,
"monto_total": 595000,
"emitido_en": "2026-04-08T10:23:00Z",
"pdf_url": "https://factuia.cl/api/v1/dte/dte_abc123/pdf"
}
/api/v1/dte/{id}/pdf
Devuelve el PDF del DTE. Puedes agregar ?cedible=1 para la versión cedible.
// Headers de respuesta
Content-Type: application/pdf
Content-Disposition: attachment; filename="F33-1042.pdf"
/api/v1/dte/{id}/xml
Devuelve el XML firmado con el sello electrónico del SII.
/api/v1/empresa/saldo
// Response 200
{
"plan": "Profesional",
"dtes_emitidos_mes": 47,
"dtes_limite_mes": 200,
"ciclo_renovacion": "2026-05-01",
"folios": {
"33": { "disponibles": 450, "proximo_timbraje": 100 },
"39": { "disponibles": 820, "proximo_timbraje": 500 }
}
}
/api/v1/rut/validar?rut=76123456-7
Verifica matemáticamente el dígito verificador y, opcionalmente, consulta la actividad en el SII.
{
"rut": "76123456-7",
"valido": true,
"razon_social": "Empresa Ejemplo SpA",
"actividad_economica": "620200 - Actividades de consultoría informática",
"inicio_actividades": "2018-03-14"
}
Factuia puede notificar a una URL de tu sistema cuando un DTE cambia de estado. Configura tu URL desde el panel de tu empresa en Ajustes → Webhooks.
Seguridad
Cada payload incluye el header X-Factuia-Signature con HMAC-SHA256 del body usando tu secret.
Reintentos
Si tu endpoint devuelve algo distinto a 2xx, Factuia reintenta hasta 3 veces con backoff exponencial.
Verificar firma
// PHP
$secret = env('FACTUIA_WEBHOOK_SECRET');
$payload = file_get_contents('php://input');
$signature = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($signature, $_SERVER['HTTP_X_FACTUIA_SIGNATURE'])) {
http_response_code(401); exit;
}
Eventos disponibles
| Evento | Descripción |
|---|---|
dte.aceptado |
El SII aceptó el documento sin observaciones |
dte.rechazado |
El SII rechazó el documento — incluye motivo |
dte.reparo |
El SII aceptó con reparos — puede corregirse |
dte.anulado |
Se emitió una nota de crédito de anulación total |
lote.completado |
Todos los DTEs del lote fueron procesados |
folios.alerta |
Quedan menos de 50 folios para un tipo de DTE |
Payload de ejemplo
{
"evento": "dte.aceptado",
"timestamp": "2026-04-08T10:23:05Z",
"data": {
"id": "dte_abc123",
"tipo": 33,
"folio": 1042,
"estado_sii": "ACEPTADO",
"monto_total": 595000
}
}
Obtén tu API Key gratis y emite tu primer DTE en menos de 5 minutos.