Skip to content

Web displays

Create a display with no device behind it: routes, connection URL, the two states, deletion, and the limits compared with a device.

5 minute readAPIUpdated: 10/25/2026

On this page

Before you start

For
Anyone who creates displays from their own system or wants an assistant to show something without anyone connecting hardware.
Prerequisite
an ak_… key with the fleet.web-display.manage permission, which is key-capable and can be delegated. The organization also needs the Displays without an agent capability.

A web display is a display with no device behind it, only a browser tab. This page lists the routes, the way from creation to the first picture, the two states it can live in, and the limits that distinguish it from a device.

What a web display is

A full-fledged display of the fleet: It has an identifier ply_…, a name, a location, a program, and a booked seat. What it lacks is the machine: It runs in a browser page, and its whole identity is a secret in the storage of that browser.

This leads to the peculiarity of this approach: Creating and connecting are two steps, and no software can do the second. The platform creates the display and issues an address, and a person must open this address in a browser on the target device. Until then, the display is in the state paired-not-claimed, which the interface shows as “Not connected”.

State Meaning
paired-not-claimed created, but no browser has opened the address yet. Already occupies a booked seat.
online / stale / offline a browser is attached to it. As with any display, the state comes from the age of the last check-in

The routes

Route Permission Note
POST /v1/web-displays fleet.web-display.manage or fleet.player.pair 201. Creates the display and the connection URL in one step
POST /v1/web-displays/{id}/link fleet.web-display.manage or fleet.player.pair 201. A new URL for an existing web display
POST /v1/web-displays/batch fleet.web-display.manage or fleet.player.pair 201. Creates up to 50 displays in one step (count, optionally locationId and namePrefix), with numbered names and one connection URL each. All or nothing: if the booked seats do not suffice, none is created. The response has the shape of a provisioning file, and each address works once and expires after 24 hours
DELETE /v1/web-displays/{id} fleet.web-display.manage removes the display and the browser access from the inventory
GET /v1/web-displays/address fleet.web-display.manage or fleet.player.pair the address of the display software, for panels onto which no address can be copied

All routes carry x-stability: beta, including POST /v1/web-displays/batch. Their shape can still move, and the flow itself has already shifted once in this wave (earlier, the display was created only when the link was opened).

For deletion, fleet.player.pair is not enough here. Whoever holds the pairing permission has been given a permission to connect and none to remove. Silently giving them one here would turn an old consent into a new one.

Create and connect

curl -sS -X POST "$SZENERA_API/v1/web-displays" \
  -H "Authorization: Bearer $SZENERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Schaufenster links", "locationId": "loc_01KFB7QPW0LOCATION00000001" }'
{
  "playerId": "ply_01KFB7QPW0PLAYER0000000001",
  "token": "drc_01KFB7QPW0TOKEN00000000001",
  "connectUrl": "https://webplayer.szenera.com/?reconnect=drc_01KFB7QPW0TOKEN00000000001",
  "expiresAt": "2026-09-11T10:00:00.000Z"
}

connectUrl is the address for the person at the target device. It starts with the address of the display software, which GET /v1/web-displays/address also names, and it is valid once: As soon as a browser has opened it, the token is used up. The deadline depends on whether a browser is already attached to this display: 24 hours for the first address, two hours after that.

An initial program is deliberately not provided on this route. The assignment has its own route with its own checks, so a display with content is created in two calls:

curl -sS -X PUT "$SZENERA_API/v1/scheduling/players/ply_01KFB7QPW0PLAYER0000000001/program" \
  -H "Authorization: Bearer $SZENERA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "program": { "kind": "schedule", "scheduleId": "sch_01KFB7QPW0SCHEDULE0000001" } }'

The order does not matter: A display that was assigned a program before it was connected shows it as soon as the browser is there.

A new address

The reason is always the same: The browser no longer knows that it is this display (cleared storage, a fresh profile, a different machine), or the first address expired without anyone opening it.

curl -sS -X POST "$SZENERA_API/v1/web-displays/ply_01KFB7QPW0PLAYER0000000001/link" \
  -H "Authorization: Bearer $SZENERA_API_KEY"

Whoever opens the new address takes over the display. The browser that showed it until then loses it, together with its running renderer sessions, and all older open addresses of the same display expire. Name, location, program, history, and the booked seat remain untouched. That is exactly where this differs from creating a new display.

Delete

curl -sS -X DELETE "$SZENERA_API/v1/web-displays/ply_01KFB7QPW0PLAYER0000000001" \
  -H "Authorization: Bearer $SZENERA_API_KEY"

Both halves disappear: the display in the fleet and the browser device behind it. The booked seat becomes free, and program, override, and history are dissolved. A display with a device is rejected at this route. For that there is DELETE /v1/players/{id}, which remains reserved for a person in a session.

What a web display cannot do

No machine stands behind the surface that could be controlled. That is not a gap in the interface but the nature of the thing:

Not possible Why
System image, channel, fallback layer Whoever looks after the computer maintains the browser and the operating system
Switching the panel on and off, panel brightness CEC and DDC/CI address the machine at the cable, not a page in a browser
Restart of the machine The tab is reloaded, and the computer stays untouched
Screenshot without an extension No web standard allows a page to photograph itself
Two panels on one browser A second one needs a second browser profile and becomes a display of its own with its own seat

If something goes wrong

Symptom Meaning Solution
409 WebDisplay.NotABrowserDisplay The identifier belongs to a display with a device. DELETE /v1/players/{id} or POST /v1/devices/{id}/reconnect-link, both for people in a session.
402 Billing.LicensesExhausted All booked seats are occupied. The response names booked and used. Book an additional seat or delete a display that is no longer needed.
403 Billing.FeatureNotEntitled The Displays without an agent capability is switched off for this organization. Have the platform operator enable it.
404 Location.NotFound when creating The named location identifier does not belong to any location of this organization. Take the identifier from GET /v1/locations.
The address leads to a pairing code The token was used up or expired, and the browser then registered as a new device. Issue a new address and open that one. The empty device stays unpaired and expires.