> ## 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.

# Terminal onboarding

> Set up payout destinations, stores, and terminals so the Dintero Checkout API can route in-person payments to a specific physical card reader.

Before you can charge a customer on a terminal, the terminal has to be linked to a store, and the store has to be linked to a payout destination. You can complete the whole onboarding in Backoffice, or automate the store and terminal steps via the management API.

**Backoffice**

**1. Onboard a payout destination**

The payout destination is the seller of record - the entity that receives the funds. KYC is a one-time step per legal entity.

1. Go to **Payout destination** and click the **+ Payout destination** button.
2. **Select a business**. Make sure the **country** is correct. Enter your own **Payout destination ID**, choose the **Payout frequency**, enter an email address (Optional. If an email is entered, Dintero will automatically send the recipient the KYC link after saving), and click **Save**.
3. After saving, a link is generated to complete KYC.
4. Open the link and complete the KYC form, including signing the agreement. The payout destination is ready when the status is **Approved**.

**2. Create a store**

A store represents a physical location. Stores are linked to one payout destination.

1. Go to **In-person payments**, this will default to the **Stores** page, and click the **+ Add Store** button.
2. Select the **Payout destination** you onboarded in Step 1, enter the **Contact details**, and click **Save**.
3. When the status of the store is **Active** (can take couple of hours), your store has been successfully added.

**3. Add a terminal**

Each terminal is connected to a single store. Connect the terminal to the internet first: it cannot sync with Dintero until it is online.

1. In Backoffice, go to **In-person payments**, then **Terminals**, and click the **+ Add Terminal** button.
2. Select the **Store**, enter the terminal's **Serial number**, and click **Save**.
3. The Terminals page shows the terminal with the status **Pending**. Once synced, the status is replaced with an **Activate terminal** button.
4. Click **Activate terminal** and **follow the on-screen instructions**.
5. When the status of your terminal is **Activated**, your terminal has been successfully added.

> **Set up the physical terminal (same instructions as Backoffice)**
>
> Backoffice shows these steps on screen when you click **Activate terminal**. Follow the instructions there, and use this as a reference if you need them outside Backoffice.
>
> **4. Connect to Wi-Fi**
>
> On the terminal
>
> 1. Turn on the terminal, swipe **↑ Up** on the display, and open the **iNfiniPay** app. The terminal installs the software and restarts.
>
> 2. Tap the **☰ Menu icon** in the top-right corner of the screen.
>
> 3. Go to **Network Settings** > **Internet**, toggle on **Wi-Fi**, select your network, and enter the password.
>
> > [!NOTE]
> >
> > On a terminal that has already been onboarded, the menu icon is hidden. See [Change the Wi-Fi network](https://docs.dintero.com/docs/checkout/in-person/terminal-troubleshooting.md#change-the-wi-fi-network).
>
> **5. Get settings**
>
> On the terminal
>
> Only needed if the terminal does not pick up its configuration on its own, or if its status is `ACTION_REQUIRED`.
>
> 1. Swipe **↑ Up** and **Tap the ☰ Menu icon twice** to access the menu options.
> 2. Go to **Innstillinger (Settings)** > **Service** > enter the **Service password** (ask Dintero for it) > **Hent Innstillinger (Get settings)**.
> 3. The terminal fetches the latest configuration, and automatically restarts.

**API**

**1. Onboard a payout destination**

Call the API

The payout destination is the seller of record - the entity that receives the funds. KYC is a one-time step per legal entity.

[`POST /accounts/{oid}/payout-destinations`](https://docs.dintero.com/api-reference/payout-destinations/aid_mgmnt_payout_destinations_post)

```http theme={null}
POST /v1/accounts/{oid}/payout-destinations
Authorization: Bearer <token>
Content-Type: application/json

{
  "payout_destination_id": "seller-1",
  "payout_reference": "My Company AS",
  "organization": {
    "organization_number": "923663487"
  },
  "address": {
    "country": "NO",
    "postal_place": "Oslo",
    "address_line": "Sommerkroveien 34"
  },
  "bank_accounts": [
    {
      "bank_account_number": "86011117947",
      "bank_account_currency": "NOK"
    }
  ],
  "form_submitter": {
    "email": "contact@example.com"
  }
}
```

The response contains the KYC link in `links`, under `rel: contract_url`:

```json Response theme={null}
{
  [...]
  "payout_destination_id": "seller-1",
  "case_status": "WAITING_FOR_DECLARATION",
  "links": [
    {
      "rel": "contract_url",
      "href": "https://example.dintero.com/kyc/..."
    }
  ]
}
```

Open that URL to complete the declaration form and sign the agreement.

> [!TIP]
>
> **Ready when** `case_status` is `ACTIVE`.
>
> Use [`GET /v1/accounts/{oid}/payout-destinations/{payout_destination_id}`](https://docs.dintero.com/api-reference/payout-destinations/aid_mgmnt_payout_destinations_get_by_id), or subscribe to the [`approval_payout_destination_update`](https://docs.dintero.com/api-reference/example-management-auth-events/example_approval_payout_destination_update_event) webhook.

**2. Create a store**

Call the API

A store represents a physical location. Stores are linked to one payout destination.

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

```http theme={null}
POST /v1/accounts/{aid}/stores
Authorization: Bearer <token>
Content-Type: application/json

{
  "store_id": "oslo-center",
  "store_name": "Oslo Center",
  "organization": {
    "organization_number": "923663487"
  },
  "payout_destination": {
    "payout_destination_id": "seller-1"
  },
  "phone_number": "+4799999999"
}
```

Keep **`store_id`** from the response (in this example, `oslo-center`). You need it in the next step.

> [!TIP]
>
> **Ready when** `status` is `ACTIVE` (can take couple of hours).
>
> Use [`GET /v1/accounts/{aid}/stores/{store_id}`](https://docs.dintero.com/api-reference/account-stores/aid_account_management_stores_sid_get).

**3. Add a terminal**

Call the API

Each terminal is connected to a single store.

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

```http theme={null}
POST /v1/accounts/{aid}/terminals
Authorization: Bearer <token>
Content-Type: application/json

{
  "device_serial_number": "158222607285",
  "store_id": "oslo-center"
}
```

Keep **`terminal_id`** from the response. The format is your Dintero account ID (`T` prefix for sandbox, `P` for production), a hyphen, then the terminal ID. For example `T12345678-T0010`. Use it as `order.store.terminal_id` when creating a session.

> [!TIP]
>
> **Ready when** `status` is `PENDING` or `ACTION_REQUIRED`.
>
> Use [`GET /v1/accounts/{aid}/terminals/{terminal_id}`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_termid_get).
>
> For what each status means, see [Terminal statuses](https://docs.dintero.com/docs/checkout/in-person/terminal-troubleshooting.md#terminal-statuses).

The terminal is registered, but not ready to take payments yet. Continue with the physical setup below.

**4. Connect to Wi-Fi**

On the terminal

1. Turn on the terminal, swipe **↑ Up** on the display, and open the **iNfiniPay** app. The terminal installs the software and restarts.
2. Tap the **☰ Menu icon** in the top-right corner of the screen.
3. Go to **Network Settings** > **Internet**, toggle on **Wi-Fi**, select your network, and enter the password.

> [!NOTE]
>
> On a terminal that has already been onboarded, the menu icon is hidden. See [Change the Wi-Fi network](https://docs.dintero.com/docs/checkout/in-person/terminal-troubleshooting.md#change-the-wi-fi-network).

**5. Get settings**

On the terminal

Only needed if the terminal does not pick up its configuration on its own, or if its status is `ACTION_REQUIRED`.

1. Swipe **↑ Up** and **Tap the ☰ Menu icon twice** to access the menu options.
2. Go to **Innstillinger (Settings)** > **Service** > enter the **Service password** (ask Dintero for it) > **Hent Innstillinger (Get settings)**.
3. The terminal fetches the latest configuration, and automatically restarts.

**6. Activate the terminal**

Call the API

The terminal has to be online before it can answer.

[`POST /v1/admin/terminals/{terminal_id}/activations`](https://docs.dintero.com/api-reference/terminals/admin_terminals_terminal_id_activations_post)

```http theme={null}
POST /v1/accounts/{aid}/payments/admin/terminals/T12345678-T0010/activations
Authorization: Bearer <token>
```

The call returns immediately, and the terminal is activated in the background.

> [!TIP]
>
> **Ready when** `status` is `ACTIVE`.
>
> Use [`GET /v1/accounts/{aid}/terminals/{terminal_id}`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_termid_get).
>
> If activation does not complete, the terminal returns to `ACTION_REQUIRED` with `status_reason` `START_ACTIVATION`. Check that the terminal is online and call the endpoint again. See [Terminal statuses](https://docs.dintero.com/docs/checkout/in-person/terminal-troubleshooting.md#terminal-statuses).

***

## API details

> **Track KYC approval**
>
> * **Webhook:** subscribe to `approval_payout_destination_update`. The payout destination is ready when `case_status` is `ACTIVE`.
> * **Polling:** [`GET /v1/accounts/{aid}/management/settings/approvals/payout-destinations`](https://docs.dintero.com/api-reference/approvals/aid_management_settings_approvals_payout_destinations_get)
>
> For more detail on the KYC flow and reminder emails, see [Add sellers and payout destinations](https://docs.dintero.com/docs/checkout/split-payment/add-payout-destinations.md).

> **Store identifiers and fields**
>
> A store has two identifiers:
>
> * `store_id` - the identifier you send. Used as `order.store.id` in checkout sessions. If you omit it, Dintero generates one.
> * `id` - Dintero-generated (for example `P12345678-0026`).
>
> When a store is linked to an active payout destination, address, phone number, and other fields are set automatically from the validated organization data, and you cannot set a custom address.
>
> The store's `organization.organization_number` must match the organization on the payout destination.

> **Inspect a terminal**
>
> * [`GET /v1/accounts/{aid}/terminals/{terminal_id}`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_termid_get) - one terminal, including its status.
> * [`GET /v1/accounts/{aid}/terminals`](https://docs.dintero.com/api-reference/account-terminals/aid_account_management_terminals_get) - all terminals on the account.
>
> For what each status means, see [Terminal statuses](https://docs.dintero.com/docs/checkout/in-person/terminal-troubleshooting.md#terminal-statuses).

> **Testing**
>
> In test, use a [test bank account number](https://docs.dintero.com/docs/checkout/testdata/approvals/bank-accounts.md) (the example above uses `86011117947`), and set `payout_destination_description` to `AUTO_APPROVE` to skip the KYC flow.
>
> See [Auto-approve sellers](https://docs.dintero.com/docs/checkout/testdata/approvals/auto-approve.md).

## Next steps

With the payout destination, store, and terminal in place, you can now [Create a terminal session](https://docs.dintero.com/docs/checkout/in-person/creating-terminal-session.md).


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