Skip to content

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:

PermissionLevelWhy
Payment IntentsWritetakes payments
AccountReadlets Platypus confirm the connection and show your account name
Webhook EndpointsWritelets 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 keypk_live_... (or pk_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.succeeded and payment_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

SymptomLikely causeFix
No Buy tickets button on the event pageKeys missing, or event has no purchasable capacityComplete steps 1–2; check the event's ticket types are published with capacity
Save rejected with a Stripe error naming a permissionRestricted key missing that permissionEdit the key in Stripe (Developers → API keys), add it, then Test connection
Set up automatically fails with a permission messageKey lacks Webhook Endpoints: WriteAdd the permission, or use the manual path in step 3
Real card declined at checkoutTest keys still configuredSave your live keys, re-run webhook setup
Payment succeeded but tickets not confirmed / webhook errors in StripeWrong or stale signing secret, wrong endpoint URL, or wrong eventsRe-run Set up automatically; if manual, confirm the URL and the two exact events, re-paste the whsec_
Test connection fails after previously workingKey rolled or deleted in StripeCreate a new key and save it on the Payments page
"Stored key unreadable — re-enter your keys"Platform-side key rotationPaste your keys again
Webhook auto-setup reports an endpoint limitStripe's 16-endpoints-per-account capDelete unused endpoints in Stripe (Developers → Webhooks) and retry

Platypus.Tickets reference documentation.