Bitfocus AS
logo
logo
Bitfocus AS
logo
logo
Sign upSign in

Loading...

Bitfocus

Subscribe to our newsletter

The latest news, articles, and resources, sent to your inbox.

FacebookInstagramGitHubYouTubeLinkedIn

Products

  • Buttons
  • Companion

Integrations

  • Supported Devices
  • Developer Community
  • Connection Development

Support

  • Support Overview
  • Documentation
  • Video Tutorials
  • Community Forum

Sales

  • Resellers & Integrators
  • Buttons Pricing

Updates

  • Case Studies
  • Events & Trade Shows
  • Press Releases
  • Product Updates
  • Webinars

Legal

  • Legal Overview
  • Privacy Policy
  • Buttons EULA
  • Terms & Cookie Policy

Company

  • About us
  • Press kit
  • Careers

© 2026 Bitfocus AS. All rights reserved.

External control
Docs for
Overview
Getting started
What is Bitfocus Buttons?
Install Buttons and get started
Manage your Buttons license
Activate Buttons offline
Find your way around Buttons
Create your first backup
Add an ATEM connection
Choose a control method
Choose an installation path
Install Buttons on Debian or Ubuntu
Understand HA clustering
Kubernetes HA
Update or remove Buttons
Positions
Understand positions
Create a position
Add controls and sections to a position
Create your first button
Use a connection's presets
Build more capable button actions
Add more feedback to a button
Organize controls in a section
Shift Section
Organize controls with a Folder Section
Add a Popover Section
Build and reuse a Shared Section
Build a Router Section
Understand Custom Routers
Custom Router panel
Surfaces
Surface compatibility
Add and attach a surface
Device orientation
Connections
Update a connection's module safely
Monitor and troubleshoot a connection
Router integrations
VideoHub and AJA KUMO
Utah Scientific BPS
Generic SW-P-08
Nevion VideoIPath
Arkona BLADE//runner
Routing
Physical routing
Configure ports and labels
Take a physical route
Understand route status
Topology graph
Routing Presets
Get started with virtual routing
Configure Nested Shapes
Reverse routing
Tielines
Routing Projects
Routing settings
Troubleshoot a route
Tally
Understand the Tally system
Send ATEM tally and labels to a UMD
Interpret Active Tally state
TSL/UMD connections
Diagnose tally problems
NMOS
Understand NMOS in Buttons
Connect Buttons to an NMOS Registry
Built-in Registry Server
Configure NMOS connections
Discover and adopt
Browse the NMOS inventory
Manage NMOS multicast addresses
Diagnose NMOS problems
Understand Cuelists
Build a Cuelist
Read and advance a running Cuelist
Control a Cuelist from a Position
Workflows
Understand workflows
Build your first workflow
Reuse a group of workflow nodes safely
Troubleshoot a workflow
Recipes
Sequence a timed automation
Call an HTTP endpoint from a workflow
REST endpoint
Use variables
Understand variable scope
Understand nested variables
Update expressions for v1.8
Plan and use Tags
Access
Create and manage users
Create roles and assign permissions
Grant access to specific resources
Show different controls by role
Sessions
Set up PIN and NFC sign-in
SSO
Get started with SSO
Connect a generic OIDC provider
Connect LDAP or Active Directory
Map identity claims to roles
Secure a Buttons deployment
Integrations
External control
Connect to Bitfocus Listener
USB Relay
Install USB Relay on Windows
Install USB Relay on macOS
Install USB Relay on Linux
Install USB Relay on a Raspberry Pi
Get started with the Control API
Secure and monitor the Control API
Control API reference
API reference
Administration
Enable and manage installable features
Services and health
Configure and monitor scheduled backups
Restore a backup and verify it
Export or import Buttons configuration
Store and rotate connection secrets
Replace the HTTPS certificate
HA backup and recovery
Settings
Collect support information
Reference
Glossary
Button Inspector reference
Network ports reference
Expressions
Internal actions reference
Routing Presets panel reference
Startup configuration reference
Workflow nodes
Connection workflow nodes
Workflow workflow nodes
Internal workflow nodes
Position workflow nodes
API workflow nodes
Utility workflow nodes

Loading...

Previous
← Integrations
Next
Connect to Bitfocus Listener →
Contact support →
You are viewing documentation for Buttons 1.8.See the docs for Buttons 1.6
Buttons/Integrations/External control

External control

Buttons offers several distinct ways for another system to reach into it: a general-purpose API, network-listening workflow nodes, a narrow surface-emulation protocol, and an inbound tally listener. They serve different jobs. This page is a chooser: what each one is actually for, what it requires, and which one fits your situation.

The Control API: the supported general-purpose interface#

If you need another system to read state, trigger actions, or manage resources in Buttons, this is the one to reach for first. It's the only interface Buttons documents as a general-purpose, supported way for an external system to operate it.
  • What it's for: reading and controlling positions, connections, routing, NMOS, surfaces, workflows, tags, and more, from a script, show-control system, or automation tool.
  • Requires: a scoped API key with the specific permissions your integration needs, and at minimum an Individual license (Routing access specifically requires Pro).
  • Auth: Authorization: Bearer <token>, rate-limited system-wide.
See Get started with the Control API and Secure and monitor the Control API.

Workflow network nodes: build a custom listener yourself#

Workflows can open their own network listeners as part of a graph you build: useful when you need a very specific, ad hoc entry point (say, a lighting console pushing OSC messages, or a small REST endpoint a third-party tool calls directly) rather than the Control API's general resource model.
  • OSC Listener and REST Server are fully supported, released nodes. REST Server has its own independent Bearer-token authentication and rate limiting, configured on the node itself; OSC Listener has no authentication of its own: anything that can reach the configured UDP port can send it messages, so keep it off any network you don't trust.
  • TCP Server, UDP Receiver, and WebSocket Server (along with their outbound Client counterparts) are experimental: hidden by default, and their configuration and support status can change without notice. Don't build a production integration around them.
Each of these is opened per-workflow, by an admin dragging the node onto a canvas and configuring a port: it's not a fixed system endpoint like the Control API, and it isn't covered by the Control API's authentication or rate-limit settings.
See the workflow node reference for configuration details on each node.

Third-party surface protocol: for building a device, not an integration#

Buttons has a certificate-authenticated WebSocket protocol that lets a device announce itself and send button presses, exactly as a Stream Deck or other adopted panel would. It's deliberately narrow: it can report button presses and receive rendered button state, nothing more; it can't call arbitrary actions or read variables the way the Control API can.
This exists to let hardware or an emulator act as a surface, not as a general integration point. It's off by default (a feature flag has to be enabled), requires a paid license, and there's no public developer guide for building against it. Unless you're specifically building surface hardware or an emulator, use the Control API instead.

TSL Server (Listen): inbound tally and labels only#

A Tally connection set to Server (Listen) lets another system (a switcher's own tally output, or a third-party controller) send tally state and labels into Buttons over the network. This is a real inbound listener, but it's scoped to tally/label data only; it can't trigger actions or otherwise operate Buttons. See Configure TSL connections.

Bitfocus Listener: the reverse direction#

Bitfocus Listener is easy to mistake for an external-control interface, but it runs the other way: Buttons is the one that connects out and drives Listener, triggering keypresses and shell commands on the machine Listener is installed on. There's no path for an external system to use Listener to trigger something inside Buttons. See Connect to Bitfocus Listener.

What isn't a supported external interface#

Buttons' own web interface talks to its backend using an internal API authenticated by browser session cookie, not a bearer token: it has no supported path for external callers and isn't documented as one. There's also no WebSocket or streaming endpoint on the Control API itself for subscribing to live state changes; if you need live updates, poll the Control API or build that logic into a workflow instead.

If you get stuck#

What you need
Use this
General read/write access to Buttons resources from a script or another system.
The Control API.
A very specific inbound listener (OSC, a small REST endpoint) tied to one workflow's logic.
A Workflow OSC Listener or REST Server node.
You're building hardware or an emulator that should act like a Stream Deck.
The third-party surface protocol: expect to work from the protocol schema directly, since there's no developer guide.
Tally or label data coming from a switcher or third-party controller.
A Tally connection set to Server (Listen).
You want Buttons to trigger something on another machine.
Bitfocus Listener: remember it only runs in that direction.
Something claims to integrate via Buttons' internal web API.
That's not a supported path: point it at the Control API instead.

Where to go next#

  • Get started with the Control API
  • Secure a Buttons deployment

Was this helpful?

Was this helpful?

0 of 0 users found this page helpful