Skip to main content
The POS API is served under the same base URL as the Storefront API (/api/v1/{store_id}/storefront) with every path prefixed /pos/. It exists so a till can run on a POS channel API key with its own staff identity and device pairing, while reusing the storefront cart, catalog and order machinery.

Pair a device

Activate a till with the pairing code sent to the store operator.

Log in staff

OTP login for POS users; the tokens you get back carry the POS channel scope.

Capture an order

Create the order from a POS cart and record the payment taken at the counter.

TypeScript SDK

@commercengine/pos wraps every operation on this page with typed methods.

Authentication

1

Generate a POS channel API key

In the dashboard, open Settings โ†’ Channels, pick (or create) a POS channel and generate its key. Keys are scoped to a store and a channel โ€” a Web channel key is rejected on /pos/*.
2

Pair the device

Call POST /pos/auth/pair-device with the pairing code sent to the operator by phone or email. A paired device shows up in GET /pos/devices as available.
3

Log the operator in

Start an OTP login with POST /pos/auth/login/email, /phone or /whatsapp, then POST /pos/auth/verify-otp. Use the returned access token as Authorization: Bearer โ€ฆ and refresh it with POST /pos/auth/refresh-token.
4

Claim the device for this session

POST /pos/devices/{id}/claim binds an available device to the logged-in operator; the device must belong to the location the operator logged in to. unclaim releases it at the end of the shift.
Requests made with a POS channel token are treated as in-store activity: storefront analytics events and the cart.* / wishlist.* webhooks are not emitted for them. Order, payment and shipment webhooks fire as usual.

Two kinds of operations

Both groups are documented from a single OpenAPI document, https://openapi.commercengine.io/ce-pos.json, which you can use directly for code generation.