# Payment methods

> List the card providers your buyers can pay with, which ones you turned off, each one's minimum and where it serves, and what Smart Routing would offer for an amount, so your own checkout shows the same choices.

Source: https://railbed.com/docs/api/payment-methods/ · Updated: 2026-11-05 · Railbed by MediaGlobe developer docs

For AI assistants: the index of every docs page, with the rules for an integration, is https://railbed.com/docs/llms.txt

## The payment method object

A payment method is one card provider your buyers can pay through. The list holds every card provider Railbed offers, in a fixed order, including the ones you turned off under [Integrations → Card providers](https://app.railbed.io/integrations) in the dashboard. A provider is offered to buyers only while its `status` is `available` and `merchant_off` is `false`.

| Field | Type | Description |
|---|---|---|
| `id` | string | The provider's id, such as `stripe`. The same id names it on a [started session](https://railbed.com/docs/api/checkout-sessions.md#start-a-checkout-session)'s `providers` |
| `name` | string | Its name, as buyers see it |
| `note` | string | How buyers pay with it, as the buyer's list says |
| `status` | string | `available`, or `unavailable` while it's down, paused by Railbed or not working. In Live mode, Apple Pay and Google Pay stay `unavailable` until your payout wallet is an ordinary wallet (not a smart contract wallet) |
| `minimum` | object or null | Its smallest payment in its own currency, as `{ amount, currency }`, or `null` when it isn't known. Apple Pay and Google Pay show today's line, which moves with network costs |
| `regions` | array or null | Where its buyers must be, such as `["US"]`, or `null` for no known limit |
| `merchant_off` | boolean | `true` when you turned it off. Buyers are never offered it, in either mode |

Example: A payment methods list, shortened to three providers · response 200 OK

```json
{
  "object": "list",
  "data": [
    {
      "id": "stripe",
      "name": "Stripe",
      "note": "Card, Apple Pay or Google Pay",
      "status": "available",
      "minimum": {
        "amount": "2.00",
        "currency": "USD"
      },
      "regions": [
        "US",
        "EU"
      ],
      "merchant_off": false
    },
    {
      "id": "paypal",
      "name": "PayPal",
      "note": "PayPal balance or card",
      "status": "available",
      "minimum": {
        "amount": "5.00",
        "currency": "USD"
      },
      "regions": [
        "US"
      ],
      "merchant_off": true
    },
    {
      "id": "cashapp",
      "name": "Cash App",
      "note": "Cash App balance or card",
      "status": "available",
      "minimum": {
        "amount": "2.00",
        "currency": "USD"
      },
      "regions": [
        "US"
      ],
      "merchant_off": false
    }
  ]
}
```

## List payment methods

`GET /v1/payment_methods`

Returns every card provider in the key's mode. Test mode reads a fixed list, so its answers don't change; Live mode reads the current one.

| Parameter | Type | Description |
|---|---|---|
| `amount` | string | A decimal string from `"1.00"` to `"100000.00"`. With it, the answer adds `offered` |
| `currency` | string | With `amount`: `USD`, `EUR`, `GBP`, `CAD` or `AUD`. Default `USD` |
| `country` | string | With `amount`: the buyer's two-letter country, such as `US`, if you know it. Never your server's own |

Example: cURL

```bash
curl "https://pay.railbed.io/v1/payment_methods?amount=25.00&currency=USD&country=US" \
  -H "Authorization: Bearer $RAILBED_SECRET_KEY"
```

Example: Node\.js

```js
const methods = await fetch('https://pay.railbed.io/v1/payment_methods?amount=25.00&currency=USD&country=US', {
  headers: { Authorization: `Bearer ${process.env.RAILBED_SECRET_KEY}` },
}).then((r) => r.json());
// methods.offered: what a buyer paying 25.00 USD from the US would see, best first.
```

Example: Python

```python
methods = requests.get(
    "https://pay.railbed.io/v1/payment_methods",
    params={"amount": "25.00", "currency": "USD", "country": "US"},
    headers={"Authorization": f"Bearer {os.environ['RAILBED_SECRET_KEY']}"},
    timeout=15,
).json()
```

With `amount`, `offered` is what Smart Routing would offer a buyer for that amount right now, best first, at most eight, each with `id`, `name`, `note` and `recommended`. It leaves out the providers you turned off and those that can't take the amount, the currency or the buyer's country. Nothing is created and no payment is started. It's a preview, not a promise: [starting a session](https://railbed.com/docs/api/checkout-sessions.md#start-a-checkout-session) decides again, and the provider decides at hand-off.

Example: Response with an amount, shortened · response 200 OK

```json
{
  "object": "list",
  "data": [
    {
      "id": "stripe",
      "name": "Stripe",
      "note": "Card, Apple Pay or Google Pay",
      "status": "available",
      "minimum": {
        "amount": "2.00",
        "currency": "USD"
      },
      "regions": [
        "US",
        "EU"
      ],
      "merchant_off": false
    },
    {
      "id": "paypal",
      "name": "PayPal",
      "note": "PayPal balance or card",
      "status": "available",
      "minimum": {
        "amount": "5.00",
        "currency": "USD"
      },
      "regions": [
        "US"
      ],
      "merchant_off": true
    },
    {
      "id": "cashapp",
      "name": "Cash App",
      "note": "Cash App balance or card",
      "status": "available",
      "minimum": {
        "amount": "2.00",
        "currency": "USD"
      },
      "regions": [
        "US"
      ],
      "merchant_off": false
    }
  ],
  "offered": [
    {
      "id": "stripe",
      "name": "Stripe",
      "note": "Card, Apple Pay or Google Pay",
      "recommended": true
    },
    {
      "id": "coindisco",
      "name": "Coindisco",
      "note": "Card, through Coindisco",
      "recommended": false
    },
    {
      "id": "cashapp",
      "name": "Cash App",
      "note": "Cash App balance or card",
      "recommended": false
    }
  ]
}
```

| Error | Cause |
|---|---|
| `400 invalid_amount` | `amount` isn't a decimal string from `"1.00"` to `"100000.00"`, or `currency` or `country` was sent without it |
| `400 invalid_currency` | `currency` isn't one of the five |
| `400 invalid_country` | `country` isn't a two-letter code |

## Turning providers off

You turn providers off in the dashboard, under **Integrations** → **Card providers**, with **Offer to buyers**. Only the account's owner can change it, and the change applies to both modes and to every way buyers pay: checkout pages, payment links, sessions you create here, Shopify and WooCommerce. At least one card provider stays on.

Checkouts and stores set to send buyers to the provider you're turning off are moved in the same step, to Smart Routing or another provider you choose; keeping the provider on leaves them as they are.

Turning providers off also changes the [provider minimums](https://railbed.com/docs/api/checkout-sessions.md#provider-minimums) your amounts are checked against: only the providers you offer count, so the smallest payment you can take may rise. A checkout later set to send buyers to one provider you turned off sends them to Smart Routing's pick instead when it falls back, and stops them when it doesn't.

## Access

Listing payment methods needs the `payments:read` [scope](https://railbed.com/docs/api.md#scopes), which **Read only** keys have.
