The dashboard API is an aggregation layer over the other resources. Instead of making a dozen calls to build a screen, you make one call and get a single JSON object shaped to the screen’s needs. These endpoints are read-only and cached (1 to 5 seconds depending on the screen). If you need live data (for example, a chart that ticks every second), subscribe to webhooks or the WebSocket stream instead of polling these endpoints. Use cases:
  • Building a custom UI on top of Company Agents
  • Writing a terminal dashboard (CLI company-agents watch)
  • Populating a cockpit or situation-room screen
  • Feeding a Slack daily digest bot

Endpoints

MethodPathPurpose
GET/v1/companies/{cid}/dashboard/overviewTop-level state of the company
GET/v1/companies/{cid}/dashboard/inboxApprovals + handoffs + questions
GET/v1/companies/{cid}/dashboard/healthRuntime and agent health
GET/v1/companies/{cid}/dashboard/costCost panel data
GET/v1/companies/{cid}/dashboard/orgOrg chart data
GET/v1/companies/{cid}/dashboard/activityRecent activity stream

Overview

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/overview \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns:
{
  "company": { "id": "cmp_a1b2c3", "name": "Ampha Group", ... },
  "teams": [
    { "id": "tm_...", "name": "Engineering", "agentCount": 5, "tasksInFlight": 3 },
    ...
  ],
  "inbox": {
    "approvals": 2,
    "handoffs": 0,
    "questions": 1,
    "total": 3
  },
  "tasks": {
    "queued": 7,
    "running": 4,
    "review": 2,
    "handoff": 0,
    "completedToday": 23,
    "failedToday": 1
  },
  "cost": {
    "today": 4.88,
    "thisPeriod": 142.38,
    "budget": 500,
    "remaining": 357.62,
    "forecastEndOfPeriod": 412.50
  },
  "health": {
    "activeAgents": 7,
    "degradedAgents": 1,
    "failingAgents": 0,
    "runtimeServices": { "healthy": 6, "degraded": 0, "down": 0 }
  },
  "recentActivity": [
    { "at": "2026-04-11T10:42:17Z", "action": "approval.approved", "summary": "..." },
    ...
  ]
}
Everything a top-of-dashboard needs, in one call.

Inbox

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/inbox \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns the board operator’s inbox, grouped by category:
{
  "approvals": [
    { "id": "apr_...", "agent": "...", "action": "...", "expiresAt": "..." }
  ],
  "handoffs": [...],
  "questions": [...],
  "breaches": [...]
}
This is the “what needs your attention right now” view. Order inside each category is by urgency (approvals sorted by expiresAt, breaches sorted by severity).

Health

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/health \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns:
{
  "orchestrator": { "status": "healthy", "uptime": 1234567 },
  "database": { "status": "healthy", "flavor": "pglite", "sizeBytes": 104857600 },
  "mcpServer": { "status": "healthy" },
  "agents": [
    {
      "id": "agt_...",
      "name": "Senior Engineer",
      "status": "active",
      "currentTaskId": "iss_...",
      "leaseExpiresAt": "...",
      "tokenBudget": { "used": 140000, "limit": 250000 },
      "loopRisk": 0.12
    }
  ],
  "runtimeServices": [
    { "name": "web-preview", "status": "healthy", "runId": "run_..." },
    { "name": "crawler", "status": "degraded", "reason": "rate limited" }
  ]
}
The loopRisk field is the orchestrator’s estimate of how close this agent is to being flagged as looping, based on output-hash dedup rate. Values above 0.7 are worth watching.

Cost

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/cost \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns the cost panel shape: totals, breakdowns, trend arrays, forecast, and per-team spend. Same numbers as /v1/companies/{cid}/costs but shaped for rendering.

Org chart

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/org \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns the five-layer org chart with parent pointers:
{
  "nodes": [
    { "id": "agt_chair", "name": "Chair", "role": "chairperson", "parentId": null },
    { "id": "agt_ceo", "name": "CEO", "role": "ceo", "parentId": "agt_chair" },
    ...
  ],
  "layout": {
    "columns": 8,
    "layers": 5
  }
}
The layout hints are an optimization for clients that want to draw the org chart without doing their own layout math. You can ignore them.

Recent activity

curl -s http://localhost:3100/v1/companies/cmp_a1b2c3/dashboard/activity \
  -H "Authorization: Bearer $CA_API_TOKEN"
Returns the most recent 50 activity entries across all categories, pre-rendered with short human-readable summaries so you do not have to build your own formatter:
{
  "entries": [
    {
      "at": "2026-04-11T10:42:17Z",
      "summary": "Alice approved 'publish blog post' for Content Writer",
      "icon": "check",
      "color": "emerald",
      "link": "/approvals/apr_..."
    }
  ]
}

Caching and live data

Dashboard endpoints are cached briefly (overview and inbox: 2s; health and cost: 5s; org: 60s). For live data, use WebSockets:
ws://localhost:3100/v1/companies/{cid}/stream
The WebSocket emits the same events as the webhook system but pushed over a single persistent connection. See the WebSockets section of the overview page for details.

Next

  • Companies — the resources underneath the dashboard aggregations
  • Activity — the source of the recent activity feed
  • Costs — the source of the cost panel