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.
El endpoint
Sección titulada «El endpoint»| 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.
Reglas que hacen correcta una emisión
Sección titulada «Reglas que hacen correcta una emisión»- Los montos son pesos chilenos (CLP) enteros, netos de IVA. Sin centavos, sin floats para dinero. La API calcula el IVA (19%).
emitretorna antes del veredicto del SII. Persistedte.id, tratafirmadocomo “en vuelo” y resuelve el estado final vía webhooks (preferido) o polling deGET /api/v1/billing/dte/{id}hasta un estado terminal (aceptado,rechazadoocon_reparos).- Guarda
dte.idydte.folioen tu lado (ej. en la fila de la orden) inmediatamente después de emitir. - No bloquees el flujo del usuario esperando la aceptación del SII — puede tardar. Emite, responde y reconcilia de forma asíncrona.
Idempotencia
Sección titulada «Idempotencia»La emisión exige un header Idempotency-Key. Con el SDK:
-
dtes.emitgenera unaIdempotency-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
ValidationErrorconcode: '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.
Relacionado
Sección titulada «Relacionado»- Tipos de DTE — códigos y requisitos por tipo
- Estados — el ciclo de vida completo
- Errores — clases de error y reintentos
- Límites — rate limits por empresa