--- title: "Board the terminal" description: "Register your payment terminal with Adyen." url: "https://docs.adyen.com/point-of-sale/managing-terminals/board-terminal" source_url: "https://docs.adyen.com/point-of-sale/managing-terminals/board-terminal.md" canonical: "https://docs.adyen.com/point-of-sale/managing-terminals/board-terminal" last_modified: "2019-05-31T16:08:00+02:00" language: "en" --- # Board the terminal Register your payment terminal with Adyen. [View source](/point-of-sale/managing-terminals/board-terminal.md) To make a terminal ready to accept payments, it needs to be assigned to your store, and then boarded. Often the terminal is [already assigned to your store](/point-of-sale/managing-terminals/assign-terminals) and all you need to do is confirm. But it is also possible that you need to [select your store](#store_list) from a list on the terminal display. If you have a large number of stores, you can enable your store staff to initiate the boarding process with a [one-time password](#board-with-otp) (OTP). The boarding process can take up to 30 minutes. ## Requirements Before you begin, take into account the following requirements, limitations, and preparations. | Requirement | Description | | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API integration](/point-of-sale/basic-tapi-integration/) with payment terminals, or a [standalone solution](/point-of-sale/standalone). | | **[API credential roles](/development-resources/api-credentials/roles/)** | To use [boarding with a one-time password](#board-with-otp), you need an API credential with an API key and the following roles:- **Management API — Terminal actions read** - **Management API - Reassign terminal to an entity** | | **Limitations** | Take into account the following limitations:- A terminal will not be able to board unless the merchant account or store has at least one payment method configured. - Boarding with a one-time password is only possible with integrated terminals on software version 1.94 or later. - Standalone terminals can only be boarded [manually](#manually-board-your-terminal). | | **Setup steps** | Before you begin:- To enable boarding with a one-time password, contact your Account Manager or our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other). If you want your logo to show on the one-time password screen, ask them to configure it. | ## Manually board your terminal To manually board a terminal, choose the procedure for the terminal type below that applies to your use case. ### Non-Android terminals 1. Switch on the terminal. During startup, the display turns on and off a few times. 2. If the display shows **Configure network**, [connect the terminal to the internet](/point-of-sale/pos-troubleshooting/connecting-your-terminal-to-the-internet). 3. On the terminal, select **Board the terminal**. 4. Follow the instructions for your situation: | Situation | Instructions | | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | The **Board the terminal** button doesn't show. | The terminal is boarded already. If you recently reassigned the terminal to a different store, wait until the next synchronization with the Adyen platform (on average every three hours) and try again. | | The display shows a list of stores.[]() | 1. Find your store; you can **Search by city** and/or scroll the list. 2. Select your store. 3. Select **Confirm**. | | The display shows one store. | Select **Confirm** to accept the store that the terminal was assigned to.If this is not the correct store, reassign the terminal in the Customer Area and try again. | The terminal reboots one or more times. Your terminal is now boarded and ready to process payments. ### Android terminals 1. Switch on the terminal. During startup, the display turns on and off a few times. 2. Select your preferred **Language** from the drop-down list. 3. If the display shows **Setup Wi-Fi**, [connect the terminal to the internet](/point-of-sale/pos-troubleshooting/connecting-your-terminal-to-the-internet). 4. Follow the instructions for your situation: | Situation | Instructions | | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | The display shows one store. | Select **Confirm** to accept the store that the terminal was assigned to, or select the pencil icon **and chose a store from the list on the display.If this is not the correct store, and there is no pencil icon **, reassign the terminal in the Customer Area and try again. | The terminal reboots one or more times. Your terminal is now boarded and ready to process payments. ## Board your terminal with a one-time password You can use the one-time password (OTP) to board payment terminals that are still in the inventory at the company or merchant level. This is convenient if you have a large number of stores and do not want to assign terminals in your [Customer Area](https://ca-test.adyen.com/) before shipping them. It removes the risk of assigning a terminal to the wrong store, because the terminals are boarded on the spot. Because boarding with a one-time password consists of several Management API calls, you need to implement logic in your system to trigger these calls. For example, when your store personnel scans the barcode on the terminal screen, your system gets the ID of the terminal and assigns the terminal to the correct store. ### How it works The one-time password boarding flow is as follows: 1. Store staff turns on the payment terminal and connects the terminal to the network. 2. Store staff scans the barcode on the terminal screen or enters the terminal's one-time password. 3. You make an API call with the one-time password to get the ID of the terminal. 4. You make an API call to assign the terminal with that ID to the store. 5. After being assigned, the terminal downloads the configuration and is ready to process transactions. ### Board the terminal To board your terminal with a one-time password: 1. Make a GET [/terminals](https://docs.adyen.com/api-explorer/Management/latest/get/terminals) request, specifying the following query parameter to get a list of terminals associated with the one-time password: | Query parameter | Required | Description | | ---------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [otpQuery](https://docs.adyen.com/api-explorer/Management/latest/get/terminals#query-otpQuery) | | Set this to the one-time password. The call will return one or more terminals associated with the specified one-time password. If this query parameter is used, other query parameters are ignored. | **Get the terminal associated with the one-time password** #### curl ```bash curl https://management-test.adyen.com/v3/terminals?otpQuery={ONE_TIME_PASSWORD} \ -H 'x-API-key: ADYEN_API_KEY' \ -X GET ``` #### Java ```java // Adyen Java API Library v25.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.service.management.*; Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Make the request TerminalsTerminalLevelApi service = new TerminalsTerminalLevelApi(client); ListTerminalsResponse response = service.listTerminals("String", "String", "String", "String", "String", "String", 1, 1, null); ``` #### PHP ```php // Adyen PHP API Library v17.4.0 use Adyen\Client; use Adyen\Environment; use Adyen\Service\Management\TerminalsTerminalLevelApi; $client = new Client(); $client->setXApiKey("ADYEN_API_KEY"); $client->setEnvironment(Environment::TEST); $requestOptions['queryParams'] = array('searchQuery' => 'string', 'otpQuery' => 'string', 'countries' => 'string', 'merchantIds' => 'string', 'storeIds' => 'string', 'brandModels' => 'string', 'pageNumber' => 'integer', 'pageSize' => 'integer'); // Make the request $service = new TerminalsTerminalLevelApi($client); $response = $service->listTerminals($requestOptions); ``` #### C\# ```cs // Adyen .net API Library v14.3.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Service.Management; var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Make the request var service = new TerminalsTerminalLevelService(client); var response = service.ListTerminals(searchQuery: "string", otpQuery: "string", countries: "string", merchantIds: "string", storeIds: "string", brandModels: "string", pageNumber: 1, pageSize: 1); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v16.2.0 // Require the parts of the module you want to use const { Client, ManagementAPI } = require('@adyen/api-library'); // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Make the request const managementAPI = new ManagementAPI(client); const response = managementAPI.TerminalsTerminalLevelApi.listTerminals("string", "string", "string", "string", "string", "string", 1, 1); ``` #### Go ```go // Adyen Go API Library v9.2.0 import ( "context" "github.com/adyen/adyen-go-api-library/v9/src/common" "github.com/adyen/adyen-go-api-library/v9/src/adyen" "github.com/adyen/adyen-go-api-library/v9/src/management" ) client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Make the request service := client.Management() req := service.TerminalsTerminalLevelApi.ListTerminalsInput() req = req.SearchQuery("string").OtpQuery("string").Countries("string").MerchantIds("string").StoreIds("string").BrandModels("string").PageNumber(1).PageSize(1)res, httpRes, err := service.TerminalsTerminalLevelApi.ListTerminals(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v12.2.0 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" adyen.client.platform = "test" # The environment to use library in. query_parameters = { "searchQuery" : "string", "otpQuery" : "string", "countries" : "string", "merchantIds" : "string", "storeIds" : "string", "brandModels" : "string", "pageNumber" : "integer", "pageSize" : "integer" } result = adyen.management.terminals_terminal_level_api.list_terminals(query_parameters=query_parameters) ``` #### Ruby ```rb # Adyen Ruby API Library v9.2.0 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' adyen.env = :test # Set to "live" for live environment query_params = { :searchQuery => 'string', :otpQuery => 'string', :countries => 'string', :merchantIds => 'string', :storeIds => 'string', :brandModels => 'string', :pageNumber => 'integer', :pageSize => 'integer' } result = adyen.management.terminals_terminal_level_api.list_terminals(query_params: query_params) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v16.2.0 // Require the parts of the module you want to use import { Client, ManagementAPI, Types } from "@adyen/api-library"; // Initialize the client object const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Make the request const managementAPI = new ManagementAPI(client); const response = managementAPI.TerminalsTerminalLevelApi.listTerminals("string", "string", "string", "string", "string", "string", 1, 1); ``` 2. From the `data` array in the response, get the `id` of the payment terminal that is associated with the one-time password. You will need this ID to assign the terminal. **Details of the terminal associated with the one-time password** ```bash { "_links": {...}, "itemsTotal": 1, "pagesTotal": 1, "data": [ { "id": "AMS1-000158204503066", "status": "onlineToday", "assigned": false, "companyAccount": "YOUR_TEST_COMPANY", "deviceModel": "AMS1", "serialNumber": "000158204503066", "firmwareVersion": "Castles_Android 1.94.4", "iccid": "6006491286999921374", "lastActivityDateTime": "2023-09-13T14:46:34+02:00", "lastTransactionDateTime": "2023-09-04T13:04:21+02:00", "wifiIp": "198.51.100.1", "wifiMac": "C4:6E:00:16:A1:01" } ] } ``` 3. Make a POST [/terminals/{terminalId}/reassign](https://docs.adyen.com/api-explorer/Management/latest/post/terminals/\(terminalId\)/reassign) request using the `id` of the terminal in the URL, to [assign the terminal](/point-of-sale/automating-terminal-management/assign-terminals-api#assign-terminals) to your store. The terminal automatically boards to the store that you specified in the assignment request. For this call, you need to know the [unique identifier](/point-of-sale/automating-terminal-management/assign-terminals-api#get-stores) of the store that you want to assign the terminal to. 4. The terminal automatically downloads the configuration. ## Reassign boarded terminals with a one-time password If you have a terminal that was already boarded to a store with a one-time password, and now you want to use it for a different store, you must reassign the terminal. Otherwise, the terminal continues processing payments over the old store. To reassign and re-board terminals with a one-time password: 1. On the terminal, store staff selects **Settings** > **Configuration** > **Reassign device**. 2. Store staff scans the barcode that appears on the terminal screen, or enters the one-time password of the terminal. 3. Using the logic that you implemented, your system makes an API call with the one-time password to get the ID of the terminal, and an API call to reassing the terminal. 4. The terminal reboots and is assigned to the new store. If you have [WebSockets](/point-of-sale/diagnostics/check-cloud-connection/#check-cloud-on-terminal) disabled, the reassignment can take up to three hours. ## See also * [Assign terminals in the Customer Area](/point-of-sale/managing-terminals/assign-terminals) * [Assign terminals using API requests](/point-of-sale/automating-terminal-management/assign-terminals-api) * [Troubleshooting terminals](/point-of-sale/pos-troubleshooting)