Overview Counts
Who calls these endpoints?External API (s2s)
- Base path
/api/v1/physical-pos- Identity
- Ed25519 request signature on every request —
X-Key-Id,X-Date,X-Nonce,X-Signature, plusDigeston requests with a body. ±5 min clock window, single-use nonce. A Bearer token or a panel session is not accepted here. - Authorization
- The key must carry the Physical POS product (
PHYSICAL_POS) and the scope for the endpoints on this page:physical_pos:view. Without the product the call gets403 PRODUCT_NOT_ENABLED; without the scope403 API_INSUFFICIENT_SCOPE. See Authentication and Scopes. - Cross-surface
- These endpoints are the s2s surface — call them from your own server with a signed request. The same records have screens in the panel, but panel endpoints cannot be called with an API key, and these endpoints cannot be called with a panel session.
Returns summary counts of your physical POS records in one request. A test key can call this endpoint too.
GET /api/v1/physical-pos/overview
Takes no query parameters; an undefined parameter returns 400 VALIDATION_ERROR and environment returns 400 physical_pos.input.environment_invalid. Your key determines the environment.
source lunixi-sign.sh
REQ_PATH="/api/v1/physical-pos/overview"
lunixi_sign GET "$REQ_PATH"
curl "https://api-gateway.lunixi.com$REQ_PATH" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIGNATURE"lunixi-sign.sh: Authentication › Signing helper.
{
"status": "success",
"code": "SUCCESS",
"data": {
"overview": {
"stores": { "active": 12, "archived": 2 },
"registers": { "active": 31, "archived": 4 },
"terminals": { "environment": "LIVE", "open": 28, "closed": 3 },
"devices": {
"environment": "LIVE",
"total": 35,
"active": 0,
"pending": 33,
"suspended": 0,
"maintenance": 0,
"retired": 2,
"unverified": 33
},
"transactions": null,
"generatedAt": "2026-01-10T09:00:00.000Z"
}
},
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}| Field | Type | Description |
|---|---|---|
stores.active | integer | Number of ACTIVE stores. Environment-less; test and live keys see the same number. |
stores.archived | integer | Number of ARCHIVED stores. |
registers.active | integer | Number of ACTIVE registers. Environment-less. |
registers.archived | integer | Number of ARCHIVED registers. |
terminals.environment | string | The environment the terminal counts belong to: your key's environment (TEST or LIVE). |
terminals.open | integer | Number of terminals in this environment that are not closed (ACTIVE and SUSPENDED). |
terminals.closed | integer | Number of CLOSED terminals in this environment. |
devices.environment | string | The environment the device counts belong to: your key's environment. |
devices.total | integer | All devices in this environment (retired included). |
devices.active | integer | Number of ACTIVE devices. |
devices.pending | integer | Number of PENDING devices. |
devices.suspended | integer | Number of SUSPENDED devices. |
devices.maintenance | integer | Number of MAINTENANCE devices. |
devices.retired | integer | Number of RETIRED devices. |
devices.unverified | integer | Number of devices with unverified ownership that are not retired. |
transactions | null | Always null. |
generatedAt | string | The moment the counts were taken. |
- All counts are read at the same moment and are consistent with each other.
- Counts are not cached: a request right after you create, archive or close a record sees the new count.
Do not interpret transactions as 0. New fields and values may be added to responses; your code should ignore fields it does not recognize.
Errors
| HTTP | code | When |
|---|---|---|
403 | PRODUCT_NOT_ENABLED | The key lacks the Physical POS product. |
403 | API_INSUFFICIENT_SCOPE | The key lacks physical_pos:view. |
400 | physical_pos.input.environment_invalid | environment was sent in the query. |
400 | VALIDATION_ERROR | Undefined query parameter. |
All codes: Error Codes.