Introduction
Standardized API layer for Point-of-Sale (POS) integrations supporting multiple POS systems including Deliverect, Lightspeed, and Atlas Kitchen.
This service provides a unified abstraction layer that standardizes interactions with different POS systems using the adapter pattern.
Partner Integration (H2H)
External POS partners (e.g. Jamezz, Uber, QR vendors) integrate with pos-integration-service host-to-host. Operations tagged Partner H2H below are the supported partner surface.
Authentication
Every partner request carries a partner API key:
JavaScript
Python
Java
cURL
Shell
The key is tenant-scoped. Validation is silent on the key’s purpose — an invalid or expired key
always returns 401 Unauthorized. Rotate keys by issuing a new one and revoking the old one in
the admin console.
Coming soon — OAuth 2.0 with scoped permissions. A future release will offer OAuth 2.0 alongside the API-key flow, with per-operation scopes (e.g.
products:read,orders:write,loyalty:*) for partners that need granular access control. API-key auth will remain supported as the simple path. No migration required for today’s partners.
Tenant resolution
The tenant is resolved from the request hostname. Each tenant has a subdomain, e.g.:
JavaScript
Python
Java
cURL
Shell
Partners do not pass a tenant header themselves. Pointing the request at the right subdomain is what selects the tenant’s database and loyalty credentials.
Auth smoke test
Before integrating any business endpoint, verify the key works:
Shell
JavaScript
Python
Java
cURL
200 with { "authenticated": true, "tenantId": "...", "apiKeyId": N, "expiresAt": "..." }
confirms auth + subdomain routing are correct. 401 means the key is missing/invalid/expired.
Idempotency
Mutating operations accept a caller-supplied idempotency key where noted (commonly refCode).
Replays with the same key return a success response without performing the action twice.
Error envelope
All error responses follow the same shape:
json
JavaScript
Python
Java
cURL
Shell
code mirrors the HTTP status. Partner-relevant categories:
Loyalty proxy
The /api/v1/loyalty/* endpoints are thin proxies to a separate loyalty-service. The partner
still uses their own X-Api-Key; pos-integration translates to the tenant’s loyalty credential
internally. A 503 on these endpoints means the tenant hasn’t finished loyalty onboarding.
Date & Time Convention
All date-time fields in requests and responses use RFC 3339 format (a strict profile of ISO 8601):
- DateTime:
2026-03-16T15:05:33Zor2026-03-16T15:05:33+08:00 - Date-only (where noted):
2026-03-16
JavaScript’s new Date().toISOString() produces valid values. The API accepts both Z (UTC) and ±HH:MM timezone offsets.
Menu APIs
Data Flow Overview
JavaScript
Python
Java
cURL
Shell
Contact Support: Name: CATA Projects Email: support+api@cata.sg

