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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.dintero.com/feedback

```json
{
  "path": "/docs/checkout/in-person/terminal-onboarding",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# 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 do the whole onboarding in Backoffice, or do the initial setup in Backoffice and add terminals from your POS via the management API.

## Step 1: Onboard a payout destination

The payout destination is the seller of record - the entity that receives the funds.

1. In Backoffice, go to **Settings** → **Sellers** and click **Add new Seller**.
2. Provide the company or individual details and complete the KYC flow. KYC is a one-time step per legal entity.
3. When the seller is approved, note the `payout_destination_id`. You'll send this as `order.store.payout_destination_id` when creating sessions.

For more detail, see [Add sellers](/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 **Settings** → **Stores** and add a new store.
    2. Link the store to the payout destination you onboarded in step 1.
    3. Note the `store_id`. You'll send this as `order.store.id`.
  </Tab>

  <Tab title="Management API">
    Create a store with [`POST /v1/accounts/{aid}/stores`](/api-reference/account-stores/create-store). The `store_id` you choose is what you'll later send as `order.store.id` when creating a session.

    ```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. This is what you reference 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: Register a terminal

A terminal is a physical card reader. Each terminal is linked to a single store.

<Tabs>
  <Tab title="Backoffice">
    1. Go to **Settings** → **Terminals** and add a new terminal.
    2. Provide the device serial number and the terminal model.
    3. Link the terminal to the store from step 2.
    4. Note the `terminal_id`. You'll send this as `order.store.terminal_id`.
  </Tab>

  <Tab title="Management API">
    Register a terminal with [`POST /v1/accounts/{aid}/terminals`](/api-reference/account-terminals/create-terminal).

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

    {
      "device_serial_number": "158222607285",
      "device_model": "SATURN1000",
      "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`](/api-reference/account-terminals/get-terminals), [`GET /v1/accounts/{aid}/terminals/{terminal_id}`](/api-reference/account-terminals/terminal-details), and [`PUT /v1/accounts/{aid}/terminals/{terminal_id}`](/api-reference/account-terminals/update-terminal) to list, inspect, and update terminals.
  </Tab>
</Tabs>

<Info>
  The terminal must be linked to both a store and a payout destination before it can accept in-person payments. Sessions targeting a terminal that is not yet enrolled will be rejected.
</Info>

## Next step

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