# Notta

> Emite facturas y notas ante el SII desde tus agentes. Autorizas una vez en Notta con tu propia cuenta: no hay ninguna API key que crear ni pegar.



`notta` emite documentos tributarios electrónicos ante el SII: facturas afectas y exentas, y notas de débito y de crédito. Es el primer conector que **escribe en un sistema externo**, así que su tool de emisión es la primera del catálogo marcada como destructiva y la primera que pasa por el control de idempotencia.

Notta es producto de Emisso, y eso cambia el alta: en vez de pedirte una clave que tendrías que ir a buscar a otro portal, te llevamos a Notta para que autorices con tu propia cuenta y te traemos de vuelta. Connect nunca ve ni guarda tu clave.

## Qué necesitas para conectar [#qué-necesitas-para-conectar]

**Antes de empezar, necesitas una cuenta en Notta con esta empresa ya creada, y tu usuario tiene que tener permiso sobre ella.** Si todavía no la tienes, créala primero en [app.notta.cl](https://app.notta.cl) y vuelve. Connect no crea la empresa por ti: la autorización que vas a dar es sobre una empresa que ya existe del otro lado.

El formulario pide **un solo dato, y no es un secreto**:

| Campo             | Qué es                                                                               |
| ----------------- | ------------------------------------------------------------------------------------ |
| RUT de la empresa | La empresa que va a emitir. Es contra este RUT que se compara lo que Notta autoriza. |

Al continuar, el navegador sale a Notta para que apruebes el acceso y vuelve a Connect con la autorización hecha. **Ninguna clave pasa por Connect.** Lo que se guarda es un permiso que Notta emite, cifrado y que nadie ve nunca, ni tú ni el agente, y que puedes revocar del otro lado cuando quieras.

Si la empresa que autorizas no es la del RUT que escribiste, la conexión se rechaza en vez de quedar apuntando a otra: es la misma empresa o no es. La comprobación corre apenas vuelves del consentimiento, así que el permiso se anula de este lado y te lo decimos ahí mismo, no en la primera factura.

## Qué puede hacer hoy una conexión autorizada así [#qué-puede-hacer-hoy-una-conexión-autorizada-así]

**Todo el catálogo, la emisión incluida.** Una conexión creada con el permiso de tu cuenta lista, obtiene, totaliza, sigue eventos, pide los enlaces al PDF y al XML, mira las aprobaciones pendientes, lista los folios (CAF), reenvía un documento por correo y **emite**.

**Emitir y reenviar exigen el permiso de escritura (`dte:write`), y el consentimiento lo pide por su cuenta.** Una autorización ya entregada no gana permisos nuevos: renovarla conserva exactamente los que aceptaste la primera vez. Si conectaste Notta antes de que Connect empezara a pedir `dte:write`, la conexión lee pero no emite, y hoy el único camino es **eliminar la conexión y crearla de nuevo**: no hay un botón de volver a autorizar sobre una conexión que ya existe.

**Sobre el umbral de escritura que fije tu empresa en Notta, emitir no emite: abre una aprobación.** Es el segundo desenlace de `notta.dte.emitir`, y **no trae folio ni `id` porque nada llegó al SII**. El cuerpo son cinco campos:

```json
{
  "status": "pending",
  "pending_id": "8f14e45f-ceea-467a-9f0e-ecf3b1a1f9c2",
  "approve_url": "https://app.notta.cl/aprobaciones/8f14e45f",
  "expires_at": "2026-09-03T14:20:00Z",
  "reason": "monto sobre el umbral de la empresa"
}
```

Pásale `approve_url` a una persona de la empresa y sigue en qué queda con `notta.dte.aprobacion`, usando el `pending_id` como `id`. `notta.dte.listar` no sirve para esto: lista documentos ya emitidos, y mientras la aprobación viva no hay ninguno; si la rechazan o vence, no lo habrá nunca.

## Antes de la primera factura [#antes-de-la-primera-factura]

Emitir ante el SII exige dos cosas que solo puede conseguir una persona: el **certificado digital** de la empresa y los **folios** (CAF) del tipo de documento. Los dos se cargan en Notta, no en Connect.

Los folios sí puedes verlos desde aquí: `notta.folios.listar` te dice qué rangos tienes cargados por tipo de documento, cuál es el próximo por usar, cuántos quedan y hasta cuándo son válidos. Devuelve **una fila por rango, no una por tipo**: un mismo tipo de documento aparece varias veces si tiene varios rangos cargados, así que lo que le queda a ese tipo es la suma de sus filas. Y la lista viene **recortada a un solo ambiente del SII** (certificación o producción, en `sii_env`), el que decida la credencial con la que autorizaste: certificación y producción son secuencias de folios independientes, y ésta no las mezcla. El certificado se revisa en Notta. No es un error de tu integración: es el trámite que todavía no termina.

## Las tools [#las-tools]

| Tool                       | Qué hace                                                                                        |
| -------------------------- | ----------------------------------------------------------------------------------------------- |
| `notta.dte.emitir`         | Emite una factura o nota. Devuelve el folio asignado, salvo que quede esperando una aprobación. |
| `notta.dte.obtener`        | El detalle de un documento, incluido el veredicto del SII.                                      |
| `notta.dte.listar`         | Los documentos emitidos, con filtros y paginación por cursor.                                   |
| `notta.dte.totales`        | Los totales de un mes, por tipo de documento y estado en el SII.                                |
| `notta.dte.eventos`        | La línea de tiempo de un documento: cada cambio de estado y su motivo.                          |
| `notta.dte.enlace_pdf`     | Un enlace temporal al PDF del documento.                                                        |
| `notta.dte.enlace_xml`     | Un enlace temporal al XML firmado que se envió al SII.                                          |
| `notta.dte.aprobacion`     | En qué quedó una aprobación pendiente que dejó una emisión.                                     |
| `notta.folios.listar`      | Los rangos de folios (CAF) cargados, con cuántos quedan.                                        |
| `notta.dte.reenviar`       | Reenvía el documento por correo al receptor.                                                    |
| `notta.conexion.verificar` | Prueba la credencial sin emitir nada.                                                           |

## Emitir [#emitir]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/notta.dte.emitir/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Idempotency-Key: 7f3c1b90-2d4e-4a11-9c6f-5b8e0a2d13c7" \
  -H "Content-Type: application/json" \
  -d '{"input":{"tipo_dte":33,"fecha_emision":"2026-09-30","forma_pago":1,"receptor":{"rut":"76900600-1","razon_social":"Comercial Andes Ltda.","giro":"Comercio al por mayor","direccion":"Av. Apoquindo 3000","comuna":"Las Condes"},"items":[{"nombre":"Asesoría de septiembre","cantidad":1,"precio_unitario":450000,"exento":false,"monto_item":450000}]}}'
```

Respuesta (recortada):

```json
{
  "data": {
    "id": "dte_8sKq2mR4",
    "folio": "267",
    "tipo_dte": 33,
    "estado": "queued",
    "montos": { "neto": 450000, "exento": 0, "iva": 85500, "total": 535500 }
  },
  "meta": { "request_id": "req_...", "tool_id": "notta.dte.emitir", "plane": "action" }
}
```

Ésta es la respuesta del desenlace directo, el de arriba. El folio ya está asignado y es tuyo: no se reutiliza. Lo que sigue (firmar, armar el sobre, subirlo al SII y esperar el veredicto) ocurre después, y por eso el estado dice `queued`. Para saber cómo terminó, consulta el documento.

## Emitir dos veces por accidente [#emitir-dos-veces-por-accidente]

Una factura duplicada no se deshace: se corrige con una nota de crédito, que es otro documento con otro folio. Por eso `emitir` es la única tool del catálogo que trata la repetición como parte del contrato.

Manda tu propia `Idempotency-Key` en el header y conserva tanto esa clave como la conexión en todos los reintentos. Si repites la llamada con la misma clave, conexión y contenido, Connect devuelve la respuesta guardada sin volver a tocar Notta. Si reutilizas la clave en otra conexión o con un contenido distinto, responde `idempotency_conflict`: esa clave ya nombra otra operación. Y si el primer intento sigue en curso, responde `idempotency_in_progress`, que se reintenta a los segundos, nunca con una clave nueva.

Si el error indica que un registro histórico no permite confirmar su conexión, conserva la clave y revisa el documento con soporte antes de continuar. Crear otra clave o volver a emitir puede duplicar un documento que ya existe.

El SDK no reintenta esta llamada por su cuenta, y es deliberado.

## Consultar el resultado [#consultar-el-resultado]

```bash
curl -X POST https://connect.emisso.ai/api/v1/tools/notta.dte.obtener/execute \
  -H "Authorization: Bearer connect_sk_..." \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"id":"dte_8sKq2mR4"}}'
```

Respuesta (recortada):

```json
{
  "data": {
    "id": "dte_8sKq2mR4",
    "folio": "267",
    "tipo_dte": 33,
    "estado": "aceptado",
    "track_id": "1284455901",
    "sii_glosa": "Envio Aceptado"
  },
  "meta": { "request_id": "req_...", "tool_id": "notta.dte.obtener", "plane": "action" }
}
```

El SII se toma su tiempo en responder, así que un documento recién emitido puede seguir en camino por varios minutos.

## Verdades operativas [#verdades-operativas]

**El ambiente lo decide la cuenta de Notta, no la llamada.** Contra qué ambiente del SII se emite (certificación o producción) es una propiedad de la empresa en Notta, no de la petición. El request no puede forzarlo.

**El plan de Notta es de Notta.** La cuota mensual de documentos es la de tu cuenta allá, y el plan se cambia en Notta, no en Connect. Si se agota, la emisión responde `connector_plan_limit` y el upgrade se hace allá, no aquí.

**Para que la factura llegue, hay dos caminos.** `enlace_pdf` y `enlace_xml` te devuelven un enlace temporal a cada archivo, que sirve sin credencial y vence a los 15 minutos, para que hagas lo tuyo con ellos. Si lo que quieres es que le lleguen al receptor, usa `reenviar`, o incluye su correo al emitir: Notta se lo manda cuando el SII acepta.

**No hay caché que consultar.** A diferencia del SII y los bancos, este conector no sincroniza nada al plano persistido: cada consulta pregunta en vivo, porque los documentos viven en Notta. Por eso ninguna de sus tools se llama `consultar`, que en el resto del catálogo significa «lee lo ya sincronizado»: la que trae el detalle de un documento es `notta.dte.obtener`.
