Flujo de emisión
Desde la versión v1.4.0, toda emisión de DTE es asíncrona.
Por qué asíncrono
Procesar un DTE contra el SII toma unos segundos. Un modelo asíncrono te da una respuesta inmediata y un manejo robusto de reintentos, sin dejar tu request colgado esperando.
El flujo
- Tu sistema envía
POST /v1/dte/emitircon el JSON del documento. Folyo valida los datos y responde202 Acceptedde inmediato con unjob_id. - Folyo procesa el documento y lo envía al SII en segundo plano.
- Recibes el resultado por uno de tres canales:
| Canal | Cuándo usar |
|---|---|
| Webhook | Recomendado. Tu endpoint recibe el evento dte.emitido con el resultado. |
| Polling | GET /v1/dte/emision/:jobId cada 2-3 segundos hasta que estado != "pending". |
| SSE | Solo para dashboards en el browser. No recomendado para integraciones server-side. |
Estados del job
pending— en cola.processing— en proceso contra el SII.completed— enviado exitosamente al SII.failed— error, sea rechazo del SII o interno. Revisa el campoerrorpara el detalle.
Después del envío: el veredicto del SII
Que el job termine en completed significa que el SII recibió el documento y le asignó un Track ID. El veredicto (aceptación o rechazo) llega después: el documento queda en estado enviado y Folyo consulta al SII de forma automática hasta obtener una respuesta firme, momento en que pasa a aceptado_sii o rechazado_sii y se dispara el webhook correspondiente.
Normalmente el SII responde en minutos, pero en horas de alta carga puede demorar más de una hora en procesar un envío. Es una demora del SII, no un error:
- No reemitas un documento porque siga en
enviado: el folio ya está usado y una reemisión crea un documento duplicado. Si reintentas unPOST /v1/dte/emitirpor un error de red, usa siempre el headerIdempotency-Key. - Suscríbete al webhook de cambio de estado en vez de asumir un plazo fijo.