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

# Create terminal

> Register a physical payment terminal and associate it with a store.

Fails with `400` `STORE_NOT_ACTIVE` if the store is not `ACTIVE`.

scopes:
- admin:accounts
- write:accounts




## OpenAPI

````yaml /mintlify-docs/openapi/spec-payments-v2.yaml post /accounts/{aid}/terminals
openapi: 3.0.0
info:
  title: Payments API v2
  contact:
    name: API Integration Support
    email: integration@dintero.com
  description: |
    Public endpoints for payments served under the account-scoped URL format
    `https://api.dintero.com/v1/accounts/{aid}/...`.
  version: LATEST
  license:
    name: UNLICENSED
    url: https://dintero.com
  x-logo:
    url: https://docs.dintero.com/img/dintero-dark-padded.svg
    altText: Dintero Logo
servers:
  - url: https://api.dintero.com/v1
security:
  - JWT: []
tags:
  - name: Transactions
    x-displayName: Transactions
    description: |
      View and perform operations on transactions
  - name: session
    x-displayName: Sessions
    description: |
      A Checkout Session relates to an order in your system.
      When an order has been placed you create a corresponding Checkout Session
      to receive payment for that order.
  - name: payment
    x-displayName: Payment
    description: |
      Resources used by the customer aka user to complete the payment of a
      session.
  - name: settlements
    x-displayName: Settlement reports
    description: Get settlement reports generated per payout
  - name: settlements.configuration
    x-displayName: Configuration
    description: Configure settlement reports
  - name: reports
    x-displayName: Reports
    description: List the generated monthly transaction reports
  - name: Sellers
    x-displayName: Sellers
    description: Manage the signup of a new Seller / Merchant account
  - name: example-session-callbacks
    x-displayName: Example Callbacks
    description: Example of callbacks delivered
  - name: v2-config-payout-destinations
    x-displayName: Sellers
    description: Get payout data for sellers
  - name: Card Tokens
    description: |
      Manage card tokens
  - name: terminals
    x-displayName: Terminals
    description: Terminal operations
  - name: v2-fund-transfers
    x-displayName: Fund transfers
    description: Transfer funds between sellers
  - name: payout-destinations
    x-displayName: payout destinations
    description: |
      Payout destinations
  - name: account-stores
    x-displayName: stores
    description: |
      Manage account stores
  - name: account-terminals
    x-displayName: terminals
    description: |
      Manage account terminals
  - name: report-configuration
    x-displayName: Report configuration
    description: Manage report configurations
  - name: kpi
    x-displayName: KPI
    description: Get KPI data
paths:
  /accounts/{aid}/terminals:
    post:
      tags:
        - account-terminals
      summary: aid_account_management_terminals_post
      description: |
        Register a physical payment terminal and associate it with a store.

        Fails with `400` `STORE_NOT_ACTIVE` if the store is not `ACTIVE`.

        scopes:
        - admin:accounts
        - write:accounts
      operationId: aid_account_management_terminals_post
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TerminalInput'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/Terminal'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessForbidden'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/ServerError'
      security:
        - JWT: []
components:
  parameters:
    accountId:
      name: aid
      description: |
        An id that uniquely identifies the account.
      in: path
      required: true
      schema:
        type: string
        format: ^[PT]{1}\d{8}$
        minLength: 9
        maxLength: 9
  schemas:
    TerminalInput:
      type: object
      required:
        - device_serial_number
        - store_id
      properties:
        device_serial_number:
          type: string
          description: >
            Hardware serial number printed on the device.


            To create a simulated terminal (sandbox accounts only), prefix the
            serial number with `SIMULATED-{dintero account id}-` followed by a
            3-digit number.

            For example: `SIMULATED-T12345678-001`.
          example: '123444555679'
        store_id:
          type: string
          description: >-
            The client-supplied `store_id` of the store to associate this
            terminal with.
          example: S312
    Terminal:
      type: object
      allOf:
        - $ref: '#/components/schemas/Entity'
        - $ref: '#/components/schemas/TerminalUpdateInput'
        - type: object
          required:
            - terminal_id
            - device_serial_number
          properties:
            terminal_id:
              type: string
              example: T12233302-T0001
            device_serial_number:
              type: string
              example: '123444555679'
            status:
              $ref: '#/components/schemas/TerminalStatus'
            status_reason:
              $ref: '#/components/schemas/TerminalStatusReason'
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - message
          properties:
            code:
              type: string
              description: The code used to identify the error/warning
            errors:
              type: array
              description: The nested error(s) encountered during validation
              items:
                type: object
            message:
              type: string
              description: The human readable description of the error/warning
    Entity:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: |
            An UUID that uniquely identifies the resource
          readOnly: true
        created_at:
          type: string
          format: date-time
          description: |
            The date-time when the resource was created
          readOnly: true
        created_by:
          type: string
          example: 1c92f7e1-2897-4d46-bdcc-c127a914fb4e
          description: |
            The ID of the user/client created the resource
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: |
            The date-time when the resource was last updated
          readOnly: true
        deleted_by:
          type: string
          example: 1c92f7e1-2897-4d46-bdcc-c127a914fb4e
          description: |
            The ID of the user/client created the resource
          readOnly: true
        deleted_at:
          type: string
          format: date-time
          readOnly: true
    TerminalUpdateInput:
      type: object
      properties:
        device_model:
          $ref: '#/components/schemas/TerminalDeviceModel'
        store_id:
          type: string
    TerminalStatus:
      type: string
      description: >
        How far the terminal has got through setup, and whether it can take
        payments. Only an `ACTIVE` terminal can be used for a payment; a session
        referencing a terminal in any other status is rejected.


        This says nothing about whether the terminal is online right now - for
        that, send a [`poll_terminal` terminal
        operation](/docs/checkout/in-person/terminal-operations#check-that-a-terminal-is-reachable).


        - `PENDING`: The terminal has been registered and Dintero is configuring
        it. No action needed, the status updates on its own. See `status_reason`
        for what is currently happening.

        - `ACTION_REQUIRED`: Dintero has finished its side, and the terminal now
        has to fetch its configuration from its own on-screen menu before it can
        be activated. Also set when a configuration fetch was attempted and did
        not complete, in which case fetch the settings again.

        - `ACTIVE`: The terminal is configured and ready to accept payments.

        - `INACTIVE`: The device has been disabled and cannot take payments.
        Re-enabling it is not self-service - contact Dintero support.

        - `ERROR`: Setting up the terminal failed. Delete the terminal and
        register it again, or contact Dintero support.

        - `DELETED`: The terminal has been removed from the account. Register
        the terminal again to reuse it.
      readOnly: true
      enum:
        - DELETED
        - PENDING
        - ACTION_REQUIRED
        - ACTIVE
        - INACTIVE
        - ERROR
    TerminalStatusReason:
      type: string
      description: >
        Context explaining why the terminal has its current status.


        Applies to terminals with status `PENDING`:


        - `ADDING`: the terminal is being registered and configured to Dintero.

        - `ACTIVATING`: the terminal is being activated.


        Applies to terminals with status `ACTION_REQUIRED`:


        - `CHECK_UPDATE`: the terminal must fetch its settings, then run a
        `check_update` terminal operation to complete activation.

        - `START_ACTIVATION`: an activation task should be run to activate the
        terminal, using `POST /admin/terminals/{terminal_id}/activations`.
      enum:
        - ADDING
        - ACTIVATING
        - CHECK_UPDATE
        - START_ACTIVATION
    TerminalDeviceModel:
      type: string
      description: |
        Hardware model of the terminal.
        - `SATURN1000` — Saturn S1F2
        - `Saturn_S1F4_Pro` — Saturn S1F4 Pro
        - `S1P2` — Saturn S1P2
        - `S1MINI2` — Saturn S1MINI2
        - `S1U2` — Saturn S1U2
        - `SIMULATED` — Simulated terminal (sandbox accounts only)
      enum:
        - SATURN1000
        - Saturn_S1F4_Pro
        - S1P2
        - S1MINI2
        - S1U2
        - SIMULATED
  responses:
    Terminal:
      description: Terminal
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Terminal'
    BadRequest:
      description: Bad / Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    AccessForbidden:
      description: Access forbidden, invalid JWT token was used
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Unexpected Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    JWT:
      type: http
      description: >
        Bearer authentication (token authentication) should be used for
        accessing the API.


        Use [Get Token](/api-reference/authenticate/aid_auths_oauth_token_post)
        to get an access token for client credentials.

        Pass the token in the request header:

            Authorization: Bearer {access_token}

        where the **access_token** is JSON Web Tokens (JWT).
      scheme: bearer
      bearerFormat: JWT

````

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