/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.