SIFENDE
Guías

Cancelar un Documento

Cómo cancelar una Factura Electrónica o Nota de Crédito ya aprobada enviando el evento de cancelación a SIFEN.

Si emitiste un DE con datos incorrectos y querés invalidarlo legalmente, tenés que cancelarlo enviando un evento a SIFEN.

Cuándo cancelar

Cancelá un documento cuando:

  • El documento está en estado APROBADO o APROBADO_OBSERVACION (los dos quedaron registrados en SIFEN)
  • Detectaste un error en datos del receptor, items o montos
  • El receptor aún no lo declaró ante la SET para deducir IVA
  • Estás dentro de las 48 horas desde la aprobación para FE o de las 168 horas para NCE, NDE y NRE

La cancelación es irreversible. Cuando SIFEN aprueba el evento, el documento queda en estado CANCELADO permanentemente y no se puede revertir.

Cuándo NO podés cancelar

Estado del DEAcción correcta
RECHAZADONo requiere cancelación, ya es legalmente nulo. Emití uno nuevo
CANCELADOYa está cancelado
PENDIENTEEsperá a que SIFEN procese el documento antes de decidir
Receptor ya lo declaróSolo podés emitir una Nota de Crédito para anularlo

Cómo cancelar

Identificá el CDC del documento a cancelar (44 dígitos).

Enviá el evento de cancelación con un motivo descriptivo (5-500 caracteres):

curl -X POST "https://api.sifende.com.py/api/v1/documento-electronico/01800123451001001000000122026042710000000006/cancelar" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "motivo": "Error en datos del receptor"
  }'
CampoTipoReq.Restricción
motivostringSí5-500 caracteres

Revisá el resultado. Si estadoEvento es APROBADO, el documento queda CANCELADO. Un HTTP 200 también puede contener un evento RECHAZADO; revisá codigoRespuesta y mensajeRespuesta.

Verificá el estado consultando GET /api/v1/documento-electronico/status/:cdc.

Ejemplo en TypeScript

async function cancelarDocumento(cdc: string, motivo: string, idempotencyKey: string) {
  const response = await fetch(
    `https://api.sifende.com.py/api/v1/documento-electronico/${cdc}/cancelar`,
    {
      method: "POST",
      headers: {
        "Authorization": `Bearer ${process.env.SIFENDE_API_KEY}`,
        "Content-Type": "application/json",
        "Idempotency-Key": idempotencyKey,
      },
      body: JSON.stringify({ motivo }),
    }
  );

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Cancelación fallida: ${error.detail}`);
  }

  const evento = await response.json();
  if (evento.estadoEvento !== "APROBADO") {
    throw new Error(`Cancelación sin confirmar: ${evento.estadoEvento}. ${evento.mensajeRespuesta ?? ''}`);
  }
  return evento;
}

const cdc = "01800123451001001000000122026042710000000006";
const idempotencyKey = await obtenerOCrearClaveDeCancelacion(cdc);

await cancelarDocumento(
  cdc,
  "Error en RUC del receptor",
  idempotencyKey
);

Después de cancelar

  • El número de documento no se libera: queda registrado como cancelado en SIFEN
  • Si necesitás facturar nuevamente, emití un nuevo DE con el siguiente número de la secuencia
  • El KuDE original queda invalidado y no debe entregarse al cliente

La cancelación NO consume un nuevo número de timbrado. Solo afecta al documento existente.

Errores comunes

ErrorCausaSolución
400 evento-cancelacion-errorPlazo de cancelación vencidoEmití una Nota de Crédito en su lugar
404 documento-electronico-not-foundCDC no existeVerificá los 44 dígitos del CDC
400 evento-cancelacion-errorEl documento no está aprobado o venció el plazoRevisá el estado y el detalle
409 evento-cancelacion-errorHay una cancelación activa para ese documentoConsultá el evento existente; no uses otra clave para evitar el conflicto

Recuperar una respuesta perdida

El procedimiento de recuperación está en Idempotencia y Reintentos Seguros. En cancelación, el reintento reutiliza y, si corresponde, reenvía el evento original; no crea otro evento.

Si el primer envío ya llegó a SIFEN, el reintento puede recibir 4003: el CDC ya tiene registrada una cancelación. Sifende lo trata como éxito equivalente, deja el documento CANCELADO, conserva el código y mensaje para auditoría y puede devolver protocoloAutorizacion: null. Los reintentos posteriores reproducen esa respuesta sin volver a enviar.

Próximos pasos

On this page