Notta Docs

Referencia de la API

Base URL, autenticación, status codes, convenciones de idempotencia y errores, y el índice completo de endpoints por recurso

La API REST de Notta es la base de los 3 canales programáticos (API, CLI, MCP) + el dashboard: todo lo que ves aquí es lo mismo que ejecutan los otros canales por debajo. Esta página resume el contrato común; cada recurso tiene su página con parámetros, ejemplos y errores endpoint por endpoint.

El spec OpenAPI completo se sirve en /docs/api/openapi.json.

Base URL y autenticación

Todos los endpoints viven bajo https://app.notta.cl/api/v1. La API se autentica con Authorization: Bearer ntt_cert_... (scopes dte:read / dte:write); los POST de emisión llevan además Idempotency-Key, y los de /dtes y /boletas el header X-Cert-Id — ver Autenticación.

curl https://app.notta.cl/api/v1/dtes \
  -H "Authorization: Bearer ntt_cert_..."

Excepción: /certificates y /caf se autentican hoy con la sesión del dashboard (cookie de Supabase Auth), no con API key — el detalle está en sus páginas.

Status codes

HTTPSignificado en Notta
200Lectura o acción síncrona exitosa (detalle, listado, anulación de BHE, borrado).
201Recurso creado de forma síncrona (POST /certificates, POST /caf).
202Emisión aceptada y encolada: el documento sale con sii_status: "queued" y el envío al SII corre asíncrono — haz polling con links.self.
400Request malformado: JSON inválido, falta Idempotency-Key o X-Cert-Id, o validation_failed con issues[] de Zod.
401Credencial ausente, inválida, revocada o expirada (unauthorized, invalid_api_key, api_key_revoked, api_key_expired).
402Cuota mensual del plan agotada (billing.free_tier_exceeded, con usedThisMonth y limit en detail).
403El API key no tiene el scope que la operación requiere (forbidden).
404Recurso inexistente o de otra organización (mismo 404 en ambos casos — no se filtra existencia cross-tenant).
409Conflicto de estado: idempotency_conflict, PDF de un DTE sin firmar, CAF con DTEs aceptados por el SII.
412org.required — los endpoints de sesión exigen una organización creada en el onboarding.
422Regla de negocio o compliance: CAF agotado, certificado vencido, NC fuera de plazo (Ley 21.398), intereses moratorios legales bloqueados (Oficio 2011/2020).
429Rate limit (rate_limit con retryAfterSec) — ver Rate limits.
5xx500 internal_error (nunca expone detalles internos), 502 pipeline o SII con respuesta inválida, 503 SII o dependencia no disponible (reintenta con backoff).

Convenciones

Idempotencia. Todo POST de emisión (/dtes, /boletas, /bhe) exige el header Idempotency-Key (genera un UUID por intento). Reintentar con el mismo key y el mismo body devuelve el documento ya creado; mismo key con body distinto responde 409 idempotency_conflict. Los lotes de boletas usan batch_idempotency_key en el body.

Paginación. Los listados devuelven el envelope { data | boletas | bhes, next_cursor } con limit (máx. 100) y, donde aplica, sort/dir. El cursoring incremental está en habilitación: programa iterando mientras next_cursor no sea null — ver Paginación.

Errores. Shape uniforme { code, message, hint?, next_action?, detail?, request_id }; los fallos de validación agregan issues[] (Zod). El campo next_action es enumerable para que un agente decida sin parsear el message — el catálogo completo está en Errores.

Rate limits. El 429 trae retryAfterSec; usa backoff exponencial con jitter, igual que para 503 del SII — ver Rate limits. Hoy no hay un límite numérico publicado; el contrato 429 ya es estable.

Índice de recursos

DTEs — facturas y notas (pipeline SOAP)

MétodoPathDescripción
POST/dtesEmitir factura 33/34 o nota 56/61 (asíncrono, 202).
GET/dtesListar DTEs con limit/sort/dir.
GET/dtes/:idDetalle con ítems, estado SII y track_id.
GET/dtes/:id/pdfRepresentación impresa (PDF con timbre PDF417).
GET/dtes/:id/xmlXML firmado del DTE.
POST/dtes/:id/refresh-statusRe-consultar el estado al SII (asíncrono, 202).
GET/dtes/muestrasZIP de Muestras Impresas (flujo de certificación SII).
POST/dtes/muestras/sendEnviar las muestras al SII por correo (flujo de certificación SII).

Boletas — boletas 39/41 (pipeline REST)

MétodoPathDescripción
POST/boletasEmitir boleta 39 o 41 (asíncrono, 202).
GET/boletasListar boletas con limit.
GET/boletas/:idDetalle de una boleta.
GET/boletas/:id/xmlXML firmado de la boleta.
POST/boletas/batchIniciar un lote de hasta 1.000 boletas.
GET/boletas/batch/:idEstado del lote con contadores de progreso.

BHE — boletas de honorarios

MétodoPathDescripción
POST/bheEmitir BHE con retención calculada por ley (asíncrono, 202).
GET/bheListar BHE con filtros por período, estado y anulación.
GET/bhe/:idDetalle de una BHE.
POST/bhe/:id/anularAnular dentro del plazo legal de 3 meses.

Certificados — firma digital

MétodoPathDescripción
POST/certificatesSubir un .p12 (multipart); devuelve el id para X-Cert-Id.
GET/certificatesListar certificados vigentes.
DELETE/certificates/:idEliminar (soft delete) un certificado.

Folios (CAF) — rangos autorizados

MétodoPathDescripción
POST/cafSubir un CAF XML (multipart); registra el rango de folios.
GET/cafInventario de CAFs con folios restantes y alerta low_folios.
DELETE/caf/:idEliminar un CAF sin DTEs aceptados por el SII.

Sin documentar aún: /rcof (consumo diario de folios de boletas — RCOF).

Próximos pasos

  • API: DTEs — el recurso central: emite tu primera factura con un curl.
  • Autenticación — API keys, scopes y entornos test/live.
  • Catálogo de errores — todos los códigos con su next_action.
  • Webhooks — el modelo de notificaciones push y su estado actual.
  • Servidor MCP — la misma API, expuesta a tu agente por herramientas tipadas.

Última actualización

En esta página

Base URL y autenticaciónStatus codesConvencionesÍndice de recursosDTEs — facturas y notas (pipeline SOAP)Boletas — boletas 39/41 (pipeline REST)BHE — boletas de honorariosCertificados — firma digitalFolios (CAF) — rangos autorizadosPróximos pasos