Ir al contenido

Idempotencia

Envía un Idempotency-Key estable por intención de creación. Reutiliza exactamente la misma clave y cuerpo compatible al reintentar una respuesta perdida; una intención nueva necesita otra clave. El contrato conserva la respuesta original por 72 horas y devuelve 409 si la clave se usa con otro cuerpo.

import { createTimbroPayments } from "@timbro/payments";
const secretKey = process.env.TIMBRO_PAYMENTS_SECRET_KEY;
if (!secretKey) throw new Error("Missing TIMBRO_PAYMENTS_SECRET_KEY");
const timbro = createTimbroPayments({ secretKey });
const idempotencyKey = "create-order-123";
const payment = await timbro.payments.create({
idempotencyKey,
saleReference: "order-123",
amount: { currency: "DOP", minorUnits: 125_000 },
description: "Servicio de mantenimiento",
fiscalDocument: null,
});

La idempotencia no convierte un resultado incierto en rechazo. Si la red se corta después de enviar, consulta el pago antes de decidir si mostrar un resultado o pedir otra acción.

Persiste la clave junto a la intención normalizada. Un 500, 502, timeout o conexión rota conserva la misma clave para el reintento; una respuesta 201 aceptada la cierra. Nunca cambies sólo la clave para escapar de un error sin reconciliar el Payment.