DisplaySync

API overview

DisplaySync has no authenticated public API for end users. The REST + WebSocket endpoints at api.displaysync.live exist but are scoped for the dashboard, mobile app, and desktop sign — they're not designed, documented, or supported for third-party use. The only public endpoints are the three monitoring health checks documented immediately below, used by uptime monitors and orchestration layers.

This page exists so you can answer "is there an API?" with a clear "the health checks, and not much else, yet" instead of guessing, and so the workarounds for common automation needs are findable.

Health endpoints

Three public endpoints — no auth, not under /api, not rate-limited.

EndpointReturnsUsed by
GET /healthFull subsystem flags (DB up/down, Redis up/down, memory, env, version). 200 healthy / 503 if DB down or Redis degraded.Pingdom / StatusCake; on-call diagnostic
GET /health/readyDB readiness only. 200 if DB responsive, else 503.Kubernetes-style readinessProbe; LB pool inclusion
GET /health/liveProcess liveness — no external calls. Always 200 with uptime.Kubernetes-style livenessProbe; restart decisions

/health/ready and /health/live are the right targets for orchestration probes — they're cheap and bounded. /health is fuller but does external calls (DB ping, Redis ping); use sparingly from external monitors. See Network requirements for the venue-IT smoke-test workflow against these.

Why no public API yet

The internal API is a moving target. Routes change without notice — internal callers update in lockstep, and that flexibility is load-bearing for shipping fast on a small team. A public API has different responsibilities (versioning, deprecation policy, rate-limit guarantees, customer SDKs) that we'd rather take on deliberately than backfill after the fact.

We're not opposed to shipping one. It's a question of when, not whether.

What you might want, and what you can do today

Most "I'd use the API for X" requests fall into a few buckets. Here's what works today without one:

If you want to...Today's path
Watch signs for offline stateNotifications — push and email, per-event subscriptions
React to content unreachabilitySame — content_unreachable notifications
Bulk-update what walls showBuild content as a CMS-driven webpage and assign that URL once. Push to your CMS; signs see updates within their reachability check window.
Programmatic sign creationMobile-app claim is fast in practice — one tech can claim 30+ signs in an hour. Pre-create records in the dashboard for an even faster on-site flow (Flow B).
Pull sign status into a custom dashboardDashboard's audit log + content fetch logs are exportable; for richer needs, see pre-release access below.
Trigger a remote command from another systemA user with the right role + dashboard or mobile app. No automation hook today.

The CMS-driven content pattern is the one we recommend most often. It moves the integration point from DisplaySync's API to your own content stack, where you have full control.

Pre-release access

If you have a concrete use case the patterns above don't cover, get in touch. For a small number of customers we work directly on what they need — sometimes that becomes part of the eventual public API; sometimes it's a one-off integration.

What helps when you reach out:

  • A description of the workflow you're trying to automate
  • The volume (how many signs / events / requests per day)
  • Your timeline
  • Whether you need read-only data or also write actions

Email [email protected] with [API EARLY ACCESS] in the subject. We'll either find a workaround using existing surfaces, or talk to you about an early-access arrangement.

No interface stability is promised for early access. If you build against a pre-release endpoint, you take the risk of routes changing.

When a public API ships

This page will be replaced with full reference material — endpoints, payloads, error responses, authentication, rate limits, webhooks — when the public API is available. Subscribe to the release notes to be notified.

Until then, the answer to most "what does the API offer?" questions is "contact us and we'll work it out together."

WebSocket event reference

DisplaySync uses Socket.io between dashboards/kiosks and the backend. The full event vocabulary, organized by direction. Cross-reference Glossary for terms like link_ack, pendingSign, requestId.

These events are not a public surface — they're scoped to first-party clients (dashboard, mobile app, desktop sign). Documented here so operators can reason about what travels over the WebSocket when triaging.

Kiosk → backend

EventWhat it carriesTriggered by
sign:registersign identity + device infosign-app startup
heartbeatstatus + metrics + modekiosk timer (5s)
sign:command_ackcommand resultcommand execution complete
sign:command_errorcommand failurecommand execution failure
sign:link_acklink result + sub-reasonLinkAckHandler (handshake flow)
sign:content_displayedcontent render startedrenderer event
sign:content_errorcontent render failedrenderer error
sign:content_unreachableURL reachability check failedreachability check
sign:content_recoveredURL reachability check passed (post-failure)reachability check
sign:analyticstelemetry batchkiosk timer or threshold
sign:logsrecent log lines (Fetch Logs response)dashboard request
sign:update_statuselectron-updater stateelectron-updater event
sign:claim_confirmedclaim acknowledgmentpost-claim flow
sign:statusstatus update from kiosk(rarely used)
sign:config_syncconfig delta from kiosklocal config change

Backend → kiosk

EventWhat it carriesTriggered by
sign:configfull config snapshotpost-register / on-demand
sign:claimedsign claimed by userclaim flow
sign:apply_linkURL to load + requestIdlinkSign / claimSign with handshake
sign:display_contentcontent piece to showschedule fire / manual override
sign:settings_updatepartial settings patchdashboard settings change
sign:refreshreload current URLdashboard command
sign:rebootrestart sign-app processdashboard command
sign:reboot_deviceOS-level rebootdashboard command
sign:set_monitoring_modeenter/exit monitoring modedashboard command
sign:updatetrigger electron-updater checkdashboard command
sign:fetch_logsrequest recent logsdashboard command
sign:unregisteredsign was unregisteredpost-unregister flow
sign:deletedsign was deletedpost-delete flow
heartbeat:ackheartbeat receivedper-heartbeat

See also