# API gap report — after backend integration Generated 2026-09-09. Format: `Feature | Existing API | Frontend status | Missing API` ## Wired to the platform | Feature | Existing API | Frontend status | Missing API | |---|---|---|---| | Login | `POST /api/auth/login` | Wired | — | | Session restore | `GET /api/auth/me` | Wired — confirmed on every load | — | | Token refresh | `POST /api/auth/refresh` | Wired — single-flight, persist-before-use | — | | Logout | `POST /api/auth/logout` | Wired — revokes upstream, then clears | — | | Site switcher / Store page | `GET /api/sites` | Wired | — | | Dashboard Visitors | `GET /api/reports/footfall` | Wired — server `total` | — | | Dashboard Purchases / Revenue / Conversion | `GET /api/reports/conversion` | Wired | — | | Footfall chart | `GET /api/reports/footfall?bucket=day` | Wired | — | | Revenue chart · Sales page | `GET /api/reports/conversion?bucket=day` | Wired | — | | Recent arrivals · Activity page | `GET /api/visits` | Wired — cursor echoed, deduped on `visit_id` | — | | Customer photos | `GET /api/faces/…` | Wired — proxied so `` works | — | | Team | `GET /api/team` | Wired | — | | Mobile → dashboard purchases | `POST /api/purchases` | Wired via `POST /api/visits` | `GET /api/purchases` | ## Cannot be wired — backend required | Feature | Existing API | Frontend status | Missing API | |---|---|---|---| | LYT programme | none | Unavailable panel | `GET /api/rewards`, `/api/rewards/redemptions`, `/api/lyts/ledger` | | Engagement activities | none | Unavailable panel | `GET /api/activities`, `/api/activities/impact` | | Campaigns | none | Unavailable panel | `GET /api/campaigns` | | Customer journey | partial (visit/purchase/return only) | Unavailable panel | `GET /api/reports/journey` | | Orders / products / stock | none | Unavailable panel | `GET /api/purchases`, `/api/products` | | Payment split / refunds | none | Unavailable panel | `GET /api/reports/payments`, `/api/reports/refunds` | | Staff attendance & ranking | `/api/team` is console accounts | Unavailable panel | `GET /api/staff`, `/api/staff/attendance`, `/api/reports/staff-sales` | | Business profile | none | Unavailable panel | `GET/PATCH /api/settings/profile` | | Roles matrix · Integrations · API keys · Billing | none | Still local state | `GET /api/settings/{roles,integrations,api-keys,billing}` | | Security → sessions | `GET/DELETE /api/auth/sessions` | **Not yet wired** — endpoint exists | — | | Invitations / join flow | `POST /api/team/invitations`, `GET /api/auth/invitation`, `POST /api/auth/register` | **Not yet wired** — endpoints exist, service written | — | | Loyaly AI chat | none | Still mock replies | `POST /api/ai/chat` | | Live arrivals stream | `GET /api/visits/stream` | **Not yet wired** — polling only | — | | Cameras / site health | `GET /api/cameras`, `/api/sites/{id}/check` | **Not yet wired** — service written | — | | Visitor directory | `GET /api/visitors`, `/history`, `PUT /profile`, `DELETE` | **Not yet wired** — service written | — |