---
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."
---

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

<Steps>
  <Step title="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.
  </Step>
  <Step title="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.
  </Step>
  <Step title="Nothing else to do">
    SeatLayer verifies the key with Stripe and creates the payment webhook on
    your account.
  </Step>
</Steps>

## Razorpay

<Steps>
  <Step title="Generate API keys">
    Choose **Open Razorpay API keys** and generate a key pair.
  </Step>
  <Step title="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`.
  </Step>
  <Step title="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**.
  </Step>
</Steps>

## PayPal

<Steps>
  <Step title="Create an app in PayPal">
    Use a Sandbox app for test events and a Live app for live events. Choose
    **Open PayPal apps**.
  </Step>
  <Step title="Accept payments in your event currency">
    Make sure the PayPal account accepts the currency your event is priced in.
  </Step>
  <Step title="Paste the app's credentials">
    Enter **Client ID** and **Secret** and choose **Connect PayPal**. SeatLayer
    sets up PayPal's payment notifications for you.
  </Step>
</Steps>

## Tap

<Steps>
  <Step title="Open your Tap API credentials">
    Choose **Open Tap dashboard** and copy your secret key.
  </Step>
  <Step title="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.
  </Step>
</Steps>

## Mercado Pago

<Steps>
  <Step title="Open your application's credentials">
    Choose **Open Mercado Pago Developers** and copy the Access Token.
  </Step>
  <Step title="Paste the Access Token">
    Enter **Access Token** and choose **Connect Mercado Pago**. Each payment is
    read back from Mercado Pago to confirm it.
  </Step>
</Steps>

## Xendit

<Steps>
  <Step title="Create a secret key in Xendit">
    Use a development key for test events and a production key for live events.
  </Step>
  <Step title="Add the webhook URL">
    In Xendit, go to Settings → Webhooks and paste **Your webhook URL** for
    Payment session and Refund. Note the verification token.
  </Step>
  <Step title="Paste both values">
    Enter **Secret key** and **Verification token (from step 2)**, then choose
    **Connect Xendit**.
  </Step>
</Steps>

## Flutterwave

<Steps>
  <Step title="Copy your secret key from Flutterwave">
    Use the test key for test events and the live key for live events.
  </Step>
  <Step title="Add the webhook URL">
    In Flutterwave, go to Settings → Webhooks, paste **Your webhook URL**,
    choose a secret hash and turn on retries.
  </Step>
  <Step title="Paste both values">
    Enter **Secret key** and **Secret hash (from step 2)**, then choose
    **Connect Flutterwave**.
  </Step>
</Steps>

## 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**.