# External control

> Compare the ways an external system can reach into Buttons and pick the interface that fits your integration.

Buttons offers several distinct ways for another system to reach into it: a general-purpose API, network-listening workflow nodes, 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, surfaces, workflows, cuelists, tags, routing, and backups 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> . The rate limit is set system-wide and counted separately for each key. 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 the network listener nodes available in workflows. 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 and listens on every network interface: anything that can reach the configured UDP port can send it messages, so keep it off any network you don't trust. 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. 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. Tally needs a Pro or Enterprise license. 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. For routing, GET /control/routing/v1/active-sources/changes/<sessionId> makes polling cheaper: the first request for a session ID you choose returns every active source, and each later request returns only the destinations that changed since the previous one. A session belongs to the API key that opened it and expires after 10 minutes without requests. 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. 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
