---
title: Tu primer DTE
description: De cero a una factura aceptada en maullin, el sandbox del SII, en 10 minutos.
url: https://notta.cl/docs
related:
  - https://notta.cl/docs/emit-factura-33
  - https://notta.cl/docs/produccion
  - https://notta.cl/docs/concepts
  - https://notta.cl/docs/errors
  - https://notta.cl/docs/agentes
---

> Documentación de Notta en markdown. Índice completo: https://notta.cl/llms.txt — corpus entero: https://notta.cl/llms-full.txt

# Tu primer DTE

Notta emite DTEs chilenos (Documentos Tributarios Electrónicos) por los 3 canales
programáticos (API, CLI, MCP) + el dashboard. Esta guía te lleva de cero a una
Factura 33 aceptada en el sandbox del SII.

## Antes de empezar

Necesitas dos cosas: una cuenta y una API key.

1. Crea tu cuenta en [app.notta.cl/signup](https://app.notta.cl/signup).
2. **[Crea tu API key](https://app.notta.cl/app/api-keys#crear)** directo en el dashboard.

#### ¿Dónde encuentro mi API key?

1. Abre **[crear una API key](https://app.notta.cl/app/api-keys#crear)** (te deja con el cursor en el nombre).
2. Ponle un nombre (p. ej. "Integración") y click en **Crear key**.
3. Copia el secreto `ntt_cert_…` — **se muestra una sola vez**; guárdalo en tu gestor de secretos.

Los keys de sandbox/cert empiezan con `ntt_cert_`. Ver [Autenticación](/docs/authentication) para los entornos y scopes.

## 1. Sube tu certificado

Tu certificado digital `.p12` lo emite tu PSC (Acepta, eCertChile, etc). Con él
Notta firma cada DTE en tu nombre. Súbelo en
**[app.notta.cl/app/certificates](https://app.notta.cl/app/certificates)**:
drag-and-drop del `.p12`, password, y listo. El dashboard es el camino para este
paso — el endpoint `POST /api/v1/certificates` hoy autentica con tu sesión del
dashboard, no con API key; el upload programático con Bearer está en camino.

Al subirlo, **anota el id del certificado** que muestra el dashboard (un UUID,
p. ej. `01957a91-0b50-7000-8000-cccc00000001`) — lo vas a usar como header
`X-Cert-Id` al emitir en el paso 3.

El `.p12` se cifra con envelope encryption (DEK por org, KEK en Supabase Vault)
antes de guardarse, y el password nunca se persiste. El detalle está en
[Subir certificado](/docs/onboarding-cert).

## 2. Carga folios (CAF)

El CAF es el archivo XML con el rango de folios que el SII te autoriza por tipo
de DTE. Lo descargas del timbraje electrónico del SII (en maullin para el
entorno cert) y lo subes tal cual, sin editar, en
**[app.notta.cl/app/caf](https://app.notta.cl/app/caf)**. Sin un CAF vigente la
emisión falla con `caf_not_found`.

Igual que el certificado, este paso va por dashboard: el endpoint
`POST /api/v1/caf` hoy autentica con tu sesión del dashboard, no con API key —
el upload programático con Bearer está en camino. Una vez subido vas a ver el
rango autorizado (`folio_desde`/`folio_hasta`) y los folios restantes.

Qué es un CAF por dentro y cómo se administra:
[Conceptos → CAF](/docs/concepts#caf--folios).

## 3. Emite tu primera factura

Tipo 33 es la Factura Electrónica afecta a IVA, el caso más común. Elige tu canal:

#### curl

```bash
curl -X POST https://app.notta.cl/api/v1/dtes \
  -H "Authorization: Bearer ntt_cert_..." \
  -H "X-Cert-Id: 01957a91-0b50-7000-8000-cccc00000001" \
  -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
      }
    ],
    "sii_env": "cert"
  }'
```

El `X-Cert-Id` es el id del certificado que anotaste en el paso 1 — sin él, el
endpoint responde `400 cert_id_missing`.

Salida esperada (`202 Accepted`):

```json
{
  "id": "01957a91-0b50-7000-8000-000000000001",
  "status": "queued",
  "folio": 1,
  "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/01957a91-0b50-7000-8000-000000000001",
    "pdf": "/api/v1/dtes/01957a91-0b50-7000-8000-000000000001/pdf",
    "xml": "/api/v1/dtes/01957a91-0b50-7000-8000-000000000001/xml",
    "events": "/api/v1/dtes/01957a91-0b50-7000-8000-000000000001/events"
  }
}
```

#### CLI

```bash
notta dte emit \
  --tipo 33 \
  --to 11111111-1 \
  --name "Cliente Ejemplo SpA" \
  --item "Consultoría mayo:5:50000" \
  --env cert
```

Salida esperada (tabla; con `--format json` devuelve el mismo shape que la API):

```text
 folio │ tipo_dte │ sii_status │ monto_total │ track_id
───────┼──────────┼────────────┼─────────────┼──────────
 1     │ 33       │ queued     │ 297500      │
```

#### MCP

Configura el server MCP de Notta en tu agente (Claude Desktop, Cursor) — la
config completa está en [MCP](/docs/mcp) — y pídele la emisión en lenguaje
natural:

```text
Emite una Factura 33 en el entorno cert de Notta: receptor 11111111-1
(Cliente Ejemplo SpA), 5 unidades de "Consultoría mayo" a $50.000 netos
cada una. Confírmame folio y monto_total.
```

El agente invoca la tool `notta_dte_emit` y te devuelve folio, montos y links
del documento.

> **Disponibilidad:**
Los packages `@notta/cli` y `@notta/mcp` están en proceso de publicación en npm.
Mientras tanto, el tab de curl funciona hoy con tu API key — el dashboard y la
API cubren el flujo completo.

**Criterio de éxito**: consulta `GET /api/v1/dtes/{id}` hasta que `sii_status`
sea `EPR` (procesado por el SII) y abre el PDF en `links.pdf`. Con eso cerraste
el loop completo: certificado → folios → emisión → documento aceptado.

## ¿Eres un agente? Copia este prompt

Para delegar el setup completo a un agente LLM, pásale esto tal cual:

```text
Configura Notta para mí:
1. Lee https://notta.cl/llms.txt para entender la API.
2. Pídeme una API key ntt_cert_ de https://app.notta.cl/app/api-keys#crear.
3. Pídeme que confirme en el dashboard que hay un certificado .p12 y un CAF
   tipo 33 cargados (https://app.notta.cl/app/certificates y
   https://app.notta.cl/app/caf), y que te pase el id del certificado — lo vas
   a mandar como header X-Cert-Id. (No intentes GET /certificates ni /caf con
   la API key: hoy esos endpoints autentican con sesión del dashboard.)
4. Emite una Factura 33 de prueba con POST https://app.notta.cl/api/v1/dtes
   (sii_env "cert", headers Idempotency-Key único por intento y X-Cert-Id con
   el id del certificado).
5. Consulta GET https://app.notta.cl/api/v1/dtes/{id} hasta que sii_status sea
   "EPR" y entrégame la URL del PDF (links.pdf).
```

## ¿Prefieres CLI?

Cuando `@notta/cli` esté publicado en npm, lo instalas y autenticas así:

#### npm

```bash
npm install -g @notta/cli
```

#### pnpm

```bash
pnpm add -g @notta/cli
```

#### yarn

```bash
yarn global add @notta/cli
```

#### bun

```bash
bun add -g @notta/cli
```

```bash
notta auth login
# Paste your API key: ntt_cert_...
```

El key queda guardado en `~/.config/notta/credentials` (chmod 600). Los
comandos completos están en [CLI Reference](/docs/cli-reference).

## Próximos pasos

- **[Emitir Factura 33](/docs/emit-factura-33)** — la guía completa del tipo 33: campos, montos, referencias comerciales y errores típicos.
- [Producción](/docs/produccion) — postulación, certificación SII y el switch a palena para emitir con valor tributario.
- [Conceptos](/docs/concepts) — DTE, CAF, certificado y entornos del SII en una página.
- [Errores](/docs/errors) — catálogo completo con `next_action` por código.
- [Agentes](/docs/agentes) — llms.txt, manifiesto MCP y patrones para integrar tu agente.
