API reference
KashikeyoPOS is API-first. Everything the till and guest pages do runs over this HTTP API, so you can build on top of it too.
Basics
Base URL: https://kashikeyopos.com
Format: All request and response bodies are JSON (Content-Type: application/json).
Authentication: Store endpoints require a bearer token obtained from /api/register or /api/login. Send it as a header:
Authorization: Bearer <token>
Each store's data is isolated at the database level, so a token only ever sees its own workspace.
The sync model
KashikeyoPOS is offline-first. Instead of editing rows directly, clients send an idempotent op-log to /api/ops and read changes back with a rowversion cursor from /api/pull. Each op carries a client-generated opId so it's applied at most once, even if retried after a dropped connection.
Authentication
POST/api/register
Create a new store workspace and its admin account. Returns a session token.
| Field | Notes |
|---|---|
email, password | Required. Admin credentials. |
storeName, ownerName, phone | Store & owner details. |
pin | 4-digit till PIN for the owner. |
POST/api/login
Sign in with email and password. Returns a session token and sets a session cookie.
POST/api/logout
Clear the current session cookie.
POST/api/auth/google
Sign in / sign up with a Google ID token. Apple sign-in uses /auth/apple/callback. Availability is reported by GET /api/auth/config.
Store data (bearer token required)
POST/api/ops
Apply a batch of idempotent operations (menu, orders, stock, customers…). The heart of the sync model.
GET/api/pull?since=<rowver>
Fetch every change since a rowversion cursor. Returns the new cursor to pass next time.
GET/api/stores POST/api/stores POST/api/select-store
List, create and switch between the branches in your workspace.
GET/api/events
Server-sent events stream — pushes a signal whenever your workspace's data changes, so clients update in realtime instead of polling.
Guest ordering (public, per store)
GET/p/:slug/boot
Public menu, store info and (optionally) a guest's profile for the storefront. :slug is your store's public handle.
POST/p/:slug/order POST/p/:slug/call GET/p/:slug/orders
Place a guest order, call a waiter, and read back a guest's own orders and their live status.
Service
GET/api/health
Liveness and database connectivity. Powers the status page. No auth required.