Ir al contenido
Facturalo

Idempotencia

Evita duplicar comprobantes al reintentar: Idempotency-Key en POST /documentos/enviar y /guias/enviar, y clave natural serie+correlativo+tipo.

Si tu cliente HTTP se cae a mitad de un envío o reintentas el mismo POST, Facturalo no debe emitir dos veces el mismo comprobante. Hay dos capas de protección.

1. Clave natural (serie + correlativo + tipo)

Si ya existe un documento o guía con la misma empresa, entorno, tipo, serie y correlativo, el envío no crea otro: responde el estado actual del existente y marca la respuesta con el header X-Idempotent-Replayed: true.

2. Header Idempotency-Key (recomendado)

Envía un identificador único de tu lado (por ejemplo el id de la orden en tu ERP) en el header Idempotency-Key. La primera respuesta exitosa (2xx) se guarda 24 horas. El mismo key + el mismo cuerpo devuelve la respuesta original con X-Idempotent-Replayed: true. El mismo key con otro cuerpo responde 409.

cURLbash
-primary-dark)">curl -X POST https://api.facturalo.pe/api/v3/documentos/enviar \
  -H "Authorization: sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: orden-1042" \
  -d @factura.json
SDK Node.jsts
await facturalo.documentos.enviar(documento, {
  idempotencyKey: "orden-1042",
});
SDK PHPphp
$facturalo->documentos->enviar($documento, webhook: false, establecimiento: null, idempotencyKey: 'orden-1042');

Dónde aplica

POST /documentos/enviar y POST /guias/enviar. También acepta X-Idempotency-Key o el campo idempotencyKey / idempotency_key en el JSON.

Headers de respuesta

HeaderSignificado
Idempotency-KeyEco de la clave que enviaste.
X-Idempotent-Replayed: trueSe devolvió una respuesta ya conocida (replay), no una emisión nueva.
X-Idempotent-Replayed: falsePrimera vez que se guardó esa clave.