While drafting a post about Hatchet's new idempotency keys feature, co-founder Alexander Belanger set out to answer a seemingly trivial question: what was the first idempotency key? Idempotency keys are unique identifiers that let API handlers de-duplicate messages delivered more than once — a workaround for the fact that exactly-once delivery is impossible in distributed systems, so exactly-once processing must be bolted on instead.

Asking Claude first, he got the confident answer "around 2011, with Stripe's Idempotency-Key header" — which, after a bluff from the author, Claude retracted, admitting no authoritative record of a "first" exists. Stripe's header appears to date from around 2015, and Stripe popularized the name. AWS EC2's ClientToken offered similar behavior: repeat a request with the same token and parameters and you get the original result; change the parameters and you get an IdempotentParameterMismatch error. This pattern was recently codified in an IETF draft for an Idempotency-Key HTTP header, which also credits Mark Nottingham's 2005 Internet-Draft "POST Once Exactly" (POE). In POE, a client first issues a GET to obtain a one-shot POST URL — the unique part of the URL acting as the de facto idempotency key. POE saw little adoption.

Going further back, the early-2000s spec wars produced transport-level approaches: the OASIS ebXML Message Service spec and WS-ReliableMessaging (co-published by Microsoft, IBM, BEA, and TIBCO) implemented message deduplication at the transport layer when a service declared NoDuplicateDelivery — in contrast to the RESTful style, where the application layer handles a custom header.

After brief detours through Incan quipu knot records and medieval tally sticks — both arguably duplicate-prevention systems — the author imposed a new rule: the answer must involve electronic computers. That led to Birrell and Nelson's 1984 paper "Implementing Remote Procedure Calls" from Xerox PARC, building on Nelson's PhD thesis that coined the term RPC. The paper's per-call identifier lets the caller match results to calls and lets the callee discard duplicate call packets via a table of last-invoked sequence numbers. The author concedes it may not be the definitive oldest instance — but it is the earliest he could find that meets his criteria.