Idempotency-Key resuelve esto: te permite reintentar una solicitud cualquier número de veces con la garantía de que Therius la procesará exactamente una vez.
Cómo funciona
Todos los endpoints que modifican datos aceptan un encabezado de solicitudIdempotency-Key:
POST /payment/purchasePOST /payment/authorizationPOST /payment/{id}/capturePOST /payment/{id}/refundPOST /payment/{id}/cancelPOST /payment/{id}/cancel_or_refundPOST /payment/resumePOST /subscriptionPOST /subscription/usage— consulta la nota más abajo; la semántica difiere un poco
- Primera solicitud — Therius reserva la clave, procesa el pago y almacena la respuesta
2xxasociada a la clave. - Reintento con la misma clave — Therius detecta el duplicado, omite el procesamiento y devuelve la respuesta en caché de inmediato.
- Solicitud concurrente con la misma clave — Si llega una segunda solicitud con la misma clave mientras la primera aún está en curso, Therius devuelve
409 Conflictcon un encabezadoRetry-After: 1. Espera un segundo y reintenta. - Endpoint equivocado, misma clave — Reutilizar una clave en un endpoint diferente devuelve
422 Unprocessable Entity.
Solo se almacenan en caché las respuestas
2xx. Si una solicitud falla con un estado 4xx o 5xx, la clave no se guarda — puedes reintentar con una clave nueva (o la misma clave, si el error fue transitorio y quieres volver a intentar la misma operación).POST /subscription/usage también lee el encabezado Idempotency-Key, pero se deduplica por (meterCode, Idempotency-Key) y nunca expira: una repetición devuelve el evento de uso original con "duplicate": true en vez de una respuesta HTTP en caché. Allí la clave es opcional — si la omites, cada llamada registra un evento nuevo.Ejemplos de código
Bash / cURL
$IDEM_KEY. Therius devolverá el resultado en caché si la solicitud original tuvo éxito.
JavaScript
fetch lanza un error de red, recupera el UUID almacenado y reintenta con él — no generes uno nuevo.
Mejores prácticas
- Genera la clave antes de la solicitud, no después. Guárdala con el registro del pedido para poder recuperarla si necesitas reintentar.
- Un UUID por operación lógica. Una compra y su posterior reembolso son dos operaciones distintas — cada una recibe su propio UUID.
- No reutilices claves entre endpoints. Una clave usada para
POST /payment/purchaseno puede usarse paraPOST /payment/{id}/refund. - No compartas claves entre clientes ni pedidos. Cada clave debe ser globalmente única para una sola operación.

