Connect

Anular una factura

Anula una factura afecta 33 emitida con el Facturador Gratuito del SII emitiendo su nota de crédito 61 de anulación, por REST, MCP o SDK. El SII arma la nota completa.

Anular una factura es emitir su nota de crédito 61 de anulación. En el Facturador Gratuito esa nota no se llena a mano: el SII la construye entera a partir de la factura original, con sus mismas líneas, neto, IVA y total, y con la referencia que la anula. Por eso tu integración solo indica cuál factura: tipo, folio y fecha de emisión. Connect no propone líneas ni montos.

Los requisitos son los mismos de la emisión, con el mismo permiso sii:write, y el flujo también son dos llamadas: sii.anulacion.previsualizar y sii.anulacion.emitir.

Anular no tiene vuelta atrás

En el SII firmar es emitir: la nota se envía en el mismo acto y la factura queda anulada. Revisa la preparación antes de emitir.

Qué facturas se pueden anular

  • Facturas afectas 33. La anulación de una factura exenta 34 todavía no está incluida.
  • Emitidas con el Facturador Gratuito del SII, desde Connect o desde sii.cl. Connect ubica la factura en la lista de documentos emitidos del portal; una factura emitida con otro sistema no está en esa lista y la preparación responde sii_anulacion_documento_no_encontrado.
  • Completas. La nota anula la factura entera. Para corregir solo parte de los montos de una factura 33 todavía no hay tool.

1. Prepara la anulación

curl -X POST https://connect.emisso.ai/api/v1/tools/sii.anulacion.previsualizar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input": {"documento": {"tipoDte": "33", "folio": "1042", "fechaEmision": "2026-09-15"}}}'

Salida esperada (200, campo data):

{
  "anulacion": {
    "tipoDte": "61",
    "operacion": "anula",
    "referencia": { "tipoDte": "33", "folio": "1042", "fechaEmision": "2026-09-15" },
    "totales": { "neto": 548000, "iva": 104120, "total": 652120 }
  },
  "previewRef": "<referencia opaca>",
  "expiraEn": "2026-09-15T14:20:00.000Z",
  "advertencias": []
}

referencia y totales los escribió el SII. Comprueba que correspondan a la factura que quieres anular antes de emitir. Como en la emisión, el previewRef vence en 15 minutos y lo emite el mismo actor que lo preparó.

Si preparas la anulación en los segundos siguientes a emitir la factura, el portal puede todavía no ofrecerla. Espera alrededor de un minuto y vuelve a preparar.

2. Emite la nota de anulación

curl -X POST https://connect.emisso.ai/api/v1/tools/sii.anulacion.emitir/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Idempotency-Key: 8b1e4f7a-2c9d-4e36-a5b0-6d3f9c1e7a24" \
  -H "Content-Type: application/json" \
  -d '{"input": {"previewRef": "<referencia opaca>"}}'

Salida esperada (200, campo data):

{
  "resultado": {
    "estado": "emitida",
    "tipoDte": "61",
    "puedeReintentar": false,
    "operacionId": "req_p3n8x2c6v1b9m4k7w0q5z",
    "folio": "87",
    "fechaEmision": "2026-09-15",
    "confirmadoEn": "2026-09-15T14:08:41.000Z"
  }
}

El folio es el de la nota de crédito, no el de la factura. Los estados de la anulación van en femenino:

  • emitida: el portal lista la nota y su firma es la que Connect envió. La factura quedó anulada.
  • rechazada: la nota no llegó a enviarse. La factura sigue vigente y puedes preparar la anulación de nuevo.
  • resultado_desconocido: todavía no hay evidencia para afirmar una cosa ni la otra. No prepares otra anulación: sigue Resultados y errores.

Por MCP

La preparación va por execute:

{
  "tool": "sii.anulacion.previsualizar",
  "connectionId": "conn_9tKfR2mQx4Vb",
  "params": { "documento": { "tipoDte": "33", "folio": "1042", "fechaEmision": "2026-09-15" } }
}

La emisión va por execute_write, con la clave de idempotencia fuera de params:

{
  "tool": "sii.anulacion.emitir",
  "connectionId": "conn_9tKfR2mQx4Vb",
  "idempotencyKey": "8b1e4f7a-2c9d-4e36-a5b0-6d3f9c1e7a24",
  "params": { "previewRef": "<referencia opaca>" }
}

Por SDK

const preparada = await connect.tools.sii.anulacion.previsualizar(
  { documento: { tipoDte: "33", folio: "1042", fechaEmision: "2026-09-15" } },
  { connectionId },
);
// Revisa preparada.anulacion.totales. Guarda la clave ANTES de emitir.
const { resultado } = await connect.tools.sii.anulacion.emitir(
  { previewRef: preparada.previewRef },
  { connectionId, idempotencyKey: crypto.randomUUID() },
);

Igual que en las facturas, la 0.1.0 publicada en npm no incluye estas tools: revisa tu versión.

Qué revisa Connect antes de firmar

Como la nota la arma el SII, Connect revisa la página del portal antes de firmarla: que sea una anulación, que refiera a la factura pedida, que no tenga campos editables y que sus totales cuadren (neto más IVA igual al total). Al emitir vuelve a pedir la nota y la compara con la que preparaste. Si algo no coincide, se detiene antes de firmar y la factura sigue vigente.

Errores frecuentes

CódigoCuándoQué hacer
sii_anulacion_documento_no_encontradoLa factura no está en la lista de emitidos del Facturador Gratuito: el folio o la fecha no calzan, o se emitió con otro sistema.Revisa folio y fecha de emisión. Si la acabas de emitir, espera un minuto.
sii_anulacion_en_cursoYa hay una anulación preparada y sin resolver para esa factura.Emite esa preparación o espera a que venza (15 minutos) antes de preparar otra.
sii_preview_token_expiredPasaron más de 15 minutos desde la preparación.Prepara la anulación de nuevo.
sii_preview_token_invalidLa preparación ya se usó, es de otra conexión o la emite otro actor.Prepara de nuevo con la misma clave de API con la que vas a emitir.

Los errores comunes a toda emisión están en Resultados y errores. La referencia completa del contrato está en sii.anulacion.previsualizar y sii.anulacion.emitir.

On this page