> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ionicfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# In-person payments

> Take card payments at the counter through the same API you use online, and build against simulated terminals before hardware arrives.

Bring your counter and your website onto one payments platform. Your
point-of-sale software takes a card at the counter through the same API it uses
online. Your backend creates a [PaymentIntent](/concepts/key-concepts#how-the-objects-connect) for
the sale and sends it to a specific terminal. The buyer presents a card, the
terminal selects the eligible payment option and prompts for a PIN when PIN
debit applies, and your backend reads the result.

Every test account includes ready simulated terminals, so you can build and
automate the full payment flow before any hardware arrives. Physical terminals
use the same object, the same fields, and the same payment call.

## When to use in-person payments

| Situation | Use |
| - | - |
| A cardholder presents a card at an attended checkout | [Accept in-person terminal payments](/guides/in-person-payments) |
| A merchant needs hardware for a new location | [Request physical hardware](/guides/in-person-payments#request-physical-hardware) |
| You test your point-of-sale integration without hardware | [Test without physical hardware](/guides/in-person-payments#test-without-physical-hardware) |
| The buyer pays online | [Checkout](/checkout/overview) or [Ionic Blocks](/blocks/overview) |

## What you can do

| Capability | How it works |
| - | - |
| Take a card-present payment | Create a PaymentIntent, then process it on a terminal by its `tmr_` ID. |
| Follow every attempt | Each attempt returns a terminal payment with its own status and failure codes. |
| Cancel an active attempt | Request cancellation, then keep reading the status until the attempt finishes. |
| Refund at the counter | Send `terminal_id` to run a card-present refund on that terminal. Its receipt prints there when automatic refund receipts are on. |
| Print refund receipts | Print a refund receipt on a terminal on request. |
| Manage hardware | Create locations, request physical terminals, and read each terminal's setup, connection, and capability states. |
| Track batches | Refresh, list, and inspect terminal batches and settlement profiles. Webhook events report when a batch closes, reconciles, or needs attention. |
| Test deterministically | Simulated terminals approve, decline, or delay by profile. Test helpers override one payment or batch. |

## Start here

<CardGroup cols={2}>
  <Card title="Accept in-person terminal payments" icon="cash-register" href="/guides/in-person-payments">
    Create a PaymentIntent, process it on a simulated terminal, and handle every status.
  </Card>

  <Card title="The Terminal object" icon="tablet-screen-button" href="/concepts/terminal-object">
    Locations, provisioning, and the three independent states of a terminal.
  </Card>
</CardGroup>

## Availability

* Terminal payments use USD and automatic capture.
* Simulated terminals exist in [test mode](/concepts/key-concepts#test-mode-and-live-mode). Ionic assigns physical terminals
  through a provisioning request, in test or live mode.
* Refunds on the terminal are turned on per account by Ionic, separately in
  test and live mode.
* Run acceptance testing on an Ionic-assigned physical test terminal before
  enabling production hardware.
* Platforms run in-person payments for [connected accounts](/guides/connect-overview) with
  `Ionic-Account`. See
  [In-person payments for connected accounts](/guides/connect-in-person-payments).

## Guides

| Guide | Use it to |
| - | - |
| [Accept in-person terminal payments](/guides/in-person-payments) | Request hardware, test with simulated terminals, and run the payment flow. |
| [The Terminal object](/concepts/terminal-object) | Understand locations, provisioning, terminal states, and refund receipts. |
| [Refunds, captures, and cancellations](/guides/refunds-captures) | Refund a completed payment. |
| [Webhooks](/webhooks/overview) | Receive payment, refund, and batch events. |

## API reference

| Resource | Endpoints |
| - | - |
| Terminal payments | [Process a PaymentIntent](/api-reference/terminal-payments/process-a-paymentintent-on-a-terminal), [retrieve](/api-reference/terminal-payments/retrieve-a-terminal-payment), [request cancellation](/api-reference/terminal-payments/request-cancellation-of-an-active-terminal-payment), [print a refund receipt](/api-reference/terminal-payments/print-a-refund-receipt-on-a-terminal) |
| Terminals | [List](/api-reference/terminals/list-terminals), [retrieve](/api-reference/terminals/retrieve-a-terminal), [check connection](/api-reference/terminals/check-a-terminals-connection) |
| Terminal provisioning | [List options](/api-reference/terminal-provisioning/list-terminal-provisioning-options), [request hardware](/api-reference/terminal-provisioning/request-physical-terminal-hardware), [list requests](/api-reference/terminal-provisioning/list-terminal-provisioning-requests), [retrieve a request](/api-reference/terminal-provisioning/retrieve-a-terminal-provisioning-request) |
| Terminal locations | [Create](/api-reference/terminal-locations/create-a-terminal-location), [list](/api-reference/terminal-locations/list-terminal-locations), [retrieve](/api-reference/terminal-locations/retrieve-a-terminal-location), [update](/api-reference/terminal-locations/update-a-terminal-location) |
| Terminal batches | [Refresh current batches](/api-reference/terminal-batches/refresh-a-terminals-current-batches), [list](/api-reference/terminal-batches/list-terminal-batches), [retrieve](/api-reference/terminal-batches/retrieve-a-terminal-batch), [list items](/api-reference/terminal-batches/list-terminal-batch-items), [list settlement profiles](/api-reference/terminal-batches/list-terminal-settlement-profiles), [retrieve a settlement profile](/api-reference/terminal-batches/retrieve-a-terminal-settlement-profile) |
| Terminal testing | [Override a payment scenario](/api-reference/terminal-testing/override-a-terminal-payment-scenario), [configure a batch scenario](/api-reference/terminal-testing/configure-a-terminal-batch-scenario) |
| [Payment intents](/api-reference/payment-intents) | [Create](/api-reference/payment-intents/create-a-payment-intent), [retrieve](/api-reference/payment-intents/retrieve-a-payment-intent) |
| [Refunds](/api-reference/refunds) | [Create](/api-reference/refunds/create-a-refund), [retrieve](/api-reference/refunds/retrieve-a-refund) |

Ionic sends `terminal_batch.closed`, `charge.settled`, `refund.settled`, and
the rest of the [terminal batch events](/webhooks/events#terminal-batches).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.