Idempotencia
La idempotencia evita que una misma operación se procese más de una vez cuando la solicitud necesita reenviarse.
En la práctica, significa que puede repetir una llamada de creación con la misma idempotencyKey sin generar una nueva operación duplicada.
Para qué sirve
Use idempotencia siempre que exista la posibilidad de que la misma solicitud se envíe de nuevo por un motivo técnico, como:
- un timeout en la respuesta
- una falla momentánea de red
- un retry automático del cliente HTTP
- un reenvío manual de la misma llamada
Este comportamiento es especialmente importante en operaciones financieras, porque evita que el integrador cree dos transacciones, dos depósitos o dos retiros por accidente.
Cómo usarla
El flujo recomendado es simple:
- genere una
idempotencyKeyúnica para la operación - envíe esa clave junto con la solicitud de creación
- si la misma operación debe reenviarse, reutilice la misma clave
- si es una operación nueva, genere una clave nueva
Si la intención de negocio es la misma, reutilice la misma idempotencyKey.
Si la intención cambió, cree una clave nueva.
Qué hace la plataforma
Desde el punto de vista de quien integra, la plataforma reconoce que la misma clave representa la misma operación dentro del mismo contexto de la integración.
Eso permite que un retry no se convierta en una nueva operación por error.
Si el primer intento aún está en procesamiento, la segunda llamada puede esperar el resultado de la operación original antes de responder.
Por cuánto tiempo es válida la clave
La plataforma guarda el resultado de la operación asociado a la idempotencyKey durante 1 hora a partir del primer envío.
Mientras esté dentro de esa ventana, reenviar la misma idempotencyKey devuelve el resultado de la operación original, sin crear una nueva.
Pasada 1 hora la clave expira: un reenvío con la misma idempotencyKey deja de reconocerse como retry y puede generar una nueva operación.
Si su flujo de retry puede demorar más que eso, asegúrese de que el reenvío ocurra dentro de esa ventana.
idempotencyKey vs externalCode
Estos dos campos tienen funciones distintas:
idempotencyKey: identifica un intento único de operación y protege contra la duplicación técnicaexternalCode: su referencia de negocio para localizar la operación en su propio sistema
Pueden usarse juntos, pero uno no sustituye al otro.
Cuándo generar una clave nueva
Genere una nueva idempotencyKey cuando:
- el pedido cambió
- el monto cambió
- el destinatario cambió
- se trata de otra operación, aunque parezca parecida
No reutilice la misma clave para intenciones distintas.
Ejemplo práctico
Primer intento
{
"amount": 500,
"paymentMethod": "PIX",
"externalCode": "PEDIDO-123",
"idempotencyKey": "b7f9c2d8-8f59-4a55-8c3c-8a6a4f9d1f2d"
}
Retry de la misma operación
Si la llamada anterior no tuvo una respuesta clara, al reenviar el mismo payload con la misma idempotencyKey la plataforma debe tratarlo como la misma operación.
{
"amount": 500,
"paymentMethod": "PIX",
"externalCode": "PEDIDO-123",
"idempotencyKey": "b7f9c2d8-8f59-4a55-8c3c-8a6a4f9d1f2d"
}
Buenas prácticas
- use la
idempotencyKeyen losPOSTde creación - mantenga la misma clave mientras siga intentando concluir la misma operación
- genere una clave nueva para cada nueva intención de negocio
- no use la clave como sustituta de
externalCode - trate el timeout y el retry de su cliente como escenarios esperados
Dónde se aplica
En nuestra API, este concepto aparece principalmente en los endpoints de creación:
En resumen
La idempotencia es lo que permite reejecutar la misma intención sin crear duplicados.
Para el integrador, la regla principal es:
- misma operación, misma
idempotencyKey - operación nueva, nueva
idempotencyKey