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

# Test with a simulated terminal

> Create a simulated terminal on a sandbox account to test in-person payment flows without a physical terminal.

A simulated terminal lets you test in-person payments on a sandbox account without a physical terminal. You register it the same way as a physical terminal, but with a special serial number.

> [!NOTE]
>
> Simulated terminals are available on sandbox accounts (`T` prefix) only.

## Create a simulated terminal

[`POST /v1/accounts/{aid}/terminals`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_post)

Set `device_serial_number` to `SIMULATED-{account_id}-` followed by a 3-digit number, for example `SIMULATED-T12345678-001`.

```bash Request wrap theme={null}
curl -X POST https://api.dintero.com/v1/accounts/T12345678/terminals \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "device_serial_number": "SIMULATED-T12345678-001",
    "store_id": "oslo-center"
  }'
```

The terminal is `ACTIVE` immediately. You do not need to activate it.

Keep `terminal_id` from the response. Use it as `order.store.terminal_id` when you create a payment.

## Create a payment

Create a [terminal session](https://docs.dintero.com/docs/checkout/in-person/creating-terminal-session.md) with the simulated terminal's `terminal_id` in `order.store.terminal_id`. The simulated terminal answers automatically. Set `order.amount` to one of the [test amounts](#payment-responses) to choose the outcome.

[`POST /sessions-profile`](https://docs.dintero.com/api-reference/session/checkout_session_profile_post)

```bash Request wrap theme={null}
curl -X POST https://api.dintero.com/v1/accounts/T12345678/payments/sessions-profile \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "url": {
      "return_url": "https://yourpos.example.com/payment/return",
      "callback_url": "https://yourpos.example.com/payment/callback"
    },
    "order": {
      "amount": 39900,
      "currency": "NOK",
      "merchant_reference": "order-12345",
      "items": [
        {
          "id": "sku-coffee-001",
          "line_id": "1",
          "description": "Premium Coffee Beans 1kg",
          "quantity": 2,
          "amount": 39900,
          "vat_amount": 4275,
          "vat": 12
        }
      ],
      "store": {
        "id": "oslo-center",
        "terminal_id": "T12345678-T0010",
        "payout_destination_id": "seller-1"
      }
    },
    "configuration": {
      "channel": "in_store",
      "publish": [
        {
          "channel": "push",
          "type": "terminal"
        }
      ]
    },
    "profile_id": "default"
  }'
```

This example uses `399.00` NOK, so the payment is approved with a Visa card.

## Payment responses

A simulated terminal answers a payment automatically. The session amount decides the outcome and the card brand.

| Amount | Outcome |
| - | - |
| 9901.00 | The payment is declined. |
| 9902.00 | The terminal reports a different amount than requested, and the transaction fails. |
| 9903.00 | The terminal reports a different currency than requested. |
| 9904.00 | The terminal does not respond, and the transaction fails. |
| 9905.00 | The payment is approved with a BankAxept card. |
| 9906.00 | The payment is approved with a Mastercard card. |
| Any other amount | The payment is approved with a Visa card. |

> [!NOTE]
>
> Amounts are shown in major units. In the API, send them in minor units, for example `990100` for `9901.00`.

## Refunds and terminal operations

You can [refund](https://docs.dintero.com/api-reference/transactions/transactions_id_refund_post.md) a captured transaction from a successful simulated-terminal payment. For `seitatech.in_person` refunds, include `terminal_id`; the simulated terminal approves automatically.
You can also send [terminal operations](https://docs.dintero.com/docs/checkout/in-person/terminal-operations.md) to a simulated terminal.

The simulator does not provide failure scenarios for refunds or terminal operations, but invalid requests can still return API errors.

## Find simulated terminals

Filter by `device_model=SIMULATED`:

[`GET /v1/accounts/{aid}/terminals`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_get)

```bash Request wrap theme={null}
curl https://api.dintero.com/v1/accounts/T12345678/terminals?device_model=SIMULATED \
  -H "Authorization: Bearer <TOKEN>"
```


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