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

  1. Stripe Docs: Receive Stripe events in your webhook endpoint
  2. Stripe Docs: Using webhooks with subscriptions
  3. Stripe API Reference: Idempotent requests
  4. Stripe Docs: Strong Customer Authentication
  5. Stripe Docs: Connect
  6. Stripe Docs: Create a charge (Connect charge types)
  7. Apple: App Review Guidelines

Checked September 27, 2026.