A detailed retrospective on how Stripe's payments APIs evolved over 10 years, from the original 'seven lines of code' Charge API to the PaymentIntents and PaymentMethods design. The post covers the progression through Tokens, ACH/Bitcoin support, the Sources API, and the challenges each introduced — including managing multiple state machines across client and server. It explains the design principles behind PaymentIntents, the two-year rollout process, and how Stripe balanced simplicity for US card-only developers with a globally unified integration path. Key lessons include avoiding product debt, designing from first principles, layering new APIs over legacy ones for migration, and using 'packaging' (like the error_on_requires_action parameter) to progressively reveal API complexity.
Table of contents
A condensed history of Stripe’s payments APIsKeep it simple, StripeAn API product is more than just the APISort: