Skip to content

Connect payments

Connect one of 14 payment gateways on the Payments page, keep test and live side by side, and assign a connection to an event.

Updated View as Markdown

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.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close