Resumen

  • En un POST de API v1, Stripe conserva estado y cuerpo del primer resultado una vez iniciada la ejecución, incluso si es 500. La misma clave devuelve esa respuesta mientras se conserva.
  • Stripe considera indeterminado el resultado de un 500: puede haber efectos, y la conciliación puede terminar con un objeto anunciado por webhook. La respuesta guardada permanece igual. API v2 cambia esta lógica.

Dos recibos rojos no hacen dos fracasos

Un sistema manda una orden a Stripe y recibe 500. Reintenta con la misma clave, recibe 500 otra vez y abre un segundo incidente. Para una operación POST de API v1, la segunda respuesta puede ser la copia de la primera. Stripe guarda el resultado después de que empieza la ejecución del endpoint. El encabezado Idempotent-Replayed: true revela la repetición. Un panel que registra dos errores sin marcar el replay convierte un mecanismo de seguridad en ruido operativo.

Detrás del error puede haber trabajo. Stripe advierte que un 500 deja el resultado abierto: tal vez la operación produjo efectos. Durante la recuperación intenta conciliar las operaciones fallidas y puede emitir webhooks por objetos creados. El 500 almacenado no se actualiza cuando aparece el objeto; la conciliación tampoco tiene éxito garantizado. La respuesta y el estado del objeto necesitan columnas distintas en el libro de operaciones.

La forma de unirlas es una identidad local creada antes de la primera llamada y enviada en los metadatos del recurso. Tras el 500, el equipo busca el objeto, revisa la solicitud en el Dashboard y verifica los eventos webhook. Con esa evidencia decide si la operación existe, sigue incierta o requiere otra acción. Cambiar de clave de idempotencia mientras la primera operación no está resuelta puede iniciar un efecto nuevo.

La versión de API importa. Stripe describe en v2 reintentos que no repiten operaciones exitosas y que intentan completar trabajo fallido o parcial, con una respuesta actualizada cuando es posible. La instrucción «reintentar el 500» tiene por tanto dos contratos. El operador debe saber cuál rige la llamada antes de decidir qué significa el siguiente recibo.

Fuentes