The Key That Expired

A reconciler sweeps for payout rows still marked pending and retries each one against Stripe, reusing the idempotency key stored on the row. It runs nightly at 02:00. One merchant is paid twice: the original request at 01:40 returned a 500, and the sweep at 02:00 the following night resent it with the same key.

What explains the duplicate?

A

The key exceeded the 255 character limit and was truncated, colliding with a different payout's key.

B

Keys are only retained for about 24 hours. Once the original is pruned, a request carrying that key is treated as brand new, so the retry created a second payout.

C

A 500 means the request never reached the endpoint, so nothing was stored under the key. The retry made the first real payout and the duplicate came from somewhere else.

D

Keys are scoped per API version. The reconciler pinned a different version from the service that made the original call, so the two requests never shared a key namespace.