Connect

Obtener un documento emitido

Devuelve el detalle completo de un documento emitido, por su id en Notta: receptor, montos, items, referencias, correo de entrega, el estado en el SII con su glosa y el historial de transiciones.

Tool IDnotta.dte.obtener
Nombre MCPnotta__dte__obtener
Conectornotta
Planoaction
Scope (permiso)notta:read
Authconnection_credentials
Versión1
Sensiblesí
Deprecadono
ComportamientoreadOnly=true, destructive=false, idempotent=true, openWorld=true

Requiere conexión. Indica cuál en cada llamada: header X-Connect-Connection en REST y campo connectionId en el execute de MCP. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale de conexiones.estado.consultar.

Qué hace

Es el seguimiento del flujo asíncrono que abre notta.dte.emitir. Para cortar una espera usa estado.terminal y nunca la igualdad con un estado concreto: un rechazo también es final.

Entrada

CampoTipoRequeridoDescripción
idstring `^([0-9a-fA-F]8-[0-9a-fA-F]4-[1-8][0-9a-fA-F]3-[89abAB][0-9a-fA-F]3-[0-9a-fA-F]1200000000-0000-0000-0000-000000000000ffffffff-ffff-ffff-ffff-ffffffffffff)$`
JSON Schema de entrada
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."
    }
  },
  "required": [
    "id"
  ]
}

Salida

CampoTipoRequeridoDescripción
idstring `^([0-9a-fA-F]8-[0-9a-fA-F]4-[1-8][0-9a-fA-F]3-[89abAB][0-9a-fA-F]3-[0-9a-fA-F]1200000000-0000-0000-0000-000000000000ffffffff-ffff-ffff-ffff-ffffffffffff)$`
foliostringsíFolio que el SII asignó desde el CAF. La numeración corre por (RUT emisor, tipo de documento, ambiente), así que el folio SOLO no identifica un documento: el mismo número existe en otro tipo y en el otro ambiente. Para ubicarlo por folio, filtra también por tipo_dte.
tipo_dte33 · 34 · 39 · 41 · 46 · 52 · …síCódigo SII del tipo de documento: 33 factura afecta, 34 factura exenta, 46 factura de compra, 52 guía de despacho, 56 nota de débito, 61 nota de crédito, 110/112 exportación.
rut_emisorstringsíRUT de la empresa que emitió, en formato CUERPO-DV sin puntos (76123456-0).
rut_receptorstringsíRUT del receptor del documento, en formato CUERPO-DV sin puntos (76123456-0).
razon_social_receptorstringnullsí
giro_receptorstringnullsí
direccion_receptorstringnullsí
comuna_receptorstringnullsí
monto_netoenterosíMonto neto afecto EN PESOS CHILENOS, siempre. 0 en un documento exento, y también en una exportación (110/112), donde el total va en monto_exento.
monto_exentoenterosíMonto exento del documento EN PESOS CHILENOS, siempre. 0 cuando no hay. En una exportación (110/112) NO es lo que declara la factura: el total exportado se registra aquí ya convertido, y el monto en su moneda viaja en monto_moneda con la moneda en moneda_documento. Vivía sólo en el DETALLE, así que cuadrar una exenta (34), o el exento de una 33 mixta, desde el listado costaba un GET /dtes/\{id\} por fila, que es el motivo por el que monto_neto e iva ya viajaban aquí.
ivaenterosíIVA del documento EN PESOS CHILENOS. 0 cuando no hay monto afecto (documento exento o exportación).
monto_totalenterosíTotal EN PESOS CHILENOS, siempre. En una exportación es el equivalente al tipo de cambio del día: la cifra que declara la factura está en monto_moneda.
moneda_documentostringnoSólo exportación: glosa del catálogo del SII ("DOLAR USA").
monto_monedanúmeronoSólo exportación: el total EN esa moneda, hasta 4 decimales.
tipo_cambionúmeronullno
tipo_cambio_fuentestringnullno
sii_env"cert" · "prod"síAmbiente al que pertenece ESTE documento: cert (maullin, documento de prueba sin valor tributario) o prod (palena). Es del documento y no de la empresa: una organización ya autorizada en producción sigue teniendo documentos de certificación, y cada ambiente lleva su propia secuencia de folios.
sii_status"queued" · "sending" · "awaiting_sii" · "SOK" · "CRT" · "FOK" · …síVocabulario de dtes.sii_status, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (terminal) y la acción sugerida. La descripción larga de cada uno viaja en el bloque estado de esta misma respuesta: queued: en cola · terminal: no · acción: esperar sending: enviando · terminal: no · acción: esperar signed: firmado, sin subir al SII · terminal: no · acción: esperar awaiting_sii: esperando al SII · terminal: no · acción: esperar · DEPRECADO SOK: schema del envío validado · terminal: no · acción: esperar CRT: carátula del envío validada · terminal: no · acción: esperar FOK: firma del envío validada · terminal: no · acción: esperar PDR: envío en proceso · terminal: no · acción: esperar PRD: envío en proceso · terminal: no · acción: esperar -11: procesando en el SII · terminal: no · acción: esperar EPR: aceptado · terminal: sí · acción: ninguna RPR: aceptado con reparos · terminal: sí · acción: ninguna aceptado_con_reparos: aceptado con reparos · terminal: sí · acción: ninguna · DEPRECADO accepted: aceptado (importado del Respaldo del SII) · terminal: sí · acción: ninguna RFR: rechazo por firma · terminal: sí · acción: contactar_soporte RCT: rechazo por carátula · terminal: sí · acción: contactar_soporte RSC: rechazo por schema · terminal: sí · acción: contactar_soporte RCH: documento rechazado · terminal: sí · acción: reemitir stuck: atascado en SII · terminal: no · acción: reintentar_consulta sin_permiso_sii: sin permiso para consultar en el SII · terminal: no · acción: accion_en_sii Corta cualquier bucle de espera por estado.terminal, NUNCA por sii_status === "EPR": un rechazo (RFR, RCT, RSC y RCH) también es final, y ese bucle no saldría nunca. stuck y sin_permiso_sii no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba POST /dtes/\{id\}/refresh-status.
estadoobjetosíLa clasificación de sii_status, publicada. sii_status NO cambia y NO se reemplaza: el código crudo sigue siendo el contrato y este bloque lo AGREGA. Sirve para decidir sin adivinar: terminal corta los bucles de espera, accion dice qué hacer, y un código que el catálogo no conoce igual cae en una casilla accionable.
estado.codestringsíEl mismo valor que sii_status, repetido aquí para que el bloque se explique solo. NO es un enum cerrado a propósito: el SII no publica una lista cerrada de códigos. Su instructivo termina la tabla con «Otros (no enumerados)», y Notta guarda verbatim lo que responde, así que puede traer uno que el catálogo no conozca (en producción ya aparecieron 106 y 107). Un código desconocido llega clasificado como NO terminal, en_proceso y contactar_soporte, nunca como éxito.
estado.labelstringsíGlosa corta en español, para mostrar. AGREGA información al código, no lo reemplaza.
estado.descripcionstringsíQué pasó y qué significa, en prosa. Está para que no haya que inferir la causa: un -11 es el código con que FALLA la consulta de estado mientras el SII todavía no registra el envío recién subido, no un estado del documento, y es el camino normal.
estado.terminalbooleanosítrue ⇒ el SII ya dio su veredicto y volver a preguntar no puede devolver otra cosa. Es la CONDICIÓN DE CORTE de cualquier bucle de espera: cortar por sii_status === "EPR" deja el bucle vivo para siempre ante un rechazo. stuck y sin_permiso_sii son false a propósito (no hay veredicto), pero tampoco avanzan solos: mira accion.
estado.poll_activobooleanosítrue ⇒ Notta tiene un poll durable consultando al SII por este documento ahora mismo; no hay nada que hacer más que volver a leer. false junto con terminal: false significa que nadie está mirando este documento: ahí accion dice qué lo destraba.
estado.categoria"en_proceso" · "aceptado" · "rechazado" · "requiere_accion" · "archivistico"síCómo terminó, o por qué no terminó: en_proceso: el SII todavía no dio veredicto; aceptado: veredicto favorable: el documento vale; rechazado: veredicto desfavorable: el SII no aceptó el documento; requiere_accion: no hay veredicto y no lo va a haber sin que alguien haga algo; archivistico: el SII ya lo aceptó en su momento; no hay envío que consultar.
estado.accion"esperar" · "reintentar_consulta" · "reemitir" · "contactar_soporte" · "accion_en_sii" · "ninguna"síQué hacer, en un enum ESTABLE pensado para que un agente ramifique sin leer la prosa, el equivalente de next_action en el contrato de errores: esperar: el poll converge solo; vuelve a leer más tarde; reintentar_consulta: POST /dtes/\{id\}/refresh-status destraba el caso; reemitir: el folio quedó quemado; emite uno nuevo corregido (nunca una Nota de Crédito: un documento rechazado no fue aceptado y no hay nada que anular); contactar_soporte: el dueño del problema es Notta; el emisor no puede corregirlo solo; accion_en_sii: el emisor tiene que hacer algo en el portal del SII; ninguna: terminal favorable: no hay nada que hacer.
sii_glosastringnullsí
track_idstringnullsí
sii_last_polledstringnullsí
forma_pago1 · 2 · 3nullsí
fecha_emisionstringsíFchEmis del documento: fecha calendario chilena YYYY-MM-DD. Es la fecha TRIBUTARIA, la que decide el período del IVA, no el instante en que se creó el registro (ese es created_at, y puede caer en otro día).
created_atstringsíInstante ISO-8601 en que Notta registró el documento.
receptor_estado"reclamado" · "aceptado" · "en_plazo" · "aceptado_tacito" · "sin_info"síQué hizo TU CLIENTE con el documento. NO es sii_status: el SII puede haberlo aceptado (EPR) y el receptor reclamarlo igual: son dos máquinas de estado distintas. Se decide en este orden, el mismo que aplica el servidor: (1) reclamado: el receptor lo reclamó ante el SII; es un HECHO registrado y es IRREVERSIBLE: no existe forma de deshacerlo por esta API ni por el portal, y la salida comercial es emitir una nota de crédito. (2) aceptado: el receptor otorgó recibo, o el SII informó que el plazo se cumplió sin reclamo; también es un hecho registrado. (3) en_plazo: todavía corre la ventana, y cierra en el instante que indica plazo_reclamo_cierra. (4) aceptado_tacito: esa ventana ya cerró sin reclamo (Ley 19.983). (5) sin_info: el SII aún no informó fecha_recepcion_sii, así que el plazo no empezó a correr y no se sabe nada del receptor; NO significa que no haya respondido. Los tres últimos se DERIVAN contra el instante del request y cambian solos con el reloj: no los caches.
receptor_reclamado_atstringnullsí
receptor_acuse_atstringnullsí
fecha_recepcion_siistringnullsí
plazo_reclamo_cierrastringnullsí
itemslista de objetosíLíneas del documento, en el orden en que se emitieron.
items[].positionenterosíOrden de la línea dentro del documento (\<NroLinDet>), partiendo en 1.
items[].nombrestringsíNombre del ítem (\<NmbItem>), hasta 80 caracteres.
items[].descripcionstringnullsí
items[].cantidadnúmeronullsí
items[].unidadstringnullsí
items[].descuento_pctnúmeronullsí
items[].codigoslista de objetonullsí
items[].codigos[].tipostringsíTipo del código (\<TpoCodigo>), por ejemplo INT1 o EAN.
items[].codigos[].valorstringsíValor del código (\<VlrCodigo>).
items[].precio_unitarionúmeronullsí
items[].monto_itementerosíTotal de la línea EN PESOS CHILENOS, con su descuento ya aplicado. En una exportación es el equivalente en pesos, no la cifra que imprime la factura.
items[].exentobooleanosítrue si la línea va sin IVA. Un documento afecto (33) puede llevar líneas exentas y afectas a la vez.
status_historylista de objetosíHistoria cronológica de transiciones de estado del documento. Es el mismo rastro que sirve GET /dtes/\{id\}/events, sin la glosa: úsalo para ver por dónde pasó (p. ej. -11 → EPR) sin un request más.
status_history[].status"queued" · "sending" · "awaiting_sii" · "SOK" · "CRT" · "FOK" · …síVocabulario de dtes.sii_status, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (terminal) y la acción sugerida. La descripción larga de cada uno viaja en el bloque estado de esta misma respuesta: queued: en cola · terminal: no · acción: esperar sending: enviando · terminal: no · acción: esperar signed: firmado, sin subir al SII · terminal: no · acción: esperar awaiting_sii: esperando al SII · terminal: no · acción: esperar · DEPRECADO SOK: schema del envío validado · terminal: no · acción: esperar CRT: carátula del envío validada · terminal: no · acción: esperar FOK: firma del envío validada · terminal: no · acción: esperar PDR: envío en proceso · terminal: no · acción: esperar PRD: envío en proceso · terminal: no · acción: esperar -11: procesando en el SII · terminal: no · acción: esperar EPR: aceptado · terminal: sí · acción: ninguna RPR: aceptado con reparos · terminal: sí · acción: ninguna aceptado_con_reparos: aceptado con reparos · terminal: sí · acción: ninguna · DEPRECADO accepted: aceptado (importado del Respaldo del SII) · terminal: sí · acción: ninguna RFR: rechazo por firma · terminal: sí · acción: contactar_soporte RCT: rechazo por carátula · terminal: sí · acción: contactar_soporte RSC: rechazo por schema · terminal: sí · acción: contactar_soporte RCH: documento rechazado · terminal: sí · acción: reemitir stuck: atascado en SII · terminal: no · acción: reintentar_consulta sin_permiso_sii: sin permiso para consultar en el SII · terminal: no · acción: accion_en_sii Corta cualquier bucle de espera por estado.terminal, NUNCA por sii_status === "EPR": un rechazo (RFR, RCT, RSC y RCH) también es final, y ese bucle no saldría nunca. stuck y sin_permiso_sii no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba POST /dtes/\{id\}/refresh-status.
status_history[].atstringsíISO-8601 del momento observado
status_history[].source"local" · "sii"síOrigen: transición local del pipeline o estado reportado por el SII
referenceslista de objetosí\<Referencia> del documento: correctivas (NC/ND) y comerciales (orden de compra…). Un documento sin referencias trae [], nunca null.
references[].line_numenterosí\<NroLinRef> del XML: identidad de la línea dentro del documento. Admite saltos.
references[].tipo_doc_refvalorsíCódigo SII del documento referenciado (correctiva) o el string original (comercial).
references[].folio_refvalorsíFolio del documento referenciado. Número en una referencia correctiva (la NC o ND sobre un DTE) y puede venir como texto en una comercial, donde el identificador es el del documento de origen (una orden de compra, un contrato).
references[].fecha_refstringsí\<FchRef>: fecha del documento REFERENCIADO, no la de éste. Desambigua cuando el mismo (tipo, folio) existe en más de un período: el folio se reinicia por emisor y por ambiente.
references[].cod_refenteronullsí
references[].razon_refstringnullsí
correo_receptorlista de stringnullsí
envio_estado"pendiente" · "enviado" · "sin_correo" · "fallido" · "omitido" · "no_aplica_cert" · …síEstado del CORREO al receptor. NO es el estado ante el SII (ese es sii_status). no_aplica_import = el documento entró por el Respaldo del SII: lo emitió y lo entregó el sistema anterior, así que no hay envío nuestro que hacer y POST /dtes/\{id\}/resend-delivery lo rechaza. no_aplica_cert = en certificación, la única dirección era la casilla de intercambio del padrón, que no recibe documentos de prueba. Ninguno de los dos es un fallo.
envio_message_idstringnullsí
enviado_atstringnullsí
envio_destinatarioslista de stringnullsí
envio_casilla_intercambiostringnullsí
anulado_estado1 · 2nullsí
anulado_atstringnullsí
anulado_motivostringnullsí
linksobjetosíRutas relativas bajo /api/v1 para operar sobre este documento.
links.selfstringsíRuta de este documento: GET /api/v1/dtes/\{id\}.
links.pdfstringsíDescarga directa del PDF (GET /api/v1/dtes/\{id\}/pdf): responde el archivo. Si prefieres una URL firmada de vida corta para pasársela a otro sistema, usa GET /dtes/\{id\}/pdf-url.
links.xmlstringsíDescarga directa del XML firmado. La alternativa con URL firmada es GET /dtes/\{id\}/xml-url.
links.eventsstringsíHistorial de estados: GET /api/v1/dtes/\{id\}/events.
JSON Schema de salida
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "UUID del documento en Notta. Es el identificador que piden `GET /dtes/{id}`, `/pdf-url`, `/xml-url`, `/events` y `/refresh-status`. No es el folio ni el TrackID del SII."
    },
    "folio": {
      "type": "string",
      "description": "Folio que el SII asignó desde el CAF. La numeración corre por (RUT emisor, tipo de documento, ambiente), así que el folio SOLO no identifica un documento: el mismo número existe en otro tipo y en el otro ambiente. Para ubicarlo por folio, filtra también por `tipo_dte`."
    },
    "tipo_dte": {
      "type": "number",
      "enum": [
        33,
        34,
        39,
        41,
        46,
        52,
        56,
        61,
        110,
        112
      ],
      "description": "Código SII del tipo de documento: 33 factura afecta, 34 factura exenta, 46 factura de compra, 52 guía de despacho, 56 nota de débito, 61 nota de crédito, 110/112 exportación."
    },
    "rut_emisor": {
      "type": "string",
      "description": "RUT de la empresa que emitió, en formato `CUERPO-DV` sin puntos (`76123456-0`)."
    },
    "rut_receptor": {
      "type": "string",
      "description": "RUT del receptor del documento, en formato `CUERPO-DV` sin puntos (`76123456-0`)."
    },
    "razon_social_receptor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Razón social del receptor, tal como quedó en el documento emitido. null si el documento no la trae."
    },
    "giro_receptor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Giro del receptor (`<GiroRecep>`). Obligatorio en 33/34 y opcional en 52/56/61: null cuando el documento no lo declaró."
    },
    "direccion_receptor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Dirección del receptor en el documento (`<DirRecep>`). null si no se declaró."
    },
    "comuna_receptor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Comuna del receptor (`<CmnaRecep>`). null si no se declaró."
    },
    "monto_neto": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Monto neto afecto EN PESOS CHILENOS, siempre. 0 en un documento exento, y también en una exportación (110/112), donde el total va en `monto_exento`."
    },
    "monto_exento": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Monto exento del documento EN PESOS CHILENOS, siempre. 0 cuando no hay. En una exportación (110/112) NO es lo que declara la factura: el total exportado se registra aquí ya convertido, y el monto en su moneda viaja en `monto_moneda` con la moneda en `moneda_documento`. Vivía sólo en el DETALLE, así que cuadrar una exenta (34), o el exento de una 33 mixta, desde el listado costaba un `GET /dtes/{id}` por fila, que es el motivo por el que `monto_neto` e `iva` ya viajaban aquí."
    },
    "iva": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "IVA del documento EN PESOS CHILENOS. 0 cuando no hay monto afecto (documento exento o exportación)."
    },
    "monto_total": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Total EN PESOS CHILENOS, siempre. En una exportación es el equivalente al tipo de cambio del día: la cifra que declara la factura está en `monto_moneda`."
    },
    "moneda_documento": {
      "type": "string",
      "description": "Sólo exportación: glosa del catálogo del SII (\"DOLAR USA\")."
    },
    "monto_moneda": {
      "type": "number",
      "description": "Sólo exportación: el total EN esa moneda, hasta 4 decimales."
    },
    "tipo_cambio": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "description": "Sólo exportación: con qué tipo de cambio se obtuvo `monto_total`. Lo resuelve el SERVIDOR el día de la emisión, nunca el `tpo_cambio` que venga en el body."
    },
    "tipo_cambio_fuente": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Sólo exportación: de dónde salió ese tipo de cambio, para poder auditarlo."
    },
    "sii_env": {
      "type": "string",
      "enum": [
        "cert",
        "prod"
      ],
      "description": "Ambiente al que pertenece ESTE documento: `cert` (maullin, documento de prueba sin valor tributario) o `prod` (palena). Es del documento y no de la empresa: una organización ya autorizada en producción sigue teniendo documentos de certificación, y cada ambiente lleva su propia secuencia de folios."
    },
    "sii_status": {
      "type": "string",
      "enum": [
        "queued",
        "sending",
        "awaiting_sii",
        "SOK",
        "CRT",
        "FOK",
        "PDR",
        "PRD",
        "-11",
        "EPR",
        "RPR",
        "aceptado_con_reparos",
        "RFR",
        "RCT",
        "RSC",
        "RCH",
        "stuck",
        "signed",
        "accepted",
        "sin_permiso_sii"
      ],
      "description": "Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."
    },
    "estado": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "El mismo valor que `sii_status`, repetido aquí para que el bloque se explique solo. NO es un enum cerrado a propósito: el SII no publica una lista cerrada de códigos. Su instructivo termina la tabla con «Otros (no enumerados)», y Notta guarda verbatim lo que responde, así que puede traer uno que el catálogo no conozca (en producción ya aparecieron `106` y `107`). Un código desconocido llega clasificado como NO terminal, `en_proceso` y `contactar_soporte`, nunca como éxito."
        },
        "label": {
          "type": "string",
          "description": "Glosa corta en español, para mostrar. AGREGA información al código, no lo reemplaza."
        },
        "descripcion": {
          "type": "string",
          "description": "Qué pasó y qué significa, en prosa. Está para que no haya que inferir la causa: un `-11` es el código con que FALLA la consulta de estado mientras el SII todavía no registra el envío recién subido, no un estado del documento, y es el camino normal."
        },
        "terminal": {
          "type": "boolean",
          "description": "`true` ⇒ el SII ya dio su veredicto y volver a preguntar no puede devolver otra cosa. Es la CONDICIÓN DE CORTE de cualquier bucle de espera: cortar por `sii_status === \"EPR\"` deja el bucle vivo para siempre ante un rechazo. `stuck` y `sin_permiso_sii` son `false` a propósito (no hay veredicto), pero tampoco avanzan solos: mira `accion`."
        },
        "poll_activo": {
          "type": "boolean",
          "description": "`true` ⇒ Notta tiene un poll durable consultando al SII por este documento ahora mismo; no hay nada que hacer más que volver a leer. `false` junto con `terminal: false` significa que nadie está mirando este documento: ahí `accion` dice qué lo destraba."
        },
        "categoria": {
          "type": "string",
          "enum": [
            "en_proceso",
            "aceptado",
            "rechazado",
            "requiere_accion",
            "archivistico"
          ],
          "description": "Cómo terminó, o por qué no terminó: `en_proceso`: el SII todavía no dio veredicto; `aceptado`: veredicto favorable: el documento vale; `rechazado`: veredicto desfavorable: el SII no aceptó el documento; `requiere_accion`: no hay veredicto y no lo va a haber sin que alguien haga algo; `archivistico`: el SII ya lo aceptó en su momento; no hay envío que consultar."
        },
        "accion": {
          "type": "string",
          "enum": [
            "esperar",
            "reintentar_consulta",
            "reemitir",
            "contactar_soporte",
            "accion_en_sii",
            "ninguna"
          ],
          "description": "Qué hacer, en un enum ESTABLE pensado para que un agente ramifique sin leer la prosa, el equivalente de `next_action` en el contrato de errores: `esperar`: el poll converge solo; vuelve a leer más tarde; `reintentar_consulta`: `POST /dtes/{id}/refresh-status` destraba el caso; `reemitir`: el folio quedó quemado; emite uno nuevo corregido (nunca una Nota de Crédito: un documento rechazado no fue aceptado y no hay nada que anular); `contactar_soporte`: el dueño del problema es Notta; el emisor no puede corregirlo solo; `accion_en_sii`: el emisor tiene que hacer algo en el portal del SII; `ninguna`: terminal favorable: no hay nada que hacer."
        }
      },
      "required": [
        "code",
        "label",
        "descripcion",
        "terminal",
        "poll_activo",
        "categoria",
        "accion"
      ],
      "additionalProperties": false,
      "description": "La clasificación de `sii_status`, publicada. `sii_status` NO cambia y NO se reemplaza: el código crudo sigue siendo el contrato y este bloque lo AGREGA. Sirve para decidir sin adivinar: `terminal` corta los bucles de espera, `accion` dice qué hacer, y un código que el catálogo no conoce igual cae en una casilla accionable."
    },
    "sii_glosa": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Glosa con que el SII explica `sii_status`, en sus palabras. null mientras no haya respuesta del Servicio. Es texto para leer, no un código: lo estable es `sii_status`."
    },
    "track_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "TrackID que devolvió el SII al recibir el envío. Sirve para rastrear ESE envío en el portal del Servicio; no identifica el documento en esta API (para eso está `id`). null hasta que el DTE se sube."
    },
    "sii_last_polled": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Última ESCRITURA de estado (no sólo consultas al SII: también las transiciones de la emisión). null si nunca se escribió."
    },
    "forma_pago": {
      "anyOf": [
        {
          "type": "number",
          "enum": [
            1,
            2,
            3
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Forma de pago que se declaró al emitir (`<FmaPago>`): 1 contado, 2 crédito, 3 sin costo. Es el campo que necesitas para volver a emitir un documento a partir de otro, porque `POST /dtes` lo exige en 33/34/46. `null` significa que ESTE documento no la declara, y hay dos motivos: el tipo no la lleva (guía 52, notas 56/61, exportación) o el documento se importó del Respaldo del SII, donde lo emitió otro sistema. `null` NO es contado: no lo colapses a un número ni asumas un default."
    },
    "fecha_emision": {
      "type": "string",
      "description": "`FchEmis` del documento: fecha calendario chilena `YYYY-MM-DD`. Es la fecha TRIBUTARIA, la que decide el período del IVA, no el instante en que se creó el registro (ese es `created_at`, y puede caer en otro día)."
    },
    "created_at": {
      "type": "string",
      "description": "Instante ISO-8601 en que Notta registró el documento."
    },
    "receptor_estado": {
      "type": "string",
      "enum": [
        "reclamado",
        "aceptado",
        "en_plazo",
        "aceptado_tacito",
        "sin_info"
      ],
      "description": "Qué hizo TU CLIENTE con el documento. NO es `sii_status`: el SII puede haberlo aceptado (`EPR`) y el receptor reclamarlo igual: son dos máquinas de estado distintas. Se decide en este orden, el mismo que aplica el servidor: (1) `reclamado`: el receptor lo reclamó ante el SII; es un HECHO registrado y es IRREVERSIBLE: no existe forma de deshacerlo por esta API ni por el portal, y la salida comercial es emitir una nota de crédito. (2) `aceptado`: el receptor otorgó recibo, o el SII informó que el plazo se cumplió sin reclamo; también es un hecho registrado. (3) `en_plazo`: todavía corre la ventana, y cierra en el instante que indica `plazo_reclamo_cierra`. (4) `aceptado_tacito`: esa ventana ya cerró sin reclamo (Ley 19.983). (5) `sin_info`: el SII aún no informó `fecha_recepcion_sii`, así que el plazo no empezó a correr y no se sabe nada del receptor; NO significa que no haya respondido. Los tres últimos se DERIVAN contra el instante del request y cambian solos con el reloj: no los caches."
    },
    "receptor_reclamado_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "`YYYY-MM-DD` del reclamo, tal como lo informa el registro del SII. `null` = no hay reclamo registrado, o el reclamo llegó sólo como código y sin su fecha (mira `receptor_estado`, que es el campo que decide). Un `null` aquí nunca significa por sí solo que el cliente no haya reclamado."
    },
    "receptor_acuse_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "`YYYY-MM-DD` del acuse de recibo del receptor. `null` = no lo otorgó, o llegó sin fecha. Igual que su hermano, no es el campo con el que se decide: ése es `receptor_estado`."
    },
    "fecha_recepcion_sii": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Instante ISO-8601 (con hora) en que el SII recibió el documento y lo dejó a disposición del receptor. Es el ANCLA del plazo de reclamo: `fecha_emision` NO lo ancla, y contar desde ahí ya fechó un vencimiento cuatro días antes de tiempo. `null` = el SII todavía no lo informó (por eso el plazo no corre y `receptor_estado` vale `sin_info`); se puebla solo cuando el registro del SII lo entrega."
    },
    "plazo_reclamo_cierra": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Instante ISO-8601 EXACTO en que el receptor pierde el derecho a reclamar: `fecha_recepcion_sii` + 192 horas (Ley 19.983, Art. 3). Es una HORA, no un día de calendario: el SII cuenta fecha-hora a fecha-hora y a partir de ese instante rechaza el reclamo, así que tratar el día entero como disponible le regala al receptor horas que ya no tiene. `null` cuando no hay ancla (`fecha_recepcion_sii` en `null`): sin fecha de recepción no hay plazo que calcular, y una fecha derivada de `fecha_emision` sería sencillamente errónea. Este plazo corre contra el RECEPTOR; al emisor no le abre ninguna ventana ni le exige ninguna acción."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "position": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Orden de la línea dentro del documento (`<NroLinDet>`), partiendo en 1."
          },
          "nombre": {
            "type": "string",
            "description": "Nombre del ítem (`<NmbItem>`), hasta 80 caracteres."
          },
          "descripcion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Descripción larga del ítem (`<DscItem>`). null si el documento no la trae."
          },
          "cantidad": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cantidad (SII QtyItem). null si el documento NO la declara: el XSD la permite ausente (una NC con CodRef=2, o un documento importado del respaldo del SII). null NO significa cero."
          },
          "unidad": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Unidad de medida (SII UnmdItem); null si no se declaró"
          },
          "descuento_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Descuento por línea (SII DescuentoPct, %); null si no aplica"
          },
          "codigos": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "tipo": {
                      "type": "string",
                      "description": "Tipo del código (`<TpoCodigo>`), por ejemplo `INT1` o `EAN`."
                    },
                    "valor": {
                      "type": "string",
                      "description": "Valor del código (`<VlrCodigo>`)."
                    }
                  },
                  "required": [
                    "tipo",
                    "valor"
                  ],
                  "additionalProperties": false,
                  "description": "Un codigo de producto de esta linea, con su tipo y su valor."
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Códigos de ítem (SII CdgItem: {tipo→TpoCodigo, valor→VlrCodigo}, hasta 5); null si no aplica"
          },
          "precio_unitario": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Precio unitario (SII PrcItem). null si el documento no lo declara; no es cero."
          },
          "monto_item": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "Total de la línea EN PESOS CHILENOS, con su descuento ya aplicado. En una exportación es el equivalente en pesos, no la cifra que imprime la factura."
          },
          "exento": {
            "type": "boolean",
            "description": "`true` si la línea va sin IVA. Un documento afecto (33) puede llevar líneas exentas y afectas a la vez."
          }
        },
        "required": [
          "position",
          "nombre",
          "descripcion",
          "cantidad",
          "unidad",
          "descuento_pct",
          "codigos",
          "precio_unitario",
          "monto_item",
          "exento"
        ],
        "additionalProperties": false,
        "description": "Una linea de detalle del documento."
      },
      "description": "Líneas del documento, en el orden en que se emitieron."
    },
    "status_history": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "sending",
              "awaiting_sii",
              "SOK",
              "CRT",
              "FOK",
              "PDR",
              "PRD",
              "-11",
              "EPR",
              "RPR",
              "aceptado_con_reparos",
              "RFR",
              "RCT",
              "RSC",
              "RCH",
              "stuck",
              "signed",
              "accepted",
              "sin_permiso_sii"
            ],
            "description": "Vocabulario de `dtes.sii_status`, generado del catálogo de estados. Cada valor con su glosa, si tiene VEREDICTO del SII (`terminal`) y la acción sugerida. La descripción larga de cada uno viaja en el bloque `estado` de esta misma respuesta:\n\n`queued`: en cola · terminal: no · acción: `esperar`\n`sending`: enviando · terminal: no · acción: `esperar`\n`signed`: firmado, sin subir al SII · terminal: no · acción: `esperar`\n`awaiting_sii`: esperando al SII · terminal: no · acción: `esperar` · DEPRECADO\n`SOK`: schema del envío validado · terminal: no · acción: `esperar`\n`CRT`: carátula del envío validada · terminal: no · acción: `esperar`\n`FOK`: firma del envío validada · terminal: no · acción: `esperar`\n`PDR`: envío en proceso · terminal: no · acción: `esperar`\n`PRD`: envío en proceso · terminal: no · acción: `esperar`\n`-11`: procesando en el SII · terminal: no · acción: `esperar`\n`EPR`: aceptado · terminal: sí · acción: `ninguna`\n`RPR`: aceptado con reparos · terminal: sí · acción: `ninguna`\n`aceptado_con_reparos`: aceptado con reparos · terminal: sí · acción: `ninguna` · DEPRECADO\n`accepted`: aceptado (importado del Respaldo del SII) · terminal: sí · acción: `ninguna`\n`RFR`: rechazo por firma · terminal: sí · acción: `contactar_soporte`\n`RCT`: rechazo por carátula · terminal: sí · acción: `contactar_soporte`\n`RSC`: rechazo por schema · terminal: sí · acción: `contactar_soporte`\n`RCH`: documento rechazado · terminal: sí · acción: `reemitir`\n`stuck`: atascado en SII · terminal: no · acción: `reintentar_consulta`\n`sin_permiso_sii`: sin permiso para consultar en el SII · terminal: no · acción: `accion_en_sii`\n\nCorta cualquier bucle de espera por `estado.terminal`, NUNCA por `sii_status === \"EPR\"`: un rechazo (`RFR`, `RCT`, `RSC` y `RCH`) también es final, y ese bucle no saldría nunca. `stuck` y `sin_permiso_sii` no son terminales (el SII no llegó a juzgar el documento) pero tampoco avanzan solos: los destraba `POST /dtes/{id}/refresh-status`."
          },
          "at": {
            "type": "string",
            "description": "ISO-8601 del momento observado"
          },
          "source": {
            "type": "string",
            "enum": [
              "local",
              "sii"
            ],
            "description": "Origen: transición local del pipeline o estado reportado por el SII"
          }
        },
        "required": [
          "status",
          "at",
          "source"
        ],
        "additionalProperties": false,
        "description": "Un cambio de estado del documento, con el estado al que paso y cuando."
      },
      "description": "Historia cronológica de transiciones de estado del documento. Es el mismo rastro que sirve `GET /dtes/{id}/events`, sin la glosa: úsalo para ver por dónde pasó (p. ej. `-11 → EPR`) sin un request más."
    },
    "references": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "line_num": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991,
            "description": "`<NroLinRef>` del XML: identidad de la línea dentro del documento. Admite saltos."
          },
          "tipo_doc_ref": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "Código SII del documento referenciado (correctiva) o el string original (comercial)."
          },
          "folio_ref": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "description": "Folio del documento referenciado. Número en una referencia correctiva (la NC o ND sobre un DTE) y puede venir como texto en una comercial, donde el identificador es el del documento de origen (una orden de compra, un contrato)."
          },
          "fecha_ref": {
            "type": "string",
            "description": "`<FchRef>`: fecha del documento REFERENCIADO, no la de éste. Desambigua cuando el mismo (tipo, folio) existe en más de un período: el folio se reinicia por emisor y por ambiente."
          },
          "cod_ref": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "1 anula · 2 corrige texto · 3 corrige montos · null = referencia comercial"
          },
          "razon_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "`<RazonRef>`: texto libre con el motivo de la referencia. null si no se declaró."
          }
        },
        "required": [
          "line_num",
          "tipo_doc_ref",
          "folio_ref",
          "fecha_ref",
          "cod_ref",
          "razon_ref"
        ],
        "additionalProperties": false,
        "description": "Una referencia a otro documento: que documento corrige, anula o cita este."
      },
      "description": "`<Referencia>` del documento: correctivas (NC/ND) y comerciales (orden de compra…). Un documento sin referencias trae `[]`, nunca `null`."
    },
    "correo_receptor": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "description": "Una direccion de correo declarada para el receptor del documento."
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Direcciones del receptor capturadas en la emisión. null/vacío = no se envía."
    },
    "envio_estado": {
      "type": "string",
      "enum": [
        "pendiente",
        "enviado",
        "sin_correo",
        "fallido",
        "omitido",
        "no_aplica_cert",
        "no_aplica_import"
      ],
      "description": "Estado del CORREO al receptor. NO es el estado ante el SII (ese es `sii_status`). `no_aplica_import` = el documento entró por el Respaldo del SII: lo emitió y lo entregó el sistema anterior, así que no hay envío nuestro que hacer y `POST /dtes/{id}/resend-delivery` lo rechaza. `no_aplica_cert` = en certificación, la única dirección era la casilla de intercambio del padrón, que no recibe documentos de prueba. Ninguno de los dos es un fallo."
    },
    "envio_message_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Identificador que devolvió el proveedor de correo al aceptar el envío. Es evidencia de que el correo salió, no de que llegó. null si nunca hubo envío."
    },
    "enviado_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Instante ISO-8601 en que salió el correo al receptor. null si todavía no salió."
    },
    "envio_destinatarios": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "description": "Una direccion de correo a la que se envio el documento."
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Registro del `to:` efectivo del envío. Sólo lectura: no son direcciones reutilizables."
    },
    "envio_casilla_intercambio": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Cuál de los destinatarios la aportó la casilla de intercambio del padrón del SII."
    },
    "anulado_estado": {
      "anyOf": [
        {
          "type": "number",
          "enum": [
            1,
            2
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "1 = anulada antes de enviar al SII · 2 = después · null = guía viva (o no es un 52)."
    },
    "anulado_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Instante en que la guía quedó marcada como anulada. null si no lo está."
    },
    "anulado_motivo": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Motivo que se registró al anular la guía. null si no está anulada."
    },
    "links": {
      "type": "object",
      "properties": {
        "self": {
          "type": "string",
          "description": "Ruta de este documento: `GET /api/v1/dtes/{id}`."
        },
        "pdf": {
          "type": "string",
          "description": "Descarga directa del PDF (`GET /api/v1/dtes/{id}/pdf`): responde el archivo. Si prefieres una URL firmada de vida corta para pasársela a otro sistema, usa `GET /dtes/{id}/pdf-url`."
        },
        "xml": {
          "type": "string",
          "description": "Descarga directa del XML firmado. La alternativa con URL firmada es `GET /dtes/{id}/xml-url`."
        },
        "events": {
          "type": "string",
          "description": "Historial de estados: `GET /api/v1/dtes/{id}/events`."
        }
      },
      "required": [
        "self",
        "pdf",
        "xml",
        "events"
      ],
      "additionalProperties": false,
      "description": "Rutas relativas bajo `/api/v1` para operar sobre este documento."
    }
  },
  "required": [
    "id",
    "folio",
    "tipo_dte",
    "rut_emisor",
    "rut_receptor",
    "razon_social_receptor",
    "giro_receptor",
    "direccion_receptor",
    "comuna_receptor",
    "monto_neto",
    "monto_exento",
    "iva",
    "monto_total",
    "sii_env",
    "sii_status",
    "estado",
    "sii_glosa",
    "track_id",
    "sii_last_polled",
    "forma_pago",
    "fecha_emision",
    "created_at",
    "receptor_estado",
    "receptor_reclamado_at",
    "receptor_acuse_at",
    "fecha_recepcion_sii",
    "plazo_reclamo_cierra",
    "items",
    "status_history",
    "references",
    "correo_receptor",
    "envio_estado",
    "envio_message_id",
    "enviado_at",
    "envio_destinatarios",
    "envio_casilla_intercambio",
    "anulado_estado",
    "anulado_at",
    "anulado_motivo",
    "links"
  ],
  "additionalProperties": false
}

Errores de esta tool

CódigoHTTPReintentableQué hacer
connection_disabled403noReactívala en /connections o usa otra conexión del mismo sistema.
connection_not_found404noUsa uno de los connectionId que lista el error, o revisa la conexión en /connections. No hace falta reactivar nada.
connection_credential_required428noCrea un enlace con conexiones.enlace.crear (modo reconectar si la conexión ya existe) y pide a la persona que entregue la credencial de nuevo. No reintentes con la credencial anterior.
connection_busy409síEspera unos segundos y reintenta. Es una espera transitoria: no necesitas volver a conectar ni ingresar la credencial otra vez.
upstream_error502síReintenta más tarde. Si persiste, el problema está en el sistema externo, no en tu integración.
timeout504síReintenta. Para sincronizaciones largas usa la vía asíncrona y consulta el estado del trabajo.

Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.

En esta página