Emisso Connect

Enlace al PDF de un documento

Devuelve un enlace temporal a la representación impresa (PDF) de un documento emitido. El enlace sirve el archivo sin sesión ni credencial y vence a los 15 minutos, así que se entrega apenas se recibe y no se guarda. Un documento recién emitido todavía no está firmado, y hasta entonces el PDF no existe.

POST
/v1/tools/notta.dte.enlace_pdf/execute
AuthorizationBearer <token>

API key de la organización, en 'Authorization: Bearer connect_sk_…'. Es la credencial para tu backend y tus agentes propios; se crea en el dashboard con permisos explícitos y su valor completo se muestra una sola vez. Autentica como agente: la bitácora atribuye la acción a la clave, nunca a la persona que la creó.

In: header

Header Parameters

X-Connect-Connection*string

Cuál conexión (conn_…) ejecuta esta llamada. Obligatoria en todo sistema conectable y sin resolución implícita, ni siquiera cuando la organización tiene una sola conexión activa: la conexión ES la empresa, y elegir por ti una que hoy acierta mañana acierta distinto sin que nadie cambie nada. Los ids salen de la tool 'conexiones.estado.consultar'. Si falta, la respuesta es 'validation_error' y no se contacta al sistema externo.

Match^conn_

Request Body

application/json

La entrada de la tool, envuelta en 'input'. Manda '{"input": {}}' cuando la tool no toma argumentos: el sobre es obligatorio aunque esté vacío.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/tools/notta.dte.enlace_pdf/execute" \  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \  -H "Content-Type: application/json" \  -d '{    "input": {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"    }  }'
{  "data": {    "url": "string",    "expires_at": "string"  },  "meta": {    "request_id": "string",    "tool_id": "string",    "plane": "action",    "latency_ms": 0,    "audit_status": "recorded",    "idempotency": "replayed"  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}
{  "error": {    "code": "alcance_not_enabled",    "message": "string",    "suggested_fix": "string",    "request_id": "string",    "details": null  }}

Emitir DTE (factura o nota) POST

Emite un DTE ante el SII vía Notta: factura afecta (33), exenta (34), nota de débito (56) o nota de crédito (61, que exige references[] al documento original, y este solo puede ser una factura 33 o 34; su folio_ref va en TEXTO, tal como lo devuelve sii.rcv.consultar). Cada item declara si es exento y su monto_item (cantidad × precio_unitario, ya con el descuento de la línea aplicado); los TOTALES del documento (neto, exento, IVA, total) los calcula Notta. Las NOTAS (56/61) exigen además rut_emisor (el RUT de la empresa de esta conexión, que Notta no deriva en esa ruta) y la nota de débito (56) exige nd_reason; a cambio, no llevan forma_pago ni descuento_global. La emisión es ASÍNCRONA: esta llamada devuelve el documento con folio asignado y estado 'queued'; haz el seguimiento con notta.dte.obtener hasta EPR (aceptado) o un rechazo. Si un intento anterior falló por transporte o timeout, revisa los documentos RECIENTES con notta.dte.listar antes de reintentar, para no duplicar. Con correo_receptor, Notta envía el PDF+XML al receptor cuando el SII acepta. SEGUNDO DESENLACE: sobre el umbral de escritura de la empresa, Notta no emite y abre una aprobación humana que vive 24 horas. En ese caso la respuesta NO es un documento sino {status:'pending', pending_id, approve_url, expires_at, reason}: no trae folio ni id, y nada llegó al SII. Se reconoce SIEMPRE por ese cuerpo; por REST y por el SDK viaja además meta.idempotency='pending', que por MCP no llega. No reintentes para forzarla: con la misma Idempotency-Key te devuelve el mismo pendiente sin volver a emitir. Pasa approve_url a una persona de la empresa y sigue el desenlace con notta.dte.aprobacion, llamándola con id = ese pending_id: devuelve status (pending/approved/rejected/expired), result_ref con el documento que salió de la aprobación y next_action. NO uses notta.dte.listar para esto: lista documentos ya EMITIDOS, y mientras la aprobación viva no hay ninguno que listar; si la rechazan o vence, no lo habrá nunca.

Enlace al XML firmado de un documento POST

Devuelve un enlace temporal al XML firmado que se le envió al SII. El enlace sirve el archivo sin sesión ni credencial y vence a los 15 minutos, así que se entrega apenas se recibe y no se guarda. Un documento recién emitido todavía no está firmado, y hasta entonces el XML no existe.