Skip to content
SimploSimplo Docs

Emisión

Emitir un DTE con la API de Simplo — el endpoint POST /api/v1/billing/dte, la Idempotency-Key obligatoria y el flujo asíncrono hacia el SII.

This content is not available in your language yet.

Método Path Descripción
POST /api/v1/billing/dte Emitir un DTE (Idempotency-Key obligatoria). Responde 201 con estado firmado; el envío al SII es asíncrono.
GET /api/v1/billing/dte Listar DTEs con paginación por cursor y filtros por tipo, estado, fecha y receptor.
GET /api/v1/billing/dte/{id} Detalle y estado actual de un DTE (útil para polling).
GET /api/v1/billing/dte/{id}/pdf Representación impresa (PDF con timbre PDF417).
GET /api/v1/billing/dte/{id}/xml XML firmado del documento.

Con el SDK, todo esto es simplo.dtes.emit, .list, .retrieve, .pdf y .xml — ver el quickstart.

  1. Los montos son pesos chilenos (CLP) enteros, netos de IVA. Sin centavos, sin floats para dinero. La API calcula el IVA (19%).
  2. emit retorna antes del veredicto del SII. Persiste dte.id, trata firmado como “en vuelo” y resuelve el estado final vía webhooks (preferido) o polling de GET /api/v1/billing/dte/{id} hasta un estado terminal (aceptado, rechazado o con_reparos).
  3. Guarda dte.id y dte.folio en tu lado (ej. en la fila de la orden) inmediatamente después de emitir.
  4. No bloquees el flujo del usuario esperando la aceptación del SII — puede tardar. Emite, responde y reconcilia de forma asíncrona.

La emisión exige un header Idempotency-Key. Con el SDK:

  • dtes.emit genera una Idempotency-Key (UUID) automáticamente por llamada — un reintento en vuelo nunca puede duplicar una factura. No construyas una capa extra de dedup alrededor de llamadas individuales.

  • Para dedup entre procesos (un job reintentado por tu cola), pasa tu propia key estable:

    await simplo.dtes.emit(params, { idempotencyKey: `order-${orderId}` });

    La misma key + el mismo body dentro de 24 horas devuelve el resultado original. Una emisión repetida (misma key, mismo body) llega marcada con el header de respuesta X-Idempotency-Replay: true. Las keys completadas se retienen por 24 horas.

  • Nunca reutilices una idempotency key con un body distinto — eso es un ValidationError con code: 'IDEMPOTENCY_BODY_MISMATCH'.

code Status Significado
IDEMPOTENCY_IN_PROGRESS 409 La misma key se está procesando ahora mismo — espera y consulta el resultado
IDEMPOTENCY_BODY_MISMATCH 422 La key se reutilizó con un body distinto — usa una key nueva

Si al emitir recibes un 503 por el servicio de idempotencia temporalmente no disponible, reintenta con la misma key.