Las escrituras que pueden crear duplicados requieren o aceptan Idempotency-Key.
En el SDK se envía como idempotencyKey dentro del request.
await lapyme.sales.create({
idempotencyKey: `sale:shopify:${order.id}`,
body: {
// ...
},
});
Buenas keys
Elegí una key estable que represente la operación de negocio, no el intento.
sale:shopify:12345
purchase:vendor-bill:0001-00000042
stock-adjustment:warehouse-1:cycle-count-2026-05-24
customer:external-crm:88291
Keys que conviene evitar
random UUID nuevo en cada retry
timestamp-only-2026-05-24T10:30:00Z
sale
retry-1
Patrón de retry
import { Lapyme } from "lapyme";
import * as errors from "lapyme/models/errors";
const lapyme = new Lapyme({
bearerAuth: process.env["LAPYME_API_KEY"] ?? "",
});
const idempotencyKey = `sale:shopify:${order.id}`;
try {
await lapyme.sales.create({
idempotencyKey,
body: salePayload,
});
} catch (error) {
if (
error instanceof errors.ApiErrorEnvelope &&
error.error.retryable
) {
// Reintentá la misma operación con el mismo idempotencyKey.
await lapyme.sales.create({
idempotencyKey,
body: salePayload,
});
} else {
throw error;
}
}
Si reutilizás la misma key con otro payload, la API responde
IDEMPOTENCY_CONFLICT.