> 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/payments.md).

# Choosing a channel

Which channel to use, and which transaction types each one supports.

The API exposes one set of transaction endpoints across three channels. The channel you pick determines which endpoints you call and which transaction types are available to you.

```mermaid
flowchart TD
    Q1{"How does the customer pay?"}
    Q1 -->|"In person, on a terminal"| CP["Card present<br/>physical terminal, pmt_trm_"]
    Q1 -->|"Online, with a card"| Q2{"How will you embed the form?"}
    Q1 -->|"Online, from a US bank account"| ACH["ACH bank transfer<br/>virtual ACH terminal, pmt_ach_"]
    Q1 -->|"With a payment method stored earlier"| TK["Token sale or auth<br/>pmt_tkn_"]
    Q2 -->|"The iframe"| HPF["Hosted Payment Form"]
    Q2 -->|"The web component in your page"| SDK["Payment SDK"]
    HPF --> CNP["Card not present<br/>virtual terminal, pmt_vrt_"]
    SDK --> CNP
```

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Card present</strong></td><td>In person, on a Verifone T650c or T650p terminal.</td><td><a href="/payments/card-present.md">Card present</a></td></tr><tr><td><strong>Card not present</strong></td><td>Online, through a Hosted Payment Form or the Payment SDK.</td><td><a href="/payments/card-not-present.md">Card not present</a></td></tr><tr><td><strong>ACH bank transfer</strong></td><td>US bank debits, settled asynchronously.</td><td><a href="/payments/ach.md">ACH bank transfers</a></td></tr></tbody></table>

## Transaction types by channel

| Transaction type                                              | Card present | Card not present | ACH            |
| ------------------------------------------------------------- | ------------ | ---------------- | -------------- |
| **Sale** - combined authorization and capture                 | Yes          | Yes              | Yes            |
| **Authorization** - reserve funds without capturing           | Yes          | Yes              | No             |
| **Capture** - complete a previous authorization               | Yes          | Yes              | Not applicable |
| **Refund** - reverse a previous sale                          | Yes          | Yes              | Yes            |
| **Void** - cancel a transaction still in the current batch    | Yes          | Yes              | **No**         |
| **Token sale** - charge a stored payment method               | Yes          | Yes              | Yes            |
| **Unreferenced refund** - refund with no original transaction | Unavailable  | Unavailable      | No             |

{% hint style="warning" %}
ACH is the exception in three places: it cannot be voided (use a refund instead), it has no authorization-only transaction, and it has no separate capture step. See [ACH bank transfers](/payments/ach.md).
{% endhint %}

## What the transaction types mean

* **Authorization** - Verification with the issuer that the card is valid for payment. The authorization amount is reserved, but not captured or settled.
* **Capture** - Complete a previously authorized transaction. The cardholder is billed for the transaction, and the transaction is settled to the merchant.
* **Sale** - Combined authorization and capture in a single step.
* **Refund** - Process reversal of a previous sale transaction. This automatically performs a void if the transaction is still in the current batch, or a refund if it has already settled. A sale or capture reports how much can still be refunded in `refundableAmount` - see [Checking what can still be refunded](/payments/transaction-retrieval.md#checking-what-can-still-be-refunded).
* **Void** - Cancel a previously completed transaction (sale, authorization, or capture) if it is still in the current batch, typically the same day.

{% hint style="info" %}
You do not need to decide between void and refund. Call refund, and the API voids the transaction if it is still in the current batch and refunds it if it has already settled.
{% endhint %}

## Cutting across every channel

* [Tokenization](/payments/tokenization.md) - store a card once and charge it from any channel
* [Payment methods](/payments/payment-methods.md) - the terminals, forms, and tokens you charge against
* [Account holders](/payments/account-holders.md) - group stored payment methods under a customer
* [Retrieving transactions](/payments/transaction-retrieval.md) - resolve an outcome you did not receive
