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 ID | notta.dte.obtener |
| Nombre MCP | notta__dte__obtener |
| Conector | notta |
| Plano | action |
| Scope (permiso) | notta:read |
| Auth | connection_credentials |
| Versión | 1 |
| Sensible | sí |
| Deprecado | no |
| Comportamiento | readOnly=true, destructive=false, idempotent=true, openWorld=true |
Requiere conexión. Indica cuál en cada llamada: header
X-Connect-Connectionen REST, campoconnectionIden elexecutede MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale deconexiones.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
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string `^([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)$` |
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": "Identificador del documento dentro de Notta, un UUID. Es el que reciben las demas tools de este sistema para pedir el detalle, el PDF, el XML o los eventos."
}
},
"required": [
"id"
]
}Salida
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string `^([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)$` |
folio | string | sí | Folio del documento: el correlativo que sale de los folios autorizados (CAF) y con el que el SII lo identifica. Viaja en TEXTO aunque Notta lo mande como numero, porque es un identificador y no una cantidad. |
tipo_dte | 33 · 34 · 39 · 41 · 46 · 52 · … | sí | Codigo del tipo de documento en el catalogo del SII: 33 factura afecta, 34 factura exenta, 39 boleta, 41 boleta exenta, 46 factura de compra, 52 guia de despacho, 56 nota de debito, 61 nota de credito, 110 factura de exportacion y 112 nota de credito de exportacion. |
rut_emisor | string | sí | RUT de la empresa que emite el documento, sin puntos y con guion antes del digito verificador. |
rut_receptor | string | sí | RUT de quien recibe el documento, sin puntos y con guion antes del digito verificador. |
razon_social_receptor | string | null | sí |
giro_receptor | string | null | sí |
direccion_receptor | string | null | sí |
comuna_receptor | string | null | sí |
monto_neto | entero | sí | Monto afecto a IVA del documento, en pesos chilenos y sin decimales. |
monto_exento | entero | sí | 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 | entero | sí | Impuesto al valor agregado del documento, en pesos chilenos y sin decimales. |
monto_total | entero | sí | 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 | string | no | Sólo exportación: glosa del catálogo del SII ("DOLAR USA"). |
monto_moneda | número | no | Sólo exportación: el total EN esa moneda, hasta 4 decimales. |
tipo_cambio | número | null | no |
tipo_cambio_fuente | string | null | no |
sii_env | "cert" · "prod" | sí | Ambiente del SII contra el que se emitio el documento: 'cert' es certificacion (pruebas, sin valor tributario) y 'prod' es produccion. |
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. |
estado | objeto | sí | 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.code | string | sí | 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.label | string | sí | Glosa corta en español, para mostrar. AGREGA información al código, no lo reemplaza. |
estado.descripcion | string | sí | 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.terminal | booleano | sí | 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_activo | booleano | sí | 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_glosa | string | null | sí |
track_id | string | null | sí |
sii_last_polled | string | null | sí |
fecha_emision | string | sí | Fecha de emision del documento, en formato AAAA-MM-DD. |
created_at | string | sí | Momento en que Notta registro la fila, en formato ISO 8601. |
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_at | string | null | sí |
receptor_acuse_at | string | null | sí |
fecha_recepcion_sii | string | null | sí |
plazo_reclamo_cierra | string | null | sí |
items | lista de objeto | sí | Las lineas de detalle del documento. |
items[].position | entero | sí | Posicion de esta linea dentro del documento. |
items[].nombre | string | sí | Que se cobro en esta linea, tal como salio impreso. |
items[].descripcion | string | null | sí |
items[].cantidad | número | null | sí |
items[].unidad | string | null | sí |
items[].descuento_pct | número | null | sí |
items[].codigos | lista de objeto | null | sí |
items[].codigos[].tipo | string | sí | Que clase de codigo es, con el vocabulario del SII: por ejemplo 'INT1' para un codigo interno o 'EAN' para uno de barras. |
items[].codigos[].valor | string | sí | El codigo en si, tal como lo declaro quien emitio. |
items[].precio_unitario | número | null | sí |
items[].monto_item | entero | sí | Monto de esta linea del documento, en pesos chilenos. |
items[].exento | booleano | sí | true si la linea esta exenta de IVA y false si es afecta. |
status_history | lista de objeto | sí | 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[].at | string | sí | ISO-8601 del momento observado |
status_history[].source | "local" · "sii" | sí | Origen: transición local del pipeline o estado reportado por el SII |
references | lista de objeto | sí | \<Referencia> del documento: correctivas (NC/ND) y comerciales (orden de compra…). Un documento sin referencias trae [], nunca null. |
references[].line_num | entero | sí | \<NroLinRef> del XML: identidad de la línea dentro del documento. Admite saltos. |
references[].tipo_doc_ref | valor | sí | Código SII del documento referenciado (correctiva) o el string original (comercial). |
references[].folio_ref | valor | sí | Folio del documento referenciado. Puede venir como numero o como texto: una referencia comercial admite folios alfanumericos de verdad, como una orden de compra 'OC-4471'. |
references[].fecha_ref | string | sí | \<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_ref | entero | null | sí |
references[].razon_ref | string | null | sí |
correo_receptor | lista de string | null | sí |
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_id | string | null | sí |
enviado_at | string | null | sí |
envio_destinatarios | lista de string | null | sí |
envio_casilla_intercambio | string | null | sí |
anulado_estado | 1 · 2 | null | sí |
anulado_at | string | null | sí |
anulado_motivo | string | null | sí |
links | objeto | sí | Enlaces a los demas recursos de este documento. |
links.self | string | sí | URL del detalle de este documento en la API de Notta. |
links.pdf | string | sí | URL para pedir el enlace de descarga del PDF del documento. |
links.xml | string | sí | URL para pedir el enlace de descarga del XML firmado del documento. |
links.events | string | sí | URL del historial de eventos de este documento. |
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": "Identificador del documento dentro de Notta, un UUID. Es el que reciben las demas tools de este sistema para pedir el detalle, el PDF, el XML o los eventos."
},
"folio": {
"type": "string",
"description": "Folio del documento: el correlativo que sale de los folios autorizados (CAF) y con el que el SII lo identifica. Viaja en TEXTO aunque Notta lo mande como numero, porque es un identificador y no una cantidad."
},
"tipo_dte": {
"type": "number",
"enum": [
33,
34,
39,
41,
46,
52,
56,
61,
110,
112
],
"description": "Codigo del tipo de documento en el catalogo del SII: 33 factura afecta, 34 factura exenta, 39 boleta, 41 boleta exenta, 46 factura de compra, 52 guia de despacho, 56 nota de debito, 61 nota de credito, 110 factura de exportacion y 112 nota de credito de exportacion."
},
"rut_emisor": {
"type": "string",
"description": "RUT de la empresa que emite el documento, sin puntos y con guion antes del digito verificador."
},
"rut_receptor": {
"type": "string",
"description": "RUT de quien recibe el documento, sin puntos y con guion antes del digito verificador."
},
"razon_social_receptor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Nombre legal de quien recibe el documento, tal como salio impreso."
},
"giro_receptor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Giro o actividad economica de quien recibe el documento."
},
"direccion_receptor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Direccion de quien recibe el documento."
},
"comuna_receptor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Comuna de quien recibe el documento."
},
"monto_neto": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Monto afecto a IVA del documento, en pesos chilenos y sin decimales."
},
"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": "Impuesto al valor agregado del documento, en pesos chilenos y sin decimales."
},
"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 del SII contra el que se emitio el documento: 'cert' es certificacion (pruebas, sin valor tributario) y 'prod' es produccion."
},
"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": "Texto con el que el SII explica el estado del documento. Es la glosa cruda del SII, util para mostrarle a una persona por que un documento fue rechazado."
},
"track_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "TrackID del envio al SII: el identificador con el que el SII sigue ese envio. Viaja en TEXTO aunque Notta lo mande como numero, porque es un identificador y no una cantidad. Es null hasta que el documento se sube al SII."
},
"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ó."
},
"fecha_emision": {
"type": "string",
"description": "Fecha de emision del documento, en formato AAAA-MM-DD."
},
"created_at": {
"type": "string",
"description": "Momento en que Notta registro la fila, en formato ISO 8601."
},
"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": "Posicion de esta linea dentro del documento."
},
"nombre": {
"type": "string",
"description": "Que se cobro en esta linea, tal como salio impreso."
},
"descripcion": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Detalle adicional de la linea, debajo del nombre."
},
"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": "Que clase de codigo es, con el vocabulario del SII: por ejemplo 'INT1' para un codigo interno o 'EAN' para uno de barras."
},
"valor": {
"type": "string",
"description": "El codigo en si, tal como lo declaro quien emitio."
}
},
"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": "Monto de esta linea del documento, en pesos chilenos."
},
"exento": {
"type": "boolean",
"description": "true si la linea esta exenta de IVA y false si es afecta."
}
},
"required": [
"position",
"nombre",
"descripcion",
"cantidad",
"unidad",
"descuento_pct",
"codigos",
"precio_unitario",
"monto_item",
"exento"
],
"additionalProperties": false,
"description": "Una linea de detalle del documento."
},
"description": "Las lineas de detalle del documento."
},
"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. Puede venir como numero o como texto: una referencia comercial admite folios alfanumericos de verdad, como una orden de compra 'OC-4471'."
},
"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": "Por que se emite esta referencia sobre el documento referenciado, en texto libre."
}
},
"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 del correo con el que Notta envio el documento. Sirve para rastrearlo con el proveedor de correo."
},
"enviado_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Momento en que el documento se envio por correo, en formato ISO 8601. Es null si todavia no se envio."
},
"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": "Momento en que el documento se anulo, en formato ISO 8601. Es null si sigue vigente."
},
"anulado_motivo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Por que se anulo el documento, en texto libre."
},
"links": {
"type": "object",
"properties": {
"self": {
"type": "string",
"description": "URL del detalle de este documento en la API de Notta."
},
"pdf": {
"type": "string",
"description": "URL para pedir el enlace de descarga del PDF del documento."
},
"xml": {
"type": "string",
"description": "URL para pedir el enlace de descarga del XML firmado del documento."
},
"events": {
"type": "string",
"description": "URL del historial de eventos de este documento."
}
},
"required": [
"self",
"pdf",
"xml",
"events"
],
"additionalProperties": false,
"description": "Enlaces a los demas recursos de 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",
"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ódigo | HTTP | Reintentable | Qué hacer |
|---|---|---|---|
connection_disabled | 403 | no | Reactívala en /connections o usa otra conexión del mismo sistema. |
connection_credential_required | 428 | no | Crea 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_busy | 409 | sí | Espera unos segundos y reintenta. Es una espera transitoria: no necesitas volver a conectar ni ingresar la credencial otra vez. |
upstream_error | 502 | sí | Reintenta más tarde. Si persiste, el problema está en el sistema externo, no en tu integración. |
timeout | 504 | sí | 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.
Listar los documentos emitidos
Lista los documentos que esta empresa emitió a través de Notta, con filtros por tipo de documento, folio, RUT del receptor, rango de fechas de emisión, estado en el SII y estado del receptor, y paginación por cursor.
Reenviar un documento por correo
Reenvía el PDF y el XML de un documento ya emitido a la dirección que el receptor tiene registrada en Notta.