# List payment methods

List catalog payment methods for the authenticated tenant.

Returns a paginated list of catalog instruments. Bank-connection rows are omitted. Empty Default instruments with no IBAN and no transactions are hidden unless you filter by counterparty or isDefault=true. Filters combine with AND.


- HTTP method: `GET`
- Path: `/api/v1/payment-methods`
- URL: `https://api.invunion.com/api/v1/payment-methods`
- Required scope: `payment_methods:read`
- HTML docs: https://www.invunion.com/knowledge-base/api/list-payment-methods/
- Markdown docs: https://www.invunion.com/knowledge-base/api/list-payment-methods.md


## Query parameters

| Name | Type | Required | Description | Allowed values | Example |
| --- | --- | --- | --- | --- | --- |
| `page` | integer | optional | Page number. Default 1. |  | `1` |
| `pageSize` | integer | optional | Page size. Default 20, maximum 100. |  | `20` |
| `sortBy` | string, no maximum | optional | Sort column. Default name. | `code`, `name`, `type`, `iban`, `currency`, `account_type`, `bank_name`, `bank_country`, `status`, `last_sync_at`, `created_at`, `updated_at`, `tx_count` |  |
| `sortOrder` | string, no maximum | optional | Sort direction. Default asc. | `asc`, `desc` |  |
| `search` | string, no maximum | optional | Case-insensitive match on code, name, IBAN, BIC, bank_name, or identifier. |  | `Leones` |
| `status` | string, no maximum | optional | Filter by instrument status. | `active`, `inactive`, `error` |  |
| `currency` | string, max 3 | optional | ISO 4217 currency code. |  | `EUR` |
| `type` | string, no maximum | optional | Filter by instrument type. | `bank_account`, `credit_card`, `paypal`, `wero`, `twint`, `crypto_wallet`, `other` |  |
| `counterpartyId` | string, no maximum | optional | Only instruments linked to this counterparty code (`account_code`). |  | `CPT-042` |
| `isDefault` | boolean | optional | If true, only default instruments. If false, only non-default. | `true`, `false` |  |
| `hasCounterparty` | boolean | optional | If true, only instruments linked to at least one counterparty. If false, only unlinked instruments. | `true`, `false` |  |
| `associationMode` | string, no maximum | optional | Filter by exclusive or shared association. | `exclusive`, `shared` |  |


## Errors

| Error | HTTP code | Description |
| --- | --- | --- |
| `Missing Bearer token` | `401` | The Authorization header is missing or is not a Bearer token. |
| `Invalid or revoked API key` | `401` | The API key is unknown, malformed, expired, or has been revoked. |
| `API key is missing scope payment_methods:read` | `403` | The key does not include payment_methods:read. A write scope does not imply the matching read scope. |
| `Too many requests, please try again later` | `429` | Wait and retry. The Retry-After header is the number of seconds to wait. |
| `Tenant ID required` | `400` | The authenticated credential is not bound to a tenant. |
| `Internal server error` | `500` | Unexpected server error. The JSON body includes correlationId. Retry with backoff. |

## Request (curl)

```bash
curl --request GET \
  --url https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20 \
  --header 'accept: application/json' \
  --header 'authorization: Bearer uk_live_YOUR_API_KEY'
```

## Request (Python)

```python
import requests

url = "https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20"
headers = {
    "Accept": "application/json",
    "Authorization": "Bearer uk_live_YOUR_API_KEY",
}
response = requests.get(url, headers=headers)
print(response.json())
```

## Request (Ruby)

```ruby
require 'net/http'
require 'json'
require 'uri'

uri = URI("https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Accept'] = 'application/json'
request['Authorization'] = 'Bearer uk_live_YOUR_API_KEY'
response = http.request(request)
puts response.body
```

## Request (JavaScript)

```javascript
const response = await fetch("https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer uk_live_YOUR_API_KEY"
  },
});
const data = await response.json();
```

## Request (Go)

```go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Accept", "application/json")
	req.Header.Set("Authorization", "Bearer uk_live_YOUR_API_KEY")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
```

## Request (Node)

```javascript
const response = await fetch("https://api.invunion.com/api/v1/payment-methods?page=1&pageSize=20", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer uk_live_YOUR_API_KEY"
  },
});
console.log(await response.json());
```

## Success (200)

```json
{
  "success": true,
  "data": {
    "items": [
      {
        "id": "8a1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
        "tenant_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "counterparty_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "code": "PM-001",
        "type": "bank_account",
        "name": "Leones Cars EUR",
        "iban": "FR7630006000011234567890189",
        "bic": "BNPAFRPP",
        "currency": "EUR",
        "account_type": "checking",
        "bank_name": "BNP Paribas",
        "bank_country": "FR",
        "identifier": null,
        "status": "active",
        "association_mode": "exclusive",
        "purpose": "catalog",
        "instrument_role": null,
        "is_default": false,
        "counterparty_name": "Leones Cars",
        "counterparty_code": "CPT-042",
        "counterparties": [
          {
            "counterparty_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            "counterparty_name": "Leones Cars",
            "counterparty_code": "CPT-042"
          }
        ],
        "tx_count": 12,
        "last_transaction_date": "2026-09-12",
        "created_at": "2026-03-04T12:40:56.656Z",
        "updated_at": "2026-09-12T08:15:22.110Z",
        "metadata": {
          "erp_pm": "BANK-042"
        }
      },
      {
        "id": "6c8b02d3-29f5-4e70-b9d2-0f3e6a1c84b2",
        "tenant_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
        "counterparty_id": "4b7a91c2-18e4-4d6f-a8c1-9e2d5f0b73a1",
        "code": "PM-002",
        "type": "paypal",
        "name": "Grove Street Garage PayPal",
        "iban": null,
        "bic": null,
        "currency": "USD",
        "account_type": null,
        "bank_name": null,
        "bank_country": "US",
        "identifier": "accounts@grovestreet.example",
        "status": "active",
        "association_mode": "exclusive",
        "purpose": "catalog",
        "instrument_role": null,
        "is_default": false,
        "counterparty_name": "Grove Street Garage",
        "counterparty_code": "CPT-043",
        "counterparties": [
          {
            "counterparty_id": "4b7a91c2-18e4-4d6f-a8c1-9e2d5f0b73a1",
            "counterparty_name": "Grove Street Garage",
            "counterparty_code": "CPT-043"
          }
        ],
        "tx_count": 4,
        "last_transaction_date": "2026-09-08",
        "created_at": "2026-04-18T09:12:00.000Z",
        "updated_at": "2026-09-08T14:22:11.000Z",
        "metadata": {
          "erp_pm": "PAYPAL-1904"
        }
      }
    ],
    "total": 2,
    "page": 1,
    "pageSize": 20,
    "hasMore": false
  }
}
```
