States
The lifecycle of a DTE in the Simplo API — the 9 public states, from draft to the SII's verdict.
A DTE’s estado field moves through this pipeline (the values serialize
exactly as shown, in Spanish):
borrador → generado → firmado → enviando → procesando → aceptado │ ↘ rechazado │ ↘ con_reparos ↘ error_envioThe 9 states
Section titled “The 9 states”estado |
Meaning |
|---|---|
borrador |
Created but not yet signed (“draft”) |
generado |
Document built, prior to signing (“generated”) |
firmado |
Digitally signed (“signed”); what emit returns. Pending submission |
enviando |
Accepted by the platform, awaiting SII processing (“sending”) |
procesando |
The SII received the submission; final verdict pending (“processing”) |
aceptado |
Accepted by the SII — the document is tax-valid (“accepted”) |
rechazado |
Rejected by the SII — fix the cause and emit a new document (“rejected”) |
con_reparos |
Accepted by the SII with observations (“accepted with remarks”) |
error_envio |
Submission to the SII failed permanently — not a pending retry (“submission error”) |
The terminal states are aceptado, rechazado, con_reparos and
error_envio.
A rejected DTE is never mutated in place: you emit a new document (and usually a credit note if you need to correct one that was already accepted — see DTE types).
How to follow the verdict
Section titled “How to follow the verdict”const current = await simplo.dtes.retrieve(dte.id);current.estado; // 'procesando' | 'aceptado' | 'rechazado' | 'error_envio' | ...current.tracking?.track_id; // SII submission tracking IDFollow the SII’s verdict via dte.tracking (submission track ID and
counters) and dte.sii_status (the SII’s detailed response), by polling
GET /api/v1/billing/dte/{id}. (Webhook
delivery isn’t live yet.)
Rule of thumb: emit returns with firmado — treat that state as “in
flight”, persist dte.id, and resolve the final state asynchronously by
polling. Don’t block your user’s flow waiting for SII acceptance.