Readers
Register card-present hardware and manage your reader fleet via the Terminals API. Readers are identified by their serial number and scoped to your sub-merchant account.
Register a reader
Registering is idempotent — re-registering an existing serial reactivates it and refreshes its last-seen timestamp. KYC must be approved before a reader can be registered.
http
POST /v1/terminals/register
Authorization: Bearer sk_test_...
Content-Type: application/json
{
"serial_number": "SUNMI-ABC123",
"device_model": "sunmi_p3",
"location_name": "Main counter"
}| Field | Type | Required | Description |
|---|---|---|---|
serial_number | string | Yes | The device's hardware serial number |
device_model | string | Yes | One of the supported device models below |
location_name | string | Yes | Human label for where the reader lives |
json
{
"success": true,
"data": {
"terminal_id": "trm_01HQXYZ",
"serial_number": "SUNMI-ABC123",
"device_model": "sunmi_p3",
"location_name": "Main counter"
}
}Supported device models
| device_model | Hardware |
|---|---|
sunmi_p3 | Sunmi P3 |
sunmi_p3_mix | Sunmi P3 MIX |
pax_a920 | PAX A920 |
telpo_tps900 | Telpo TPS900 |
zcs_z90 | ZCS Z90 |
newland_n910 | Newland N910 |
ingenico_apos_a8 | Ingenico APOS A8 |
other | Generic / unlisted hardware |
List readers
GET /v1/terminals/list returns every active reader registered to your account.
json
{
"success": true,
"data": {
"terminals": [
{
"terminal_id": "trm_01HQXYZ",
"serial_number": "SUNMI-ABC123",
"device_model": "sunmi_p3",
"location_name": "Main counter",
"last_seen_at": "2026-06-03T10:30:00.000Z",
"registered_at": "2026-05-01T09:00:00.000Z"
}
]
}
}Process a payment
Card-present charges are submitted to POST /v1/terminals/process with the encrypted EMV payload from the reader. The Terminal SDK does this for you — see the quickstart. The encrypted card blob is forwarded to the gateway intact and never decrypted on Watenga servers.
