> For the complete documentation index, see [llms.txt](https://docs.omni.integratedcommerce.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.omni.integratedcommerce.io/payments/payment-methods.md).

# Payment methods

The terminals, hosted forms, and tokens you charge against.

The API uses "Payment Methods" as the foundation for processing transactions. Each payment method has a unique `paymentMethodId` that represents a specific way to accept payments:

* **Physical Terminals** (`pmt_trm_`) - For Card Present, in-person transactions
* **Virtual Terminals** (`pmt_vrt_`) - For Card Not Present, online card transactions
* **Virtual ACH Terminals** (`pmt_ach_`) - For online ACH bank transfers (US only)
* **Tokens** (`pmt_tkn_`) - A payment method a customer has already provided, stored securely for card-on-file, recurring, or future transactions

A token is not only a card. Any payment method a customer provides can be stored as a token: a card presented on a terminal, a card entered online, or an ACH bank account. A token created from an ACH account is charged with the same token endpoints as a card token, within the [limits of ACH](/payments/ach.md). Read the `type` field to tell payment methods apart rather than parsing the ID prefix.

## Listing your payment methods

When you call the `GET /payment-methods` endpoint, the API returns a list of all payment methods available to your account. This includes physical terminals and virtual card or bank-transfer payment methods. It does not include tokens; use `GET /payment-methods/account-holder/{accountHolderId}` to list an account holder's tokens.

Each payment method includes details such as its ID, type (`Physical`, `Virtual`, `VirtualAch`, or `Token`), currency, and description when available. The response does not expose a default flag. This information helps you determine which payment method to use for different transaction scenarios.

{% hint style="info" %}
A payment method carries its own currency. The transaction inherits it, which is why you do not pass a currency on the transaction request itself. To take both USD and CAD, you need a payment method for each.
{% endhint %}

## Endpoints

| Operation                                | Endpoint                                                |
| ---------------------------------------- | ------------------------------------------------------- |
| List all payment methods                 | `GET /payment-methods`                                  |
| List an account holder's payment methods | `GET /payment-methods/account-holder/{accountHolderId}` |
| Create a token from a terminal           | `POST /payment-methods/physical`                        |
| Create a token online                    | `POST /payment-methods/virtual`                         |
| Remove a token                           | `DELETE /payment-methods/token/{id}`                    |

## Scope

An API key grants access only to the payment methods owned by its merchant. A `paymentMethodId` belonging to a different merchant returns the same not-found response as one that does not exist. See [Authentication](/get-started/authentication.md#resource-scope).

## Related

* [Tokenization](/payments/tokenization.md)
* [Account holders](/payments/account-holders.md)
