Pre-aggregated, read-only data for one screen; 403 when the display is not configured for it (scope: display:read)
bearerAuthAuthorizationBearer <token>API key as Bearer token
screen*string"pulse""feed""present""kitchen""orders""bookings""gate""promo""queue""menu""slides"If-None-Match?stringETag from a previous response; a match answers 304 with no body (no database work on the server).
OK
application/json- response
data*Discriminated by kind (= the requested screen). pulse: kpis, banks (IBAN last 4 only), collections (30 days), alerts. feed: items (≤ 50, newest first). present: period + slides (bars | line | waterfall | table). kitchen: tickets. orders: preparing/ready numbers. bookings: today. gate: last 40 visits. promo: items + payUrl. queue: serving per counter + next (initials only) + waitMin. menu: categories ≤ 12 × items ≤ 40. slides (showcase/announcements): resolved slides + qrUrl.
error*nullcurl -X GET "https://example.com/display/snapshot?screen=pulse"{ "data": { "kind": "pulse", "kpis": [ { "id": "string", "labelKey": "string", "label": "string", "value": { "minor": 0, "currency": "str" }, "count": 0, "delta": 0, "spark": [ 0 ], "tone": "neutral" } ], "banks": [ { "name": "string", "ibanTail": "string", "balance": { "minor": 0, "currency": "str" } } ], "collections": [ { "day": "2019-08-24", "minor": 0 } ], "alerts": [ { "id": "string", "severity": "info", "titleKey": "string", "title": "string", "at": "string" } ], "items": [ {} ], "period": "string", "slides": [ { "id": "string", "titleKey": "string", "title": "string", "chart": "bars", "series": [ { "label": "string", "points": [ { "x": "string", "y": 0 } ] } ], "total": { "minor": 0, "currency": "str" } } ], "tickets": [ { "id": "string", "number": "string", "title": "string", "lines": [ { "qty": 0, "name": "string", "note": "string" } ], "status": "new", "since": "string" } ], "preparing": [ "string" ], "ready": [ "string" ], "orgName": "string", "logoUrl": "string", "payUrl": "string", "serving": [ { "counter": "string", "number": "string", "at": "string" } ], "next": [ "string" ], "waitMin": 0, "categories": [ { "name": "string", "items": [ { "id": "string", "name": "string", "description": "string", "price": { "minor": 0, "currency": "str" }, "imageUrl": "string" } ] } ], "qrUrl": "string" }, "error": null}The paired display: device, organization branding, config and the screens it can show (scope: display:read) GET
Previous Page
Server-Sent Events for a display (text/event-stream, never compressed): invalidate {screens} → re-fetch with If-None-Match, feed {item}, config, revoked, ping every 20 s; closes after 15 min (scope: display:read) GET
Next Page