Developers Guides Terminal & Device Management

Terminal & Device Management

Manage payment terminals and devices via the Surfboard API. Register in-store and online terminals, configure settings, and handle device operations.

In-Store Terminal API Device Management Configuration

Overview

Once merchants are onboarded and stores are created, the next step is registering and managing terminals. Surfboard supports both physical in-store devices and online payment terminals. This guide covers registration, configuration, and ongoing operations like moving or rebooting terminals.

Terminal Types

TypeCategoryDescription
EMVIn-StoreTraditional card-present terminals (countertop, mobile POS, kiosk)
SoftPOSIn-StoreTap-to-pay on Android smartphones or tablets
PaymentPageOnlineSurfboard-hosted checkout page with a payment link
SelfHostedPageOnlineSurfboard renders card fields on your own web page via the Online SDK
iFrameOnlineEmbedded payment frame within your site
MerchantInitiatedOnlineServer-to-server payments using stored card tokens (subscriptions, recurring)

Registering In-Store Terminals

Register physical terminals by providing the device’s registration code and the store it belongs to.

POST /merchants/{merchantId}/stores/{storeId}/devices
{
  "registrationIdentifier": "250901",
  "terminalName": "Checkout 1"
}

The registrationIdentifier is a 6-digit code displayed when you power on the terminal. For SurfPad and Printer devices, use the serial number printed on the back instead.

Response:

{
  "status": "SUCCESS",
  "data": {
    "terminalId": "trm_abc123",
    "registrationStatus": "REGISTERED"
  },
  "message": "Terminal registered successfully"
}

The registrationStatus will be either REGISTERED (new device) or ALREADY_REGISTERED (device was previously linked).

Registering Online Terminals

Online terminals are registered per store, specifying the terminal mode.

POST /merchants/{merchantId}/stores/{storeId}/online-terminals
{
  "onlineTerminalMode": "SelfHostedPage"
}

Note: When a merchant completes onboarding, the PaymentPage and MerchantInitiated modes are registered automatically. You only need to register SelfHostedPage explicitly.

Response:

{
  "status": "SUCCESS",
  "data": {
    "terminalId": "trm_xyz789",
    "publicKey": "pk_live_...",
    "registrationStatus": "REGISTERED"
  },
  "message": "Terminal registered successfully"
}

For SelfHostedPage terminals, the response includes a publicKey used to initialize the Online SDK on your checkout page.

Terminal Configuration

Terminal settings follow a hierarchy: merchant-level defaults cascade down to store-level, which cascade down to terminal-level. Terminal-level settings always take precedence.

Setting Terminal Config

PATCH /merchants/{merchantId}/stores/{storeId}/terminals/{terminalId}
{
  "wifiSsid": "StoreNetwork",
  "wifiPassword": "securepass",
  "preferredNetwork": "WIFI",
  "preferredRestartTime": "03:00",
  "language": "en",
  "showReceipt": true,
  "alwaysShowMinorUnits": 1
}

Key configuration options:

ParameterDescription
preferredRestartTimeScheduled restart in HH:MM format (default 02:00). Terminals restart within a 1-hour window.
preferredNetworkWIFI or GSM
languageISO language code: en, fi, da, se
autoSleepSleep timeout in seconds (battery-powered devices only)
showStatusBarShow/hide the status bar (SurfPad only)
openPosOnRebootenabled or disabled — auto-launch POS after restart
enableRefundLockRequire PIN for refunds (Android terminals only)

Fetching Terminal Config

GET /merchants/{merchantId}/stores/{storeId}/terminals/{terminalId}/config

Returns all active configuration values for the terminal, including inherited settings from merchant and store levels.

Device Operations

Change Store

Move a terminal between stores under the same merchant. The terminal ID stays the same.

POST /terminals/change
{
  "terminal$id": "trm_abc123",
  "storeId": "str_newstore456"
}

Terminals can only be moved between stores belonging to the same merchant. To reassign across merchants, use the Move Terminal endpoint.

Move Terminal (Cross-Merchant)

Partners who manage terminal inventory in bulk can reassign a hardware terminal to a different merchant entirely.

PUT /partners/{partnerId}/terminals/{terminalSerialNo}/move
{
  "targetMerchantId": "mrc_target789"
}

This endpoint uses the terminal’s serial number rather than its terminal ID.

Reboot Terminal

Remotely restart a terminal for troubleshooting or to apply firmware updates.

POST /terminals/{terminalId}/reboot
{}

Response:

{
  "status": "SUCCESS",
  "message": "Reboot command published successfully"
}

A SUCCESS status means the reboot command was sent. It does not guarantee the terminal has rebooted — the device must be connected to the network and not processing another command.

API Quick Reference

OperationMethodEndpoint
Register in-store devicePOST/merchants/{merchantId}/stores/{storeId}/devices
Register online terminalPOST/merchants/{merchantId}/stores/{storeId}/online-terminals
Set terminal configPATCH/merchants/{merchantId}/stores/{storeId}/terminals/{terminalId}
Fetch terminal configGET/merchants/{merchantId}/stores/{storeId}/terminals/{terminalId}/config
Change storePOST/terminals/change
Move terminalPUT/partners/{partnerId}/terminals/{terminalSerialNo}/move
Reboot terminalPOST/terminals/{terminalId}/reboot

For full endpoint details, see the Terminals API and Stores API reference documentation.

Ready to get started?

Create a sandbox account and start building your integration today.