---
title: "Connect payments"
description: "Connect your own payment gateway on the Payments page, keep test and live side by side, and assign a connection to an event."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.seatlayer.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect payments

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.

Seven gateways are supported:

| Gateway | Regions |
|---|---|
| Stripe | Most countries |
| PayPal | Most countries |
| Razorpay | India |
| Tap | Middle East and the Gulf |
| Mercado Pago | Latin America |
| Xendit | Southeast Asia |
| Flutterwave | Africa |

Open **Settings → Payments**. Each gateway that is on for your account has a
card with **Connect** and its name, for example **Connect Stripe**. If the one
you want is listed under **More payment options**, choose **Request** and we
switch it on for your account; then connect it the same way. Every form also
asks for the currency your events are priced in, limited to the currencies that
gateway takes.

## Test and live

There is no mode switch. The keys decide the mode: a test key makes a test
connection, a live key makes a live one. You can keep both side by side, and one
connection per currency. Test events use a test connection and issue tickets
marked as not valid for entry.

## Stripe

1. **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](/billing/stripe-permissions/) for why each one is
   needed.
2. **Paste it**

   Paste the key into **Restricted or secret key** and choose **Connect
   Stripe**. The key is encrypted on save and cannot be read back.
3. **Nothing else to do**

   SeatLayer verifies the key with Stripe and creates the payment webhook on
   your account.

## Razorpay

1. **Generate API keys**

   Choose **Open Razorpay API keys** and generate a key pair.
2. **Create a webhook**

   In Razorpay, go to Account &amp; Settings → Webhooks → Add new webhook. Use
   the URL shown under **Your webhook URL** and subscribe to
   `payment.captured`, `payment.failed` and `refund.processed`.
3. **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

1. **Create an app in PayPal**

   Use a Sandbox app for test events and a Live app for live events. Choose
   **Open PayPal apps**.
2. **Accept payments in your event currency**

   Make sure the PayPal account accepts the currency your event is priced in.
3. **Paste the app's credentials**

   Enter **Client ID** and **Secret** and choose **Connect PayPal**. SeatLayer
   sets up PayPal's payment notifications for you.

## Tap

1. **Open your Tap API credentials**

   Choose **Open Tap dashboard** and copy your secret key.
2. **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

1. **Open your application's credentials**

   Choose **Open Mercado Pago Developers** and copy the Access Token.
2. **Paste the Access Token**

   Enter **Access Token** and choose **Connect Mercado Pago**. Each payment is
   read back from Mercado Pago to confirm it.

## Xendit

1. **Create a secret key in Xendit**

   Use a development key for test events and a production key for live events.
2. **Add the webhook URL**

   In Xendit, go to Settings → Webhooks and paste **Your webhook URL** for
   Payment session and Refund. Note the verification token.
3. **Paste both values**

   Enter **Secret key** and **Verification token (from step 2)**, then choose
   **Connect Xendit**.

## Flutterwave

1. **Copy your secret key from Flutterwave**

   Use the test key for test events and the live key for live events.
2. **Add the webhook URL**

   In Flutterwave, go to Settings → Webhooks, paste **Your webhook URL**,
   choose a secret hash and turn on retries.
3. **Paste both values**

   Enter **Secret key** and **Secret hash (from step 2)**, then choose
   **Connect Flutterwave**.

## Check the connection

When a connection is ready, the card shows **Connected** and the row reads
**Ready**. **Re-check**, **Replace key** and **Disconnect** are on each row.

## Assign the connection to an event

Open the event, then **Setup → 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.

## Refunds made in your gateway dashboard

Refunds you make in Stripe, PayPal or Razorpay sync back to SeatLayer
automatically: a full refund puts the seats back on sale, and a partial refund
leaves them sold. With other providers, refund from the order in SeatLayer, or
record an outside refund with **Refund or cancel… → Cancel without refund**.

## Request a gateway

PayPal, Tap, Mercado Pago, Xendit and Flutterwave appear under **More payment
options** until they are on for your account. An admin chooses **Request**
next to one; we enable it, and its card appears with the others. For a gateway
that is not listed, choose **Ask us**.

Source: https://docs.seatlayer.io/sell/connect-payments/index.mdx
