TRMNL display poll
Called by TRMNL firmware on every refresh cycle to decide what to paint. The server returns an image_url pointing to the device’s next PNG plus a refresh_rate telling firmware when to poll again.
Phase 1 always returns the current image_url — image generation is synchronous and per-request. A future phase will switch to S3-backed pre-rendered images so many devices can share a single render.
Auth: Access-Token header (the opaque per-device token issued by /api/setup/).
200— image ready.401— missing, unknown, or disabledAccess-Token.
Authorizations
Response
OK
Response to GET /api/display.
Tells the device what to draw next, how long to wait before checking again, and (optionally) whether to take firmware action.
Absolute URL the device should fetch and paint. Currently a Django view that streams the rendered 2-bit PNG.
Suggested filename for the device's local cache (the device de-dupes by this name).
Seconds the device should wait before polling /api/display again. Bounded to [60s, 24h].
60 <= x <= 86400Closient-side lifecycle state of this device. Non-standard extension to the TRMNL response — TRMNL firmware ignores it; dashboards consume it for status badges.
unclaimed, claimed, disabled TRMNL display status code. 0 means "image ready"; non-zero values are reserved for future TRMNL extensions.
Whether the device should reset to first-boot state on next reboot. Unused in Phase 1.
Whether the device should fetch new firmware. Unused in Phase 1 — Closient does not host firmware images.
URL of new firmware to fetch when update_firmware is true. Empty in Phase 1.