Stripe from first principles
What must be true for an internet business to take a card payment, and how each of those constraints became a Stripe primitive.
Thesis: Stripe is a state machine wrapped around the card networks, and nearly every product it sells is one of the network’s constraints turned into an object a developer can call.
Start from zero
What must be true for a stranger’s card to pay an internet business? Seven things.
- Someone vouches for the merchant. Visa and Mastercard do not sign up shops. An acquirer underwrites the business and carries the loss if it vanishes.
- Card numbers stay out of reach. Touching raw card data puts you under the Payment Card Industry Data Security Standard (PCI DSS). A startup should never hold one.
- The issuer says yes, live. The cardholder’s bank confirms the card, the credit and, probably, the person.
- A network carries the question from acquirer to issuer and back, in about a second.
- Money moves later, in batches. Authorisation is a promise. Settlement is payment.
- Every payment has an exit. Refunds start with the merchant. Disputes start with the cardholder, sometimes months later.
- The merchant’s software knows the truth, exactly once, even when requests time out and browsers close.
Stripe’s product list is this list rewritten as code.
The primitives
Vouching became the Stripe account, then Connect. Stripe holds the acquiring relationship, so a business opens an account in minutes instead of applying for its own merchant account. Connect pushes that vouching down to a platform’s sellers. Stripe now treats the old Standard, Express and Custom account types as legacy and asks new platforms to set responsibilities directly: who collects fees (fees_collector), who absorbs negative balances (losses_collector), and which dashboard the seller gets (full, express or none). Money moves as direct charges, destination charges, or separate charges and transfers.
Keeping card data away became Elements, Checkout, Payment Links and Link. The Payment Element collects card details inside a frame Stripe serves. Checkout is a prebuilt page. Payment Links need no code. Link remembers buyers across Stripe merchants. Your server only receives a PaymentMethod, a token for the card, which you attach to a Customer or save with a SetupIntent.
Asking the issuer became the PaymentIntent. One object per purchase moves through requires_payment_method, requires_confirmation, requires_action when Three-Domain Secure (3DS) authentication is needed, processing, and finally succeeded or canceled. If you authorise now and capture later, it waits in requires_capture. A decline returns it to requires_payment_method, so a retry never creates a second order. Stripe now recommends Checkout Sessions, which wrap this with line items and tax, for most new integrations.
Guessing fraud became Radar: a 0 to 99 risk score from models trained across Stripe’s network. By default 65 and above is elevated, and 75 and above is high risk, which Radar blocks.
Recurring money became Billing; recurring compliance became Tax. Billing turns Customers, Prices and Subscriptions into invoices and retries failed renewals. Tax calculates sales tax, Value Added Tax (VAT) and Goods and Services Tax (GST).
Money that stays became Treasury and Issuing: financial accounts held at partner banks, because Stripe is not a bank, and virtual or physical cards that let a platform earn a share of interchange.
Knowing the truth became idempotency keys and webhooks. An idempotency key of up to 255 characters makes a retry return the first response instead of acting twice; a reused key with different parameters is rejected, and keys may be pruned after 24 hours. Webhooks push signed events, retried for up to three days in live mode. Stripe does not promise order and may deliver twice, so handlers dedupe on the event identifier and acknowledge before slow work.
Follow one payment
A $100 order from a shopper in the United States (US), on a US Visa credit card:
- Your server creates a Checkout Session or PaymentIntent for 10,000 cents, with an idempotency key.
- The Payment Element sends the card details from the browser straight to Stripe. Your server sees only a PaymentMethod.
- The shopper confirms and Radar scores the payment. If 3DS is required, the status becomes
requires_actionand the shopper approves in their bank’s app. - Stripe sends an authorisation request through Visa to the issuer, which checks the card, limit and fraud signals, then approves. A $100 hold appears.
- The status becomes
succeeded. You verify the signedpayment_intent.succeededwebhook, then ship. The browser redirect is not proof; the tab can close first. - In clearing and settlement, the issuer sends $100 minus interchange, Visa takes its network fees, and Stripe receives the rest.
- Stripe credits your balance with $96.80 and pays it out two business days after the charge. A new account’s first payout takes 7 to 14 days. Instant Payouts cost 1.5%, with a 50¢ minimum.
- If the cardholder disputes the charge weeks later, the $100 is pulled back, Stripe adds a $15 fee, and
charge.dispute.createdasks you for evidence.
Where the money is
Stripe’s standard US price for a domestic online card is 2.9% + 30¢, plus 1.5% for international cards, 1% when currency conversion is needed and 0.5% for manually entered cards. In India it is 2% for Indian-issued Visa and Mastercard cards and 3% for foreign cards, and new businesses must request an invite.
The flat price hides a mix. Using Visa’s October 2026 US interchange schedule for online retail:
| On a $100 online payment | Premium rewards credit card | Regulated debit card |
|---|---|---|
| Stripe’s fee to the merchant | $3.20 | $3.20 |
| Interchange to the issuer | $2.70 (2.60% + 10¢) | $0.27 (0.05% + 21¢ + 1¢) |
| Network fees, approximate | about $0.15 | about $0.15 |
| Left for Stripe | about $0.35 | about $2.78 |
Visa’s online credit interchange runs from 1.89% + 10¢ on a basic card to 2.60% + 10¢ on top-tier Visa Infinite cards. Debit from banks with over $10 billion in assets is capped by regulation at 0.05% + 21¢, plus a cent for fraud prevention. Network fees are not on public rate sheets, so that row is an estimate.
Stripe earns little on premium credit and a lot on big-bank debit, so debit-heavy merchants quietly fund rewards-card merchants. That is why large merchants negotiate interchange plus (IC+) pricing, where the real interchange passes through and Stripe adds a markup.
Software sits on top of the payment: Billing at 0.7% of billing volume, Tax Basic at 0.5% per transaction where you are registered, a 0.25% starting fee for Connect platforms that set their own pricing, 10¢ per virtual card and $3.50 per physical card on Issuing, and 1.5% on Instant Payouts. Radar is being repriced: Radar Lite stays free, and from 22 January 2027 Radar Standard is charged per screened transaction, starting at 5¢ in the US. The base is large: businesses on Stripe moved $1.9 trillion in 2025, up 34%, about 1.6% of global gross domestic product (GDP).
What is hard, and what I would build next
1. Make the Radar change a proof, not a bill. When the free Standard trial ends on 22 January 2027, billing starts for everyone who has not switched to Lite, and default price changes cost trust. I would ship a report now showing each merchant the payments Standard caught that Lite would have allowed, priced against the $15 dispute fee and lost goods. The metric: merchants who choose Standard, on evidence, before the date.
2. Give every object a version number. Because webhook order is not guaranteed, careful integrations refetch the object on every event; thin events, which send only an identifier, formalise that habit. A version counter on each object, carried in every event, would let a handler drop a stale update without an extra call, removing a bug every founder writes once.
3. Mandates for agents. Stripe already prices Shared Payment Tokens, at 15¢ each, so artificial intelligence (AI) agents can buy on a customer’s behalf. The missing piece is the customer’s rule: this agent, these merchants, up to this amount, until this date. If issuers and Radar can both read it, an agent’s purchase stops looking like fraud and stops being a blank cheque.
Sources
- >Stripe pricing, United States
- >Stripe pricing, India
- >How PaymentIntents and SetupIntents work (Stripe docs)
- >Idempotent requests (Stripe docs)
- >Receive Stripe events in your webhook endpoint (Stripe docs)
- >Updates to Radar pricing, January 2027 (Stripe support)
- >Visa USA Interchange Reimbursement Fees, 24 October 2026
- >Stripe 2025 annual letter