GraphQL API
Everything the TimeCampus web app, CLI, and extensions can do is available 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.
Endpoint
https://graphqlworkspaces.burdenoff.com/workspaces/graphql
For alpha:
https://alphagraphqlworkspaces.burdenoff.com/workspaces/graphql
For local development:
http://127.0.0.1:4003/workspaces/graphql
Auth
Standard Burdenoff Workspaces auth — see Authentication for full detail. Short version:
Authorization: Bearer <token>
x-workspace-id: <workspace-uuid>
x-workspace-id is REQUIRED. TimeCampus data is workspace-scoped.
Key types (TimeCampus-specific)
| Type | What |
|---|---|
TimeEntry | A recorded time entry (start, end, duration, project, task) |
Project | A project (name, status, budget, billable settings) |
Task | A task within a project (status, assignee, estimate) |
PomodoroSession | A focus/break session (start, end, type, interrupted) |
FocusScore | Aggregated focus metric for a period |
WorkPattern | Learned rhythm data for a user |
Expense | An expense entry (amount, category, receipt, approval status) |
Meeting | A meeting (duration, cost, action items) |
ApprovalRequest | A timesheet or expense approval request |
ResourcePlan | A team resource allocation plan |
Geofence | A location-based auto-tracking boundary |
ClientPortal | A client-visible project view |
Channel | A capture endpoint (calendar, email, editor, etc.) |
TimelineEvent | An assembled event on the unified timeline |
Example queries
query MyTimeEntries {
myTimeEntries {
id
startTime
endTime
durationSeconds
project { id name }
task { id name }
}
}
query ProjectWithTasks($projectId: ID!) {
project(id: $projectId) {
id
name
status
budgetHours
tasks {
id
name
status
assignee { id displayName }
}
}
}
Example mutations
mutation CreateTimeEntry {
createTimeEntry(input: {
startTime: "2026-07-27T09:00:00Z"
endTime: "2026-07-27T11:00:00Z"
projectId: "..."
taskId: "..."
description: "Deep work session"
}) { id }
}
mutation StartTimer {
startTimer(input: {
projectId: "..."
taskId: "..."
}) { id startTime }
}
mutation StopTimer($entryId: ID!) {
stopTimer(id: $entryId) { id endTime durationSeconds }
}
Discover the live schema
Introspection is disabled on the public endpoint. The authoritative schema is published through the Burdenoff Workspaces developer docs; the types above cover the TimeCampus-specific part of it.
Backend service integration
If you are building a workspace service that extends or integrates with TimeCampus:
- The backend is
wspace-timecampus-svcin the Burdenoff monorepo (~/products/wspace/timecampus/wspace-timecampus-svc/). - It uses Elysiajs + GraphQL Yoga + Prisma + Postgres 18 + AGE.
- Events are published via Redis Streams through
@burdenoff/be-sdk. - Auth is enforced at the gateway; the service receives actor headers (
x-actor-id,x-actor-type,x-workspace-id).
For platform integration guides, see ~/products/dev/platform/context/.