Skip to content
SimploSimplo Docs

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_envio
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).

const current = await simplo.dtes.retrieve(dte.id);
current.estado; // 'procesando' | 'aceptado' | 'rechazado' | 'error_envio' | ...
current.tracking?.track_id; // SII submission tracking ID

Follow 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.