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.

Control API reference
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
← Secure and monitor the Control API
Next
API reference →
Contact support →
You are viewing documentation for Buttons 1.8.See the docs for Buttons 1.6
Buttons/API/Control API reference

Control API reference

The Control API's actual endpoints, request/response schemas, and error shapes are generated directly from the running system, not maintained by hand here: this page is a map to that generated reference, plus the handful of things worth knowing before you go read it.

Where the reference actually lives#

  • Interactive docs: /control/docs: a browsable reference (unauthenticated, so you can read it without a key), rendered from the live OpenAPI spec.
  • Raw OpenAPI spec: /control/api/openapi.json: the same spec as plain JSON, useful for generating a client or importing into your own API tooling.
Both reflect exactly what this running instance of Buttons actually supports: always check them directly for the current endpoint list, parameters, and schemas rather than relying on a separate written copy that can drift out of date.

How versioning works#

Each API group (Cuelists, Connections, Positions, Surfaces, Workflows, Tags, Backups, Routing) is versioned independently. When a group needs a breaking change, Buttons introduces a new version path alongside the existing one (for example, /control/cuelist/v2 next to /control/cuelist/v1) rather than changing v1's behavior out from under existing integrations. Older versions keep working after an upgrade, but will eventually be deprecated and removed, so prefer the latest version documented for a group when starting new work.
Each endpoint's entry in the generated docs notes the Buttons version it was introduced in, so you can tell whether a given capability is available on the version you're running.

License tier required per group#

API group
Minimum license tier
Backups
Individual
Connections
Individual
Cuelists
Individual
Positions
Individual
Surfaces
Individual
Tags
Individual
Workflows
Individual
Routing
Pro
A key's own permissions (see Get started with the Control API) still control exactly what it can do within a group: the license tier above is a separate, prerequisite gate on the group as a whole.

How errors are shaped#

Every response uses one of a small, shared set of error shapes ({ message, code }) rather than each endpoint inventing its own. A handful of these apply across the whole API regardless of which endpoint you call: Forbidden, Too Many Requests, and two license-related errors for an under-licensed group or an exhausted license. Beyond those, each endpoint's own documented errors (for example, Not Found or Conflict) are listed specifically for that endpoint in the generated reference: don't assume every endpoint can return every error code; check the specific endpoint's entry.
A separately-shaped validation error ({ message, errors: [{ path, message }] }) can also appear when a request itself doesn't match the expected schema: this is distinct from the tagged error codes above and reflects a request that failed input validation before reaching your endpoint's own logic.

If you get stuck#

What you see
What to try
You're not sure if an endpoint exists on your version.
Check /control/docs on your own running instance: it always reflects what's actually available, and each endpoint notes its introduction version.
A response's error doesn't match what you expected.
Check whether it's one of the whole-API errors (Forbidden, Too Many Requests, license-related) or an endpoint-specific one documented on that particular endpoint.
You're building against v1 of a group and heard v2 exists.
Both keep working: there's no forced cutover, but prefer v2 for anything new.
You need a machine-readable spec for codegen.
Use /control/api/openapi.json directly rather than the interactive docs page.

Where to go next#

  • Get started with the Control API
  • Secure and monitor the Control API

Was this helpful?

Was this helpful?

0 of 0 users found this page helpful