v1 — REST API

Documentación de la API

Integra emisión de DTEs chilenos en tu sistema en minutos. API REST + JSON, autenticación por API Key.

Base URL: https://factuia.cl/api/v1 SII Producción + Certificación Todos los DTE tipos 33–61

Autenticación

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"

Errores y códigos HTTP

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."]
  }
}

Rate limiting

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

POST

Emitir factura electrónica

/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"
}
Nota: Los montos siempre van en CLP sin decimales. El IVA (19%) se calcula automáticamente en facturas afectas.
POST

Emitir boleta electrónica

/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 }
  ]
}
POST

Nota de crédito (61)

/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 }
  ]
}
POST

Nota de débito (56)

/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 }
  ]
}
POST

Guía de despacho (52)

/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 }
  ]
}
POST

Emisión en lote

/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"
}
GET

Consultar DTE

/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"
}

Descargar PDF y XML

GET /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"
GET /api/v1/dte/{id}/xml

Devuelve el XML firmado con el sello electrónico del SII.

GET

Saldo de folios y plan

/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 }
  }
}
GET

Validar RUT

/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"
}

Webhooks

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
  }
}

¿Listo para integrar?

Obtén tu API Key gratis y emite tu primer DTE en menos de 5 minutos.