Buyers pay into your own gateway account. SeatLayer creates the payment on your account and records the order; it never holds your funds. The gateway sets its own processing fees and payout timing.
Fourteen gateways are supported. The payments overview compares them side by side.
| Gateway | Regions | Buyers pay with |
|---|---|---|
| Stripe | Most countries | Card |
| Razorpay | India | Card, UPI, netbanking |
| PayPal | Most countries | PayPal, card |
| Tap | Middle East and the Gulf | Card, Apple Pay, KNET, mada |
| Mercado Pago | Latin America | Card, Pix, Mercado Pago wallet |
| Xendit | Southeast Asia | Card, e-wallet, QR |
| Flutterwave | Africa | Card, mobile money, bank transfer |
| Square | North America, Europe, Australia and Japan | Card, Apple Pay, Google Pay |
| Mollie | Europe | Card, iDEAL, Bancontact, PayPal |
| Paystack | Africa | Card, bank transfer, mobile money |
| Authorize.Net | United States, Canada, UK, Europe and Australia | Card |
| Checkout.com | Europe, UK, the Middle East, Asia Pacific and the Americas | Card, Apple Pay, Google Pay, local methods |
| iyzico | Turkey | Card, installments |
| Braintree | United States, Canada, UK, Europe, Australia and more | Card |
Open Settings → Payments. Stripe and Razorpay are open to every account: each has a card with Connect and its name, for example Connect Stripe. The other twelve are listed under More payment options until they are on for your account. An admin chooses Request next to one; we switch it on and its card appears with the others. Then connect it the same way. For a gateway that is not listed, choose Ask us.
Every form asks for the Currency your events are priced in, limited to the currencies that gateway takes. Each section below lists them. All keys and secrets are encrypted on save and cannot be read back, by you or by SeatLayer staff.
Test and live
There is no mode switch. The credentials decide the mode: a test key makes a test connection, a live key makes a live one. For gateways whose keys look the same in both environments (Square, Authorize.Net, Braintree), SeatLayer checks which environment accepts them. You can keep test and live side by side, and one connection per currency. Test events use a test connection and issue tickets marked as not valid for entry.
Stripe
Currencies: every currency SeatLayer sells in. See the Stripe ticketing page for what buyers see.
Create a restricted key in Stripe
Choose Open Stripe API keys and create a restricted key with these permissions: Checkout Sessions: Write, Refunds: Write, Webhook Endpoints: Write, Basic Business Contact Information: Read. See Stripe permissions for why each one is needed. For a test event, switch Stripe’s Test mode on first.
Paste it
Paste the key into Restricted or secret key and choose Connect
Stripe. A restricted key (rk_…) or the secret key (sk_…) both work;
the publishable key (pk_…) does not.
Nothing else to do
SeatLayer verifies the key with Stripe and creates the payment webhook on your account.
Razorpay
Currencies: every currency SeatLayer sells in. Razorpay is listed first for events priced in INR.
Generate API keys
Choose Open Razorpay API keys and generate a key pair. Razorpay shows the Key Secret only once.
Create a webhook
In Razorpay, go to Account & Settings → Webhooks → Add new webhook. Use
the URL shown under Your webhook URL, subscribe to payment.captured,
payment.failed and refund.processed, and choose a secret. Without this
webhook, paid orders never confirm.
Paste all three values
Enter Key ID, Key secret and Webhook secret (from step 2), pick the Currency your events are priced in, and choose Connect Razorpay.
PayPal
Currencies: USD, EUR, GBP, CAD, AUD, SGD, JPY, CHF, SEK, NZD, MXN, BRL, PHP, THB, MYR. See the PayPal ticketing page for more.
Create an app in PayPal
Choose Open PayPal apps, open Apps & Credentials and create an app. Use a Sandbox app for test events and a Live app for live events.
Accept payments in your event currency
In your PayPal account settings, set payments in other currencies to be accepted automatically. Otherwise PayPal holds each payment until you approve it.
Paste the app's credentials
Enter Client ID and Secret and choose Connect PayPal. SeatLayer sets up PayPal’s payment notifications for you.
Tap
Currencies: USD, EUR, GBP, AED, SAR, KWD, QAR, BHD, OMR.
Open your Tap API credentials
Choose Open Tap dashboard, then goSell → API credentials. Copy the
sandbox secret key (sk_test_…) for a test event or the production secret
key (sk_live_…) for a live one.
Paste the secret key
Enter Secret key and choose Connect Tap. Tap signs its payment notifications with this key, so there is nothing else to copy.
Mercado Pago
Currencies: BRL, MXN, ARS, CLP, COP, PEN, UYU. Your Mercado Pago account’s country decides which one, and SeatLayer checks it when you connect.
Open your application's credentials
Choose Open Mercado Pago Developers, open Your integrations, choose your application, then Credentials. Copy the test Access Token for a test event or the production one for a live event.
Paste the Access Token
Enter Access Token and choose Connect Mercado Pago. Each payment is read back from Mercado Pago to confirm it, so there is no webhook to set up.
Xendit
Currencies: IDR, PHP, THB, VND, MYR, SGD.
Create a secret key in Xendit
Settings → API keys → Generate secret key, with Write access to Money-in. Switch Xendit to Test mode for a test event.
Add the webhook URL
In Xendit, go to Settings → Webhooks and paste Your webhook URL for Payment session and Refund. Copy the verification token shown on that page.
Paste both values
Enter Secret key and Verification token (from step 2), then choose Connect Xendit.
Flutterwave
Currencies: NGN, GHS, KES, UGX, TZS, RWF, XAF, XOF, EGP, ZAR, USD, EUR, GBP.
Copy your secret key from Flutterwave
Settings → API keys. Use the test key (FLWSECK_TEST-…) for test events and
the live key (FLWSECK-…) for live events.
Add the webhook URL
In Flutterwave, go to Settings → Webhooks, paste Your webhook URL, choose a secret hash of 12 characters or more, and turn on retries for failed webhooks.
Paste both values
Enter Secret key and Secret hash (from step 2), then choose Connect Flutterwave.
Square
Currencies: USD, EUR, GBP, CAD, AUD, JPY. A Square location settles in one currency, and the connection takes that location’s currency. See the Square ticketing page for more.
Copy your access token
Choose Open Square Developer Console, open your app (create one if you
have none), then Credentials. Switch to Sandbox at the top for a test event,
or Production for a live event, and copy the access token. The Application
ID (sq0idp-…) is not the access token.
Add the webhook
In the same app and environment: Webhooks → Subscriptions → Add
subscription. Paste Your webhook URL, choose the events
payment.created, payment.updated, refund.created and
refund.updated, and save. Open the subscription and copy its signature
key.
Paste them
Enter Access token, Signature key (from step 2) and Location ID (from Locations in your Square app), pick the Currency, and choose Connect Square. Leave Location ID empty to use your main location.
SeatLayer checks that the location is active and can take card payments, and that its currency matches the one you picked. Each payment is read back from Square before a sale confirms.
Mollie
Currencies: EUR, GBP, USD, CHF, DKK, NOK, SEK, PLN, CZK, HUF, RON, AED, AUD, BRL, CAD, HKD, ILS, JPY, MXN, MYR, NZD, PHP, SGD, THB, TWD, ZAR.
Copy your API key
Choose Open Mollie API keys: Developers → API keys, for the website
profile you sell tickets with. Copy the Test API key (test_…) for a test
event or the Live API key (live_…) for a live one. An access token
(access_…) does not work.
Paste it
Enter API key and choose Connect Mollie. SeatLayer gives Mollie its webhook URL with every payment, so there is nothing to set up in Mollie.
Turn off bank transfer and pay-later methods such as Klarna for ticket sales. A bank transfer can take days to arrive, longer than seats are held, and pay-later methods wait for a capture SeatLayer does not make.
Paystack
Currencies: NGN, GHS, ZAR, KES, USD, XOF.
Copy your secret key
Choose Open Paystack API keys: Settings → API Keys & Webhooks. For a
test event, switch Paystack to Test Mode and copy the test secret key
(sk_test_…). For a live event, copy the live secret key (sk_live_…).
The public key (pk_…) does not work.
Add the webhook URL
On the same page, paste Your webhook URL as the Test Webhook URL or the Live Webhook URL, matching the key, and save.
Paste the secret key
Enter Secret key and choose Connect Paystack. Paystack signs its notifications with this key, so there is no second secret.
If Paystack does not answer when you connect and you have IP whitelisting on, turn it off: SeatLayer calls Paystack from many addresses.
Authorize.Net
Currencies: USD, CAD, GBP, EUR, AUD, NZD, DKK, NOK, PLN, SEK. Each account settles in the one currency its processor gives it, and the connection must use that currency.
Open API Credentials & Keys
Choose Open Authorize.Net and sign in to the Merchant Interface, then Account → Settings → Security Settings → General Security Settings → API Credentials & Keys. Use your sandbox account for a test event and your production account for a live one.
Get a Transaction Key and a Signature Key
Copy the API Login ID. Under Create New Key(s), choose New Transaction Key, submit and copy it; then do the same for New Signature Key. Authorize.Net shows each key once. A new key replaces the old one, so update any other system that uses it.
Paste all three
Enter API Login ID, Transaction Key (16 characters) and Signature Key (128 characters), pick the Currency, and choose Connect Authorize.Net.
SeatLayer adds its own webhook to your Authorize.Net account. A production account with Test Mode on is refused, because Authorize.Net keeps no record of test-mode sales. Turn Test Mode off under General Security Settings, then connect again.
Checkout.com
Currencies: USD, EUR, GBP, CAD, AUD, INR, AED, SAR, KWD, QAR, BHD, OMR, SGD, JPY, CHF, SEK, NZD, ZAR, MXN, BRL, CLP, COP, PEN, UYU, IDR, PHP, THB, VND, MYR, NGN, KES, UGX, TZS, RWF, XAF, XOF, EGP.
Create a secret key
Choose Open Checkout.com Dashboard, then Developers → Keys, and create a
secret key with the default permissions. A sandbox key starts with
sk_sbox_; a live key starts with sk_. Your client ID (cli_…) is under
Settings → Account structure. If you have not used Checkout.com’s hosted
payment page before, ask your Checkout.com contact to turn it on.
Add the webhook
In the same Dashboard: Developers → Webhooks → Create configuration. Paste
Your webhook URL, select Generate key next to the signature key and copy
it, then choose the events payment_captured, payment_refunded and
payment_refund_declined.
Paste them
Enter Secret key, Client ID, Webhook signature key (from step 2) and Your country (two letters, for example GB). Fill in Processing channel ID (optional) only if you have more than one. Pick the Currency and choose Connect Checkout.com.
The key and the client ID must come from the same account and environment.
iyzico
Currencies: TRY, USD, EUR, GBP, NOK, CHF.
Copy your API keys
Choose Open iyzico, then Settings → Merchant Settings, and choose Show
detail under API Keys. Use your sandbox panel (sandbox-merchant.iyzipay.com)
for a test event; its keys start with sandbox-. Use your live panel for a
live event.
Add the notification URL (optional)
Settings → Merchant Settings → Merchant Notifications: paste Your notification URL and save. It lets a payment confirm even if the buyer closes the page before coming back. If another system already uses that field, leave it as it is.
Paste both keys
Enter API key and Secret key, pick the Currency, and choose Connect iyzico.
If your checkout form offers bank transfer, ask iyzico to turn it off for ticket sales. A transfer can take days, longer than seats are held.
Braintree
Currencies: USD, CAD, GBP, EUR, AUD, NZD, CHF, DKK, NOK, SEK, PLN, CZK, HUF, RON, JPY, SGD, HKD, MYR, THB, PHP, IDR, VND, KRW, TWD, CNY, INR, AED, SAR, QAR, ILS, TRY, ZAR, EGP, NGN, GHS, KES, TZS, UGX, RWF, XAF, XOF, MXN, BRL, ARS, CLP, COP, PEN, UYU. Each Braintree merchant account settles in one of them.
Open your API keys
Choose Open Braintree and sign in to the Control Panel: sandbox for a test event, production for a live one. Click the gear icon, then API. Copy the public key, and click View to copy the private key. With no key yet, click Generate New API Key.
Find your merchant ID
Gear icon → Business. The merchant ID is at the top. Under Merchant Accounts you can see each merchant account and its currency.
Paste them
Enter Merchant ID, Public key and Private key, pick the Currency, and choose Connect Braintree. SeatLayer uses the merchant account in that currency. Fill in Merchant account ID (optional) only if you have more than one merchant account in it.
Optional: add the webhook
Gear icon → API → Webhooks → Create New Webhook. Paste Your webhook URL and tick Transaction Settled and Refund Failed. Card payments confirm without it. With it, SeatLayer hears about refunds you make in Braintree and refunds that fail later.
Buyers pay on a SeatLayer payment page that runs Braintree’s card form. Each payment is confirmed with Braintree before the sale.
Check the connection
When a connection is ready, the card shows Connected and the row reads Ready. A row can also read Not checked yet, Test events only or Cannot take payments yet; the last means the gateway refused the key or a permission is missing. Re-check, Replace key and Disconnect are on each row where they apply.
Assign the connection to an event
Open the event, then Setup → Checkout. Under Payment account, choose Use [gateway] for this event, for example Use Stripe for this event. The row changes to ✓ Ready. The connection’s mode and currency must match the event. Only gateways that take the event’s currency are listed; the ones you have not switched on yet appear below with Request. See Event setup for the rest of the Checkout screen.
Refunds made in your gateway dashboard
When you refund a payment in the gateway’s own dashboard, the gateway notifies SeatLayer and the order updates. A full refund puts the seats back on sale and the tickets stop scanning. A partial refund is recorded on the order and the seats stay sold, because SeatLayer cannot tell which seats a partial amount was for. SeatLayer acts only when the gateway reports the refund as completed; a pending refund changes nothing until then.
| Gateway | Refunds made in its dashboard sync back |
|---|---|
| Stripe, Razorpay, PayPal, Tap, Xendit, Flutterwave, Square, Mollie, Paystack, Authorize.Net, Checkout.com | Yes |
| Mercado Pago | Yes on live events. Mercado Pago sends no notifications for test payments. |
| Braintree | Only with the optional webhook from step 4 above. |
| iyzico | No. iyzico sends no refund notification. |
Where a refund does not sync, refund from the order in SeatLayer instead. If you already refunded in the gateway, record it with Refund or cancel… → Cancel without refund so the seats go back on sale. See Refunds and cancellations.