Appearance
Stripe payments setup
Ticket money goes straight to your venue's own Stripe account — Platypus initiates the payment with your keys and never holds your funds. Until Stripe is connected here, visitors can see your events but the Buy tickets button stays hidden.
You'll need a Stripe account with its business details activated (a free account in test mode is enough to rehearse). Open Payments in the admin sidebar; the page walks you through three steps — about five minutes.
1. Create a restricted key in Stripe
In your Stripe dashboard: Developers → API keys → Create restricted key. A restricted key can only do the things ticket sales need, which makes it much safer than a full secret key. Grant exactly:
| Permission | Level | Why |
|---|---|---|
| Payment Intents | Write | takes payments |
| Account | Read | lets Platypus confirm the connection and show your account name |
| Webhook Endpoints | Write | lets Platypus set up payment confirmation for you |
Leave everything else on None. (A full secret key sk_live_... works too, but restricted is recommended — it limits what could go wrong if the key ever leaked.)
2. Paste your keys
- Publishable key —
pk_live_...(orpk_test_...while testing). Safe to share; it only identifies your account. - Secret key — the restricted key you just created (
rk_live_...). Stored encrypted, never shown again.
Platypus verifies the secret key against Stripe when you save — a rejected key is never stored, and a successful save shows your Stripe account name on the page. Both keys must be from the same mode (both live, or both test).
3. Set up payment confirmation (webhook)
When a payment goes through, Stripe tells Platypus so the tickets are issued and emailed. That link is a webhook:
- Automatic (recommended): click Set up automatically. Platypus creates the endpoint on your Stripe account and stores its signing secret. Done.
- Manual (if your key lacks Webhook Endpoints permission): in Stripe, Developers → Webhooks → Add endpoint; paste the endpoint URL shown on the Payments page, select exactly the events
payment_intent.succeededandpayment_intent.canceled, then copy the endpoint's signing secret (whsec_...) back into the Payments page.
A missing webhook warns but doesn't block sales — payments still verify at the end of checkout. Set it up anyway: it's the safety net that issues tickets if a buyer's connection drops at the wrong moment.
4. Verify
The status card shows the connected account, a LIVE/TEST MODE badge, and the webhook state. Test connection re-checks any time without re-entering keys.
Test keys vs live keys
Rehearse with your Stripe test keys (rk_test_/pk_test_) — checkout then accepts only Stripe's test cards such as 4242 4242 4242 4242. Buy a ticket yourself and confirm the order completes and the ticket PDF arrives by email.
Switching between test and live keys clears the stored webhook (Stripe webhooks are per-mode) — re-run Set up automatically after the switch.
Go-live checklist
- [ ] Live restricted key (
rk_live_) and live publishable key (pk_live_) saved - [ ] Webhook state shows Automatic ✓ (or Manual ✓) — re-done after the test→live switch
- [ ] Test connection shows your account name with a LIVE badge
- [ ] Buy tickets button visible on a public event page
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| No Buy tickets button on the event page | Keys missing, or event has no purchasable capacity | Complete steps 1–2; check the event's ticket types are published with capacity |
| Save rejected with a Stripe error naming a permission | Restricted key missing that permission | Edit the key in Stripe (Developers → API keys), add it, then Test connection |
| Set up automatically fails with a permission message | Key lacks Webhook Endpoints: Write | Add the permission, or use the manual path in step 3 |
| Real card declined at checkout | Test keys still configured | Save your live keys, re-run webhook setup |
| Payment succeeded but tickets not confirmed / webhook errors in Stripe | Wrong or stale signing secret, wrong endpoint URL, or wrong events | Re-run Set up automatically; if manual, confirm the URL and the two exact events, re-paste the whsec_ |
| Test connection fails after previously working | Key rolled or deleted in Stripe | Create a new key and save it on the Payments page |
| "Stored key unreadable — re-enter your keys" | Platform-side key rotation | Paste your keys again |
| Webhook auto-setup reports an endpoint limit | Stripe's 16-endpoints-per-account cap | Delete unused endpoints in Stripe (Developers → Webhooks) and retry |