Notta Docs

API: DTEs

Emisión asíncrona de facturas (33/34) y notas (56/61), lectura de detalle, PDF, XML firmado y re-consulta de estado al SII

El recurso /dtes cubre los documentos que viajan por el pipeline SOAP del SII: Factura Electrónica (33), Factura Exenta (34), Nota de Débito (56) y Nota de Crédito (61). Las boletas (39/41) tienen pipeline REST propio — ver API: Boletas.

Base URL: https://app.notta.cl/api/v1. Autenticación: Authorization: Bearer ntt_cert_… con scope dte:read para lecturas y dte:write para mutaciones — ver Autenticación. Todo POST a este recurso exige además el header X-Cert-Id (UUID que devuelve POST /certificates) y Idempotency-Key.

La emisión es asíncrona: el POST responde 202 con sii_status: "queued" y el upload al SII corre en un workflow. Consulta GET /dtes/:id hasta ver un estado terminal (EPR, RPR, RFR, RCT).

Endpoints

POST /dtes

Emite un DTE: valida el input, asigna folio desde tu CAF, firma con tu certificado y encola el envío al SII.

CampoTipoRequeridoDescripción
tipo_dteint33, 34, 56 o 61. Las boletas 39/41 van por POST /boletas (aquí responden dte.tipo_not_supported).
rut_emisorstringRUT canónico BODY-DV sin puntos, p. ej. 76123456-0. DV validado módulo 11.
receptor.rutstringRUT del receptor, p. ej. 11111111-1.
receptor.razon_socialstringRazón social (se recorta el whitespace; no puede quedar vacía).
receptor.giro · direccion · comunastringcondicionalObligatorios para 33 y 34 (no vacíos): giro, dirección y comuna del receptor. En 56/61/39/41/52 son opcionales.
forma_pagointcondicionalObligatorio para 33 y 34: 1=Contado, 2=Crédito, 3=Sin costo. No se exige en NC (61), ND (56), boletas (39/41) ni guías (52).
fecha_emisionstringYYYY-MM-DD.
items[]array1 a 60 ítems. Cada uno: nombre (string), cantidad (int), precio_unitario (int CLP), exento (boolean), monto_item (int CLP — puede ser negativo en NC).
references[]arraycondicionalObligatorias para 56 y 61; en 33/34 son opcionales y comerciales (orden de compra, contrato, HES). Ver tabla siguiente.
nd_reasonenum56: sícorreccion_monto · reposicion_nc_anulada · interese_moratorio_contractual.
override_cedidabooleannoSolo 61: confirma una NC sobre factura cedida (Corte Suprema 2025).
monto_neto · monto_exento · iva · monto_totalintnoSi los mandas se valida coherencia aritmética contra los ítems; si no, Notta los calcula.
certificate_iduuidnoCertificado de firma; normalmente el mismo UUID que va en X-Cert-Id.
sii_envenumnocert (default) o prod.

Para 56/61, cada elemento de references[] lleva todos estos campos:

CampoTipoDescripción
line_numint 1–40Número de línea de la referencia.
tipo_doc_refintTipo del documento referenciado (NC: solo 33 o 34; ND con reposicion_nc_anulada: 61).
folio_refint positivoFolio del documento referenciado.
fecha_refstringYYYY-MM-DD del documento referenciado.
cod_ref1 | 2 | 31 anula, 2 corrige texto (exige montos en 0), 3 corrige montos.
razon_refstringMotivo (mínimo 1 carácter).

Campos extra de 56 y 61

La Nota de Débito exige nd_reason con combos válidos de cod_ref (el motivo interese_moratorio_legal está bloqueado por el Oficio SII 2011/2020), y la Nota de Crédito aplica el plazo de 6 meses (Ley 21.398) y el bloqueo por factura cedida. El detalle completo está en Nota de Débito 56 y Nota de Crédito 61.

Requisitos de 33 y 34

La factura afecta (33) y la exenta (34) exigen el receptor completo — receptor.giro, receptor.direccion y receptor.comuna no pueden quedar vacíos — y forma_pago (1=Contado, 2=Crédito, 3=Sin costo). Este requisito es condicional al tipo: las notas (56/61), las boletas (39/41) y las guías (52) no lo exigen.

curl -X POST https://app.notta.cl/api/v1/dtes \
  -H "Authorization: Bearer ntt_cert_..." \
  -H "X-Cert-Id: 01977f00-0000-7000-8000-000000000abc" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 33,
    "rut_emisor": "76123456-0",
    "receptor": { "rut": "11111111-1", "razon_social": "Cliente Ejemplo SpA", "giro": "Comercio", "direccion": "Av Siempre Viva 123", "comuna": "Santiago" },
    "forma_pago": 2,
    "fecha_emision": "2026-06-09",
    "items": [
      { "nombre": "Consultoría mayo", "cantidad": 5, "precio_unitario": 50000, "exento": false, "monto_item": 250000 }
    ]
  }'

Respuesta 202 Accepted:

{
  "id": "01977f2a-1b50-7000-8000-000000000001",
  "status": "queued",
  "folio": 1234,
  "tipo_dte": 33,
  "rut_emisor": "76123456-0",
  "rut_receptor": "11111111-1",
  "monto_neto": 250000,
  "monto_exento": 0,
  "iva": 47500,
  "monto_total": 297500,
  "sii_env": "cert",
  "sii_status": "queued",
  "fecha_emision": "2026-06-09",
  "links": {
    "self": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001",
    "pdf": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/pdf",
    "xml": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/xml",
    "events": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/events"
  }
}

links.events apunta a un endpoint aún no habilitado — para seguir el estado usa links.self o refresh-status.

Errores posibles:

CódigoHTTPnext_action
idempotency_key_missing400send_idempotency_key_header
invalid_json400fix_json_body_and_retry
validation_failed (incluye issues[] de Zod)400fix_body_and_retry
cert_id_missing400send_cert_id_header
dte.tipo_not_supported400fix_tipo_dte_and_retry
unauthorized · invalid_api_key · api_key_revoked · api_key_expired401regenerate_api_key
billing.free_tier_exceeded402upgrade_plan
forbidden (scope insuficiente)403use_api_key_with_required_scope
caf_not_found · cert_not_found404
idempotency_conflict (mismo key, body distinto)409
caf_exhausted · caf_expired · cert_expired · emisor_rut_mismatch422
dte.34.invalid_exenta422fix_tipo_dte_and_retry
dte.nota_credito.fuera_plazo422consult_lawyer_or_use_correction_path
nc.over_cedida.blocked422confirm_override_and_retry
dte.nota_debito.interese_moratorio_legal422consult_oficio_2011_2020
dte.nota_debito.invalid_reason422fix_reason_and_retry

GET /dtes

Lista los DTEs de tu organización, los más recientes primero.

Query paramTipoRequeridoDescripción
limitintno1–100, default 20.
sortenumnofolio · monto_total · fecha_emision · sii_status · created_at.
direnumnoasc · desc.
curl "https://app.notta.cl/api/v1/dtes?limit=50&sort=folio&dir=asc" \
  -H "Authorization: Bearer ntt_cert_..."

Respuesta 200 OK (envelope de paginación):

{
  "data": [
    {
      "id": "01977f2a-1b50-7000-8000-000000000001",
      "folio": 1234,
      "tipo_dte": 33,
      "rut_emisor": "76123456-0",
      "rut_receptor": "11111111-1",
      "monto_total": 297500,
      "sii_status": "EPR",
      "fecha_emision": "2026-06-09",
      "created_at": "2026-06-09T14:32:48.000Z",
      "links": { "self": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001" }
    }
  ],
  "next_cursor": null
}

Errores posibles: 401 (auth) y 403 forbidden si el key no tiene dte:read.

GET /dtes/:id

Devuelve el detalle de un DTE, incluyendo sus ítems por línea y el estado SII.

curl https://app.notta.cl/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001 \
  -H "Authorization: Bearer ntt_cert_..."

Respuesta 200 OK:

{
  "id": "01977f2a-1b50-7000-8000-000000000001",
  "folio": 1234,
  "tipo_dte": 33,
  "rut_emisor": "76123456-0",
  "rut_receptor": "11111111-1",
  "razon_social_receptor": "Cliente Ejemplo SpA",
  "monto_neto": 250000,
  "monto_exento": 0,
  "iva": 47500,
  "monto_total": 297500,
  "sii_env": "cert",
  "sii_status": "EPR",
  "sii_glosa": null,
  "track_id": 998877665544,
  "fecha_emision": "2026-06-09",
  "created_at": "2026-06-09T14:32:48.000Z",
  "items": [
    {
      "position": 1,
      "nombre": "Consultoría mayo",
      "descripcion": null,
      "cantidad": 5,
      "precio_unitario": 50000,
      "monto_item": 250000,
      "exento": false
    }
  ],
  "links": {
    "self": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001",
    "pdf": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/pdf",
    "xml": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/xml",
    "events": "/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/events"
  }
}

Errores posibles:

CódigoHTTPnext_action
not_found404

GET /dtes/:id/pdf

Descarga la representación impresa del DTE (formato SII con timbre PDF417), como application/pdf.

curl -o DTE-33-1234.pdf \
  https://app.notta.cl/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/pdf \
  -H "Authorization: Bearer ntt_cert_..."

Errores posibles:

CódigoHTTPnext_action
not_found404
dte.pdf.not_signed (todavía sin firmar; incluye xml_url)409poll_self

GET /dtes/:id/xml

Devuelve el XML firmado del DTE (application/xml), apto para verificación de firma y cesión.

curl https://app.notta.cl/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/xml \
  -H "Authorization: Bearer ntt_cert_..."

Errores posibles:

CódigoHTTPnext_action
not_found404
dte.xml.not_yet_available (workflow de firma en curso)404poll_self

POST /dtes/:id/refresh-status

Fuerza una re-consulta del estado del DTE al SII (útil tras una caída del SII); el poll corre en background y actualiza el documento.

curl -X POST https://app.notta.cl/api/v1/dtes/01977f2a-1b50-7000-8000-000000000001/refresh-status \
  -H "Authorization: Bearer ntt_cert_..." \
  -H "X-Cert-Id: 01977f00-0000-7000-8000-000000000abc" \
  -H "Idempotency-Key: $(uuidgen)"

Respuesta 202 Accepted:

{ "id": "01977f2a-1b50-7000-8000-000000000001", "status": "refresh_enqueued" }

Errores posibles:

CódigoHTTPnext_action
not_found404
dte.refresh_status.no_track_id (aún no subido al SII)409wait_for_emit_workflow
dte.refresh_status.no_cert (la org no tiene certificado activo)409

GET /dtes/muestras

Flujo de certificación SII: arma un ZIP con un PDF por cada DTE firmado (33/34/56/61) de tu org para el lote de Muestras Impresas; ?source=set_pruebas lo acota al set de pruebas.

curl -o muestras.zip "https://app.notta.cl/api/v1/dtes/muestras?source=set_pruebas" \
  -H "Authorization: Bearer ntt_cert_..."

Errores posibles:

CódigoHTTPnext_action
dte.muestras.empty422emit_and_sign_dtes_first

POST /dtes/muestras/send

Flujo de certificación SII: Notta arma y envía el correo de Muestras Impresas a sii_dte_impresos@sii.cl con los PDFs adjuntos.

curl -X POST https://app.notta.cl/api/v1/dtes/muestras/send \
  -H "Authorization: Bearer ntt_cert_..." \
  -H "X-Cert-Id: 01977f00-0000-7000-8000-000000000abc" \
  -H "Idempotency-Key: $(uuidgen)"

Respuesta 200 OK:

{ "data": { "sent": 8, "sentAt": "2026-06-09T15:02:11.000Z" } }

Errores posibles:

CódigoHTTPnext_action
dte.muestras.no_samples422emit_and_sign_dtes_first
dte.muestras.too_large (lote supera 3MB del SII)422paginate_into_multiple_emails
dte.muestras.send_not_configured422contact_support
dte.muestras.send_not_wired501

Próximos pasos

  • Emitir Factura 33 — la guía paso a paso del caso más común, con el mismo payload de esta referencia.
  • API: Boletas — el pipeline REST para boletas 39/41, individual y en batch.
  • Catálogo de errores — todos los códigos con su next_action para manejo programático.
  • Paginación — el envelope { data, next_cursor } y los parámetros de orden.

Última actualización

En esta página