The First 10-Year Evolution of Stripe’s Payments API
Summary
Stripe's payment API evolved significantly over 10 years, moving from a simple credit card processing system to a unified global platform. Initially, Stripe launched with "Tokens" for secure card data handling and "Charges" for immediate payment requests, primarily for US credit cards. As the company expanded to include ACH debit and Bitcoin in 2015, it faced challenges with asynchronous payment finalization and customer-initiated payments, leading to the introduction of pending states and new resources like BitcoinReceiver. The subsequent "Sources API" attempted to unify these, but introduced complexity due to varying payment method behaviors and the need for merchants to manage multiple state machines and webhooks. This led to the realization that credit cards were an outlier in payment finalization and initiation. By 2017, Stripe developed the "PaymentIntents" and "PaymentMethods" abstractions, creating a single, predictable state machine for all global payment types, which significantly improved resilience and consistency for developers.
Key takeaway
For VPs of Engineering or product leaders building platform APIs, Stripe's journey highlights the critical need to anticipate future complexity and design for global scale from the outset. Your initial "simple" solution for a narrow use case may become a significant burden as requirements expand. Prioritize designing from first principles and creating consistent, predictable abstractions, even if it means a slightly higher initial integration effort for basic use cases. This approach will prevent costly refactoring and maintain developer experience as your product evolves.
Key insights
Stripe's API evolution demonstrates the challenge of maintaining simplicity while scaling to global payment complexity.
Principles
- Products accumulate "product debt" over time, especially in APIs.
- Design from first principles, not existing abstractions.
- Simplicity means consistency and predictability, not fewer resources.
Method
Stripe's team designed the PaymentIntents API by closing laptops, focusing on questions, using visual aids, and validating concepts with hypothetical integration guides for real and imaginary payment methods.
In practice
- Use webhooks for asynchronous payment status updates.
- Implement a single, predictable state machine for diverse payment types.
- Offer simplified API packaging for common use cases.
Topics
- Payment API Design
- Stripe PaymentIntents
- Payment Processing Evolution
- API Abstraction
- PCI Compliance
Best for: VP of Engineering/Data, Entrepreneur, Software Engineer, Product Manager, CTO
Related on AIssential
Editorial summary, takeaway, and curation by AIssential. Original article published by ByteByteGo Newsletter.