Payments
Connect Stripe
Buyers pay your own Stripe account. We create each checkout on it and listen for Stripe's events. We never hold the money and never see a card number.
Connect your account
- Open Payments. In Payments, under Stripe, choose Connect on the Test side, then say whether you have a Stripe account.
- Finish Stripe's onboarding. Stripe's own pages open. They set up a connected account for your apps, and can copy your verified details from a Stripe account you already have.
- Check it's connected. Back on Payments, the Test side shows Connected, with the account's name and ID.
- Connect live at go-live. Do the same on the Live side when you're ready to take real money.
- One connection serves all your apps.
- Test and live connect separately.
- Connecting or disconnecting asks you to confirm it's you again if you signed in more than 10 minutes ago.
- Disconnecting live stops new Stripe checkouts until you reconnect. Watches that paid stay unlocked.
Or use your own key
Choose Use my own key and paste a restricted key with read and write on Checkout Sessions, and read on charges and refunds. We test it with a read-only call before saving it, store it encrypted, and show only its last 4 characters from then on. A secret key is refused: a restricted key can do only what we need.
Your Stripe account
- It's yours. You get the full Stripe dashboard. Charges are made on your account, so you're the seller.
- Payouts are Stripe's. Payouts, and Instant Payouts where Stripe makes your account eligible, are in your Stripe dashboard.
- Fees are Stripe's. Stripe's own fees are yours and come out in Stripe. We take no cut of a sale.
- Apple Pay and Google Pay show on Stripe's hosted checkout with no setup.
- Local ways to pay show where they fit the price's currency: Alipay and WeChat Pay, and in euros or złoty iDEAL, Bancontact, EPS, Przelewy24 and BLIK. Turn on the ones you want in Stripe, under Settings, then Payment methods. One that's off is left out. They all pay at once, so the watch unlocks at once.
- Set a clear statement descriptor, such as your app's name, so buyers recognise the charge on their statement.
What we listen for
Connected this way, you don't add a webhook: Stripe sends your account's events to us.
| Stripe event | What it means | What the watch does |
|---|---|---|
checkout.session.completed | Paid | Unlocks within about a second if its buy screen is open; otherwise when it next asks. |
charge.refunded | Refunded | Locks at its next check; at once if its buy screen is open. |
charge.dispute.created | A dispute opened | Locks while the dispute is open. |
charge.dispute.closed | The dispute ended | Won: unlocks again, unless refunded. Lost: stays locked. |
radar.early_fraud_warning.created | A fraud warning | Stays unlocked. We tell you, so you can refund before a dispute fee. |
invoice.paid | A renewal paid | Stays unlocked. |
invoice.payment_failed | A renewal declined | Locks. The buyer is asked to update their card. |
invoice.payment_action_required | The bank wants the buyer to confirm | Shows a QR code to Stripe's invoice page. |
Subscription canceled, unpaid or paused | Canceled, or the retries ran out | Locks. |
We check every event against the checkout we made: the watch and app in its metadata, the amount, the currency, and test or live.
If Stripe can't reach us
Payments shows Needs attention, with the fix. Payments still go through meanwhile, but refunds and disputes can't lock watches until Stripe reaches us again.
Refunds and disputes
- Refund in your Stripe dashboard. A sale in Sales links straight to it.
- Refunding a subscription charge doesn't stop the subscription. Cancel it in Stripe too.
- Respond to disputes in Stripe. The watch stays locked while a dispute is open.
The watch's side of each case is on Refunds, disputes and renewals.
Testing with Stripe
- Pay with
4242 4242 4242 4242, any future date and any CVC. - Make a test dispute with
4000 0000 0000 0259. - Refund from Stripe's test dashboard.
Never run refunds, declines or disputes on your live account to test. Use test mode.