GraphQL API (backend)
The Vibecontrols backend (the Vibecontrols backend) is a GraphQL surface inside Burdenoff Workspaces. You query it via the workspaces gateway.
What you'll learn
- The endpoint
- Auth headers
- Key types
- How to discover the live schema
Endpoint
https://graphqlworkspaces.burdenoff.com/workspaces/graphql
(Or your tenant's equivalent if self-hosted.)
Auth
Standard Burdenoff Workspaces auth — see platform auth for full detail. Short version:
Authorization: Bearer <token>
x-workspace-id: <workspace-uuid>
x-workspace-id is REQUIRED. Vibecontrols data is workspace-scoped.
Key types (Vibecontrols-specific)
These are the major models exposed via federation:
| Type | What |
|---|---|
Agent | A connected agent (hostname, platform, version, isActive, lastHeartbeat, tunnelUrl) |
Target | A connection destination (DIRECT, SSH, RDP, VNC) |
Vibe | A project context (type, status, path, gitBranch, environmentVariables) |
Session | A live terminal session (type, status, ttydUrl, accumulatedSeconds) |
VibeDeck | An action-button grid (gridColumns, gridRows, buttonSize, colorTheme) |
VibeDeckButton | A single button (row, column, actionType, command/script/webhookUrl) |
VibeDeckShareLink | Token-based share for a VibeDeck |
SessionShare | Direct share of a session with a user |
SessionShareLink | Token-based session share |
SessionCollaborator | Active participant on a shared session |
Note | Markdown attached to a vibe |
AiPrompt | Reusable prompt template |
Configuration | Scoped key-value config |
Webhook | Outbound HTTP delivery config |
AiToolEvent | Telemetry from external AI tools |
Action / ActionExecution | Reusable command/script/webhook + its runs |
Example queries
query MyAgents {
myAgents {
id
name
hostname
platform
isActive
lastHeartbeat
tunnelUrl
}
}
query VibeWithSessions($vibeId: ID!) {
vibe(id: $vibeId) {
id
name
type
status
path
environmentVariables
sessions {
id
name
type
status
ttydUrl
}
}
}
Example mutations
mutation CreateVibe {
createVibe(input: {
name: "my-api"
path: "/home/me/code/my-api"
type: REPOSITORY
}) { id }
}
mutation CreateSession {
createSession(input: {
vibeId: "..."
agentId: "..."
type: TMUX
name: "dev"
}) { id ttydUrl }
}
mutation RotateAgentApiKey($agentId: ID!) {
rotateAgentApiKey(agentId: $agentId) { newKey }
}
Subscriptions
subscription AgentHealth($agentId: ID!) {
agentHealth(agentId: $agentId) {
isActive
lastHeartbeat
}
}
subscription SessionOutput($sessionId: ID!) {
sessionOutput(sessionId: $sessionId) {
chunk
timestamp
}
}
WebSocket transport via graphql-ws at the same URL with wss://.
Discover the live schema
The composed live API schema is published to the schema registry as the live registry. Browse there for the authoritative schema with every field, type, and @rbac directive.
Locally: the agent's REST API does NOT expose this — it's only on the backend.