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

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

<Tabs>
  <Tab title="Backoffice">
    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**.
  </Tab>

  <Tab title="Management API">
    Create a payout destination with [`POST /accounts/{aid}/management/settings/approvals/payout-destinations`](/management-auth-api/approvals/aid_management_settings_approvals_payout_destinations_post).

    ```http theme={null}
    POST /accounts/{aid}/management/settings/approvals/payout-destinations
    Authorization: Bearer <token>
    Content-Type: application/json

    {
      "payout_destination_id": "my-seller",
      "payout_reference": "My Company AS",
      "organization_number": "923663487",
      "country_code": "NO",
      "bank_accounts": [
        {
          "bank_account_number": "12345678901",
          "bank_account_currency": "NOK"
        }
      ],
      "form_submitter": {
        "email": "contact@example.com"
      }
    }
    ```

    Open the URL in the response `links` array to complete the declaration form and sign the agreement.

    Track approval status by:

    * **Webhook:** subscribe to `approval_payout_destination_update`. The payout destination is ready when `case_status` is `ACTIVE`.
    * **Polling:** [`GET /accounts/{aid}/management/settings/approvals/payout-destinations`](/management-auth-api/approvals/aid_management_settings_approvals_payout_destinations_get)
  </Tab>
</Tabs>

For more detail on the KYC flow and reminder emails, see [Add sellers and payout destinations](/docs/checkout/split-payment/add-payout-destinations).

## Step 2: Create a store

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

<Tabs>
  <Tab title="Backoffice">
    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**.
  </Tab>

  <Tab title="Management API">
    Create a store with [`POST /v1/accounts/{aid}/stores`](/management-auth-api/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"
      }
    }
    ```

    The response returns two identifiers:

    * `store_id` - the merchant identifier you sent, used as `order.store.id` in checkout sessions.
    * `id` - a Dintero-generated identifier (for example `P11223351-0026`). You'll need this when registering a terminal.

    <Info>
      When a store is linked to an active payout destination, address, phone number, and other fields are set automatically from the validated organization data. The store's `organization.organization_number` must match the organization on the payout destination.
    </Info>
  </Tab>
</Tabs>

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

### 3.1 Connect the terminal to Wi-Fi (new 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 already has been onboarded, the menu icon is hidden and the network settings sit behind the service menu. See [Change the Wi-Fi network](/docs/checkout/in-person/terminal-troubleshooting#change-the-wi-fi-network).
</Note>

### 3.2 Then add a terminal with Dintero:

<Tabs>
  <Tab title="Backoffice">
    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 **Syncing**. 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 **Active**, your terminal has been succesfully added.
  </Tab>

  <Tab title="Management API">
    Register a terminal with [`POST /v1/accounts/{aid}/terminals`](/management-auth-api/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": "P11223351-0026"
    }
    ```

    <Warning>
      The `store_id` field on this endpoint expects the **store's `id`** from the create-store response (for example `P11223351-0026`), not the merchant `store_id`. Subsequent reads of the terminal will return the merchant `store_id` (the backend translates it).
    </Warning>

    The response includes the `terminal_id` Dintero assigned (for example `P11223351-T0013`). Use that value as `order.store.terminal_id` when creating a session.

    Use [`GET /v1/accounts/{aid}/terminals/{terminal_id}`](/management-auth-api/account-terminals/aid_account_management_terminals_termid_get) to inspect a terminal, or [`GET /v1/accounts/{aid}/terminals`](/management-auth-api/account-terminals/aid_account_management_terminals_get) to list all terminals.

    <Note>
      The API only registers the terminal. Someone on site still has to unbox it and connect it to Wi-Fi as described above.
    </Note>
  </Tab>
</Tabs>

## Next steps

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