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, paid ticket types can't be bought; an event with free ticket types still shows its Buy tickets button, offering the free types only.

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.

While you're setting up payments, the page also nudges you to fill in your ticket terms & refund policy and ABN under Settings. Buyers see the policy at checkout and the ABN on receipts (see Business identity). Selling works either way; the nudge tells you what buyers aren't seeing yet.

1. Create a restricted key in Stripe

In your Stripe dashboard: Developers → API keys → Create restricted key. A restricted key can only do what ticket sales need, which makes it much safer than a full secret key. Grant exactly:

PermissionLevelWhy
Payment IntentsWritetakes payments
AccountReadconfirms the connection and shows 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, payment_intent.canceled, and payment_intent.payment_failed, 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 at 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

When a payment needs attention

Very occasionally Stripe captures a buyer's money but Platypus can't (or shouldn't) issue the tickets. When that happens, you're emailed straight away, a red banner appears at the top of the Payments page with the affected orders listed underneath, and the Payments item in the sidebar carries a warning triangle until everything is dealt with. Payment exceptions covers what each flag means, how to refund from your Stripe dashboard, and when to mark a row resolved.

Troubleshooting

SymptomLikely causeFix
No Buy tickets button on the event pageKeys missing and no free capacity, or the event has no purchasable capacityComplete steps 1–2; check the event's ticket types are published with capacity (free types sell without keys)
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 three 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

A failure the table doesn't explain is worth reporting — email support@platypus.tickets with what the status card shows and the time it happened.

Platypus.Tickets reference documentation. Contact & support.