OSC / API reference
ShowTrak Server can be controlled remotely, so you can fire actions from lighting consoles, cue software, show‑control systems, or your own scripts. There are two ways in, and they use the same set of addresses:
- OSC: send OSC messages to the Server over UDP on port 3333. You can change the port, or switch OSC off entirely, under Preferences → Network.
- HTTP API: send a POST request to the Server on port 3000, using the same path. For example:
POST http://<server-ip>:3000/API/All/WakeOnLAN. Actions do not run on GET, so a web page or link preview can never trigger one by accident; a GET answers405.
The HTTP API is part of the same service as the Web UI, so it is always available while the Server is running. See Preferences for the Web UI options.
The Server has the same reference built in: open OSC/API Reference from the Settings menu. It is generated from the running Server, so it always matches the version you have installed.
How addresses work
Every address starts with /API/. Parts shown like :Slug or :ScriptID are placeholders. Replace each one with a real value:
- Slug: the short, human‑friendly name of a client, monitor, dummy client, FreeKiosk terminal, group or tag, e.g.
stage-left. Find it in that item's editor. Slugs never change when you rename something, so a cue you build today keeps working. - ScriptID: a script's ID, shown in the Script Manager.
- EventID: an event declared by an integrated client (an app built on the ShowTrak SDK).
- Method / ActionID / CommandID: fixed names, listed in full below.
Clients and groups still accept their old UUID or numeric GroupID in place of the slug, but slugs are the recommended way to address them.
Only the address is used. OSC arguments are ignored, so anything a command needs, such as a level, goes in the address as an extra segment: /API/FreeKiosk/lobby-tablet/brightness/40.
The HTTP API returns a small JSON response telling you whether the request succeeded. With OSC you'll see a brief on‑screen confirmation in the Server.
System
| Address | What it does |
|---|---|
/API/Shutdown |
Closes the Server (respecting any save / show‑mode prompts) |
/API/Shutdown/Force |
Closes the Server immediately, without prompts |
A single client
| Address | What it does |
|---|---|
/API/Client/:Slug/WakeOnLAN |
Sends a Wake‑on‑LAN packet to that client |
/API/Client/:Slug/RunScript/:ScriptID |
Runs a script on that client |
/API/Client/:Slug/TriggerEvent/:EventID |
Triggers an event on that client (integrated clients only) |
A group
| Address | What it does |
|---|---|
/API/Group/:Slug/WakeOnLAN |
Sends Wake‑on‑LAN to every client in the group |
/API/Group/:Slug/RunScript/:ScriptID |
Runs a script on every client in the group |
/API/Group/:Slug/TriggerEvent/:EventID |
Triggers an event on every integrated client in the group |
A tag
A tag covers every client it applies to, including clients that are members through a group or another tag.
| Address | What it does |
|---|---|
/API/Tag/:Slug/WakeOnLAN |
Sends Wake‑on‑LAN to every client carrying the tag |
/API/Tag/:Slug/RunScript/:ScriptID |
Runs a script on every client carrying the tag |
/API/Tag/:Slug/TriggerEvent/:EventID |
Triggers an event on every integrated client carrying the tag |
All clients
| Address | What it does |
|---|---|
/API/All/WakeOnLAN |
Sends Wake‑on‑LAN to every client |
/API/All/RunScript/:ScriptID |
Runs a script on every client |
/API/All/TriggerEvent/:EventID |
Triggers an event on every integrated client |
Dummy clients
| Address | What it does |
|---|---|
/API/Dummy/:Slug/Heartbeat |
Sends a heartbeat to a dummy client, keeping it online |
This is how an outside system checks in to a dummy client. Send this address on a schedule and the dummy stays online; stop sending it and the dummy goes offline. A dummy's slug is the ID you gave it when you created it.
Monitors
Some monitoring checks can also control the device they watch. The address names the monitor, the check method, and the action:
| Address | What it does |
|---|---|
/API/Monitor/:Slug/:Method/:ActionID |
Runs an action on a monitor |
/API/Monitor/:Slug/:Method/:ActionID/:Value |
Runs an action that needs a value |
The method is part of the address so that a monitor with two different kinds of check is never ambiguous. Today the projector check (pjlink) is the only one with actions:
| Method / Action | What it does |
|---|---|
pjlink/power.on |
Power On. A projector already warming up or cooling down refuses this until it settles. |
pjlink/power.off |
Power Off. Starts the cool‑down cycle. Most projectors refuse to power on again until it finishes. |
pjlink/shutter.close |
Close Shutter (A/V mute on). Blanks picture and sound without powering down. |
pjlink/shutter.open |
Open Shutter (A/V mute off) |
pjlink/video.mute.on |
Blank Picture. Mutes video only, leaving audio running. |
pjlink/video.mute.off |
Restore Picture |
pjlink/audio.mute.on |
Mute Audio |
pjlink/audio.mute.off |
Unmute Audio |
pjlink/volume.up |
Volume Up, one step per message* |
pjlink/volume.down |
Volume Down, one step per message* |
pjlink/image.freeze |
Freeze Image* |
pjlink/image.unfreeze |
Unfreeze Image* |
pjlink/input.set/<Input> |
Set Input. Two characters: the source type (1 RGB, 2 Video, 3 Digital, 4 Storage, 5 Network, 6 Internal) followed by the input number, e.g. 31 for Digital 1. The monitor's window lists the inputs that projector reports. |
* Needs a PJLink Class 2 projector. A Class 1 projector refuses the command, and ShowTrak reports that the projector does not support it.
If the projector refuses an action (still warming up, wrong password), you get its reason back as the error.
FreeKiosk terminals
Control an Android tablet running FreeKiosk. The address names the terminal and the command:
| Address | What it does |
|---|---|
/API/FreeKiosk/:Slug/:CommandID |
Sends a command to a terminal |
/API/FreeKiosk/:Slug/:CommandID/:Value |
Sends a command that needs a value |
| Command | What it does |
|---|---|
wake |
Wake Screen. Dismisses the screensaver. Does not turn a panel that is switched off back on; use screen.on for that. |
screen.on |
Screen On |
screen.off |
Screen Off. Without Device Owner, Device Admin or the accessibility service the tablet can only dim to 0%, so the panel stays on but looks black. |
lock |
Lock Device. Needs Device Owner, Device Admin or the accessibility service. |
reboot |
Reboot. Device Owner only. |
screensaver.on |
Enable Screensaver |
screensaver.off |
Disable Screensaver |
reload |
Reload Page (WebView mode only) |
audio.beep |
Beep. Handy for picking one tablet out of a rack. |
clearCache |
Clear Cache (WebView mode only). Clears the WebView cache, cookies and local storage, then reloads, which signs the page out of anything it was logged into. |
restart-ui |
Restart Kiosk UI. Restarts the FreeKiosk app without rebooting the tablet. Works without Device Owner. |
brightness/<0-100> |
Sets screen brightness. Ignored by tablets that have App Brightness Control switched off. |
volume/<0-100> |
Sets volume |
A few things to know:
- Reboot needs Device Owner. A tablet without it refuses the command and ShowTrak reports the refusal. If you just need to bring the kiosk back,
restart-uiworks on any tablet. - WebView‑only commands (
reload,clearCache) are refused when the terminal is set to External App or Media Player mode, because the tablet would accept them and silently do nothing. - Remote control must be enabled in FreeKiosk on the tablet. If it is switched off, every command fails with "remote control is disabled".
- Only the commands listed above can be sent. Nothing else in the FreeKiosk API is reachable through ShowTrak.
Reading data over HTTP
| Address | What it does |
|---|---|
GET /API/Clients |
Returns clients, monitors, dummy clients and FreeKiosk terminals as JSON. Passwords, passcodes and SNMP community strings in monitor settings are replaced with [redacted] |
Narrow the list with query parameters:
| Parameter | Example |
|---|---|
Type |
Remote, Monitoring, Dummy or FreeKiosk |
Status |
ONLINE, OFFLINE, DEGRADED or IDLE |
GroupID |
1 |
OperatingSystem |
Windows, macOS or Linux |
For example: http://192.168.1.10:3000/API/Clients?Type=FreeKiosk&Status=OFFLINE.
Examples
# OSC: wake every client
/API/All/WakeOnLAN
# OSC: reboot the lobby tablet
/API/FreeKiosk/lobby-tablet/reboot
# OSC: set the lobby tablet to 40% brightness
/API/FreeKiosk/lobby-tablet/brightness/40
# OSC: switch the stage-left projector to Digital 1
/API/Monitor/proj-sl/pjlink/input.set/31
# HTTP: run script "RestartComputer" on one client
curl -X POST http://192.168.1.10:3000/API/Client/stage-left/RunScript/RestartComputer
# HTTP: keep a dummy client alive (send every few seconds)
curl -X POST http://192.168.1.10:3000/API/Dummy/PlaybackMac/Heartbeat
Notes
- Keep the address segments in the exact order shown. Slugs are not case‑sensitive, but command and action names are: send
screen.off, notScreen.Off. - If an address can't be processed (wrong slug, unknown command, device offline or refusing), you'll get an error response and an error notification in the Server.
- Make sure your sender targets the Server's IP and the right port (3333 for OSC unless you changed it, 3000 for HTTP), and that your firewall allows the traffic.
- The OSC/API Debug Terminal in the Settings menu shows incoming requests live, which is useful when testing.