GraphQL API (backend)
Everything the Vibecontrols web app and CLI can do is available to you through a GraphQL API on the Burdenoff Workspaces platform. Every operation is authenticated and permission-checked against the calling user's role in the workspace.
What you'll learn
- The endpoint
- Auth headers
- Key types
- How to discover the live schema
Endpoint
https://<your-workspaces-graphql-endpoint>/graphql
Your workspace's GraphQL endpoint is listed in the platform developer docs (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 the API exposes:
| 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
Introspection is disabled on the public endpoint. The authoritative schema — every type, field, and argument — is published in the Burdenoff Workspaces developer docs; the types above cover the Vibecontrols-specific part of it.
Locally: the agent's REST API does NOT expose this — it's only on the backend.