Payments · Stripe
Stripe payments that match what your app grants
Taking the first payment is easy. The hard part is everything after: renewals, failed cards, refunds, disputes, payouts to sellers, and making sure the person who paid actually has access — and the person who stopped paying does not.
What we build with Stripe
Checkout
One-off payments and first subscriptions through Stripe Checkout, with the success page treated as a courtesy and the webhook treated as the truth.
Billing
Subscriptions, trials, plan changes, proration and dunning. Access follows the subscription status: provisioned on a paid invoice, flagged on past due, revoked on canceled or unpaid.
Stripe Connect
Marketplace payments where money moves between buyers, sellers and the platform: onboarding and verification of connected accounts, platform fees and payouts.
Webhooks and idempotency: where payment bugs actually live
Payment bugs rarely live in the checkout screen. They usually live in the webhook handler that was written once, tested once, and never saw a retry, a duplicate or an event arriving out of order.
In live mode, if your webhook endpoint does not respond properly, Stripe keeps retrying the event for up to three days with exponential back-off. Stripe does not guarantee the order of events, and the same event can arrive more than once. A handler that grants access twice, or cancels a subscription because the "deleted" event arrived before the "paid" one, is a real support ticket.
We verify the Stripe-Signature header against the raw request body, record processed event IDs so duplicates are ignored, and make each handler safe to run again. Outgoing calls use idempotency keys: Stripe accepts them on all POST requests and saves the first result for a key, including errors, so a network retry never charges a card twice.
The Stripe behavior we design around
From the Stripe documentation, checked on September 27, 2026.
- Webhook retries
- In live mode, Stripe retries an undelivered webhook for up to 3 days with exponential back-off. In a sandbox it retries three times over a few hours. Stripe Docs: Using webhooks with subscriptions
- Event order and duplicates
- Stripe does not guarantee delivery order, and endpoints may receive the same event more than once; log processed event IDs. Stripe Docs: Receive Stripe events in your webhook endpoint
- Idempotency keys
- All POST requests accept idempotency keys of up to 255 characters. Stripe saves the first result for a key, including 500 errors; keys can be pruned after at least 24 hours. Stripe API Reference: Idempotent requests
- Subscription access
- Provision on invoice.paid, handle invoice.payment_failed and invoice.payment_action_required, and revoke access when a subscription becomes canceled or unpaid. Stripe Docs: Using webhooks with subscriptions
- SCA and 3D Secure
- Strong Customer Authentication has applied since September 14, 2019 under PSD2 to EEA card payments. Checkout, Billing, Payment Intents and Setup Intents are SCA-ready; 3D Secure provides a liability shift. Stripe Docs: Strong Customer Authentication
- Connect charge types
- Direct charges, destination charges and separate charges and transfers. With destination charges, refunds, disputes and fees are debited from the platform; with direct charges, from the connected account. Stripe Docs: Create a charge (Connect charge types)
SCA and 3D Secure
If you sell to cardholders in Europe, some payments will ask for extra authentication. Stripe’s SCA-ready products handle the challenge, but the app still has to handle the states around it: a subscription that starts as incomplete, a payment that requires action, and off-session renewals that need a saved mandate. We build those paths and test them with Stripe’s test cards before launch.
Stripe marketplace payments with Connect
Stripe describes Connect as the product for platforms and marketplaces that move money between multiple parties. The design decision that matters most is the charge type. Destination charges suit most marketplaces: the platform takes the charge and transfers funds to the seller, and it also carries refunds and disputes. Separate charges and transfers let one payment be split across several sellers or charged before the seller is known, at the cost of more bookkeeping. Direct charges put the seller in front of the customer and move refunds and chargebacks to their balance.
Around that sit onboarding and identity verification for connected accounts, platform fees, payout schedules, and what the app shows a seller whose account is restricted. We choose the setup that matches who carries the risk in your business, not the one that is fastest to wire up.
One entitlement across the App Store, Google Play and Stripe
Apps that sell subscriptions on the web and inside the mobile apps end up with three sources of truth. Apple’s guidelines require in-app purchase to unlock features or functionality such as subscriptions inside the app, while US storefront apps may now link out to other purchase methods. Either way, one user can hold a web subscription from Stripe and a store subscription on their phone.
We model a single entitlement per user on the backend, fed by Stripe webhooks and the store server notifications, with clear rules for overlaps, upgrades, refunds and cancellations. The app asks the backend what the user can access; it never decides that from a local receipt alone.
Stripe in production, built and run together with their founders
Qovo
A two-sided marketplace with split payouts through Stripe Connect.
Dilizy
A dealer platform taking subscription payments.
Questions about hiring a Stripe developer
Can you fix an existing Stripe integration instead of rebuilding it?
Yes, and that is the usual case. We start by comparing Stripe’s records with your database to find where they disagree, then fix the handlers that caused it.
Should we use Stripe Connect or just send payouts manually?
If money for other people passes through your platform on a regular basis, Connect handles onboarding, verification and payouts that you would otherwise do by hand. We help you pick the charge type that fits your refund and dispute responsibility.
Do we need in-app purchase if we already have Stripe?
For digital features unlocked inside an iOS app, Apple’s guidelines generally require in-app purchase, with an exception for links to other purchase methods on the US storefront. We look at your storefronts and product before recommending a setup.
Will our subscribers notice the change?
They should not. Migrations are planned so existing subscriptions keep renewing, and access is checked against both the old and new records until the switch is complete.
Who owns the Stripe account?
You do. We work as team members on your account with the permissions the work needs.
Next step
Tell us what you sell, where, and what is going wrong or about to launch. We will say what we would check first.
No pitch deck. A straight answer on what's blocking your launch.
Sources
- Stripe Docs: Receive Stripe events in your webhook endpoint
- Stripe Docs: Using webhooks with subscriptions
- Stripe API Reference: Idempotent requests
- Stripe Docs: Strong Customer Authentication
- Stripe Docs: Connect
- Stripe Docs: Create a charge (Connect charge types)
- Apple: App Review Guidelines
Checked September 27, 2026.