Skip to main content
The Workspace API gives external systems read-only access to workspace-level and per-agent data — the same information visible in the Workspace Explorer capability, but accessible over HTTP.
Every endpoint on this page is backed by the Workspace Explorer capability, so the same data is reachable two ways: over HTTP with a workspace API key, or by giving an agent the Workspace Explorer capability and asking it in plain language. Both routes hit the same code and apply the same access rules and redaction. Asking an agent is usually faster for exploring or one-off questions; the HTTP API is for systems that need the data on a schedule.
This page is the guide. For the machine-readable spec — every endpoint with its parameters, response fields, and error codes — see the API Reference tab in the top navigation.

Base URL

All requests go to the Abundly service host:
Enterprise customers on a dedicated deployment have their own service host, in the form https://<your-tenant>.service.abundly.ai.

Authentication

Requests are authenticated with workspace API keys (wk_...) that have the Workspace read API scope enabled. Include the key as a Bearer token:

Enabling workspace API access

  1. Go to Workspace Settings → API Keys
  2. Create a new key (or edit an existing one)
  3. Check the Workspace read API scope
  4. Save and copy the key
Workspace API keys grant read access to all workspace data including chat histories, messages, member information, and agent configurations. Keep them secure and rotate them regularly.

Workspace endpoints

All endpoints are GET requests under /workspaceapi/. No workspace ID is needed in the URL — the key identifies the workspace.

Reading the agent list

/workspaceapi/agents returns one entry per agent. id, name, groupId, adminOnly, enabled, capabilities, tags, updatedAt and isPrivate are always present; description, imageUrl, adminRestriction, agentDiscoverability, dailyCreditLimit, criticality and valueEntries appear when they are set. capabilities is a mixed array: plain strings for capabilities with no settings, and { name, settings } objects for those that have them. Normalise to the name before counting or comparing:
Adding ?includeOverview=true attaches an overview object with lastUsageByAgent (a map of agent id to timestamp) and reducedAgents, which carries an entry for every agent — private ones included — with its access, full instructions text, llmPreferences, httpApis, mcpServers, and the exposure flags (mcpServerExposed, httpApiExposed, webhooksExposed, widgetExposed, documentApiExposed).

Who owns an agent

There is no createdBy field. Ownership is expressed through the access object on each agent: To attribute an agent to the person who built it, take the access.users[] entry with level admin. A single ?includeOverview=true call covers the whole workspace, including private agents, so builder attribution needs no per-agent requests.

Per-agent endpoints

Drill into a specific agent’s data. The agent must belong to the workspace and not be private — see Private agents below.

Private agents

An agent whose default access is Nothing (access.customer is none) is restricted to a specific list of users. The Workspace API has no calling user to check that list against, so it treats every private agent as off-limits for content reads.
Private agents appear in /agents, in overview.reducedAgents, in overview.lastUsageByAgent and in /credits agentUsage — but every /agents/:agentId route and subresource returns 403 for them. A loop that lists agents and then fetches each one’s detail will silently skip them, and any count built that way will be too low.
The 403 says exactly what happened:
The reliable pattern for workspace-wide reporting is to take everything from one /agents?includeOverview=true call — which already contains access, instructions, integrations and usage timestamps for every agent — and to treat the per-agent endpoints as a drill-down for individual non-private agents rather than something to iterate. Check isPrivate before requesting detail for an agent.

Pagination

Only two endpoints paginate: Every other endpoint returns its complete set in one response, and page/pageSize are ignored there.

Credits are a live snapshot

/workspaceapi/credits reports the current state only: creditsUsedToday per agent and creditsUsedThisMonth per team, alongside the workspace balances. It accepts no date parameters and there is no historical endpoint — if you need a time series, snapshot the response yourself on a schedule. agentUsage is keyed by agent id and covers every agent in the workspace, including disabled and private ones. groupUsage is keyed by team id.

Documents and response size

/workspaceapi/agents/:agentId/documents inlines the complete textContent of every document in the list response. That is deliberate — it makes one call enough for an audit or a backup — but on an agent with many large documents the response gets big. Add ?excludeContent=true to get metadata only. textContent and data are dropped from every entry; names, mime types, scopes, and folder structure stay. Use it to enumerate documents cheaply, then fetch the ones you need individually from /documents/:docId.

Tool usage

/workspaceapi/agents/:agentId/tool-usage/:toolName counts how often one specific tool was called by one agent, across both chat conversations and trigger runs.

Tools are not capabilities

A capability is a bundle of tools that you switch on for an agent. A tool is a single action the agent can take. :toolName expects the tool name, which is always lowercase with underscores — for example code_execution, send_email, get_document, query_document_data. Capability names such as codeExecution or readDocuments are not tool names and will never match. A capability like readDocuments contains a dozen or more tools, so there is no single usage number for it — query the individual tools and add them up.

Finding the tool names

The quickest way is to ask an agent. Every agent knows the names of its own tools, so “What tools do you have, and what are they called?” gets you the exact strings to query. To ask about a different agent — “Which tools has Buggsy used this month, and how often?” — use an agent with the Workspace Explorer capability, which can read across the workspace. To do it over the API, read the steps of an activity log entry. Each step with a toolName gives you a name you can query directly:
Steps of type thinking and text have no toolName, so expect null in that list.

Reading the response

Unknown tool names

A name that does not exist returns 404, so a typo or a capability id fails loudly instead of looking like an idle tool:
200 with totalCount: 0 therefore means something specific: this is a real tool, and this agent has not called it in the window.
Existence is checked against the platform’s tools plus the MCP tools your agent has discovered — not against the capabilities the agent has enabled. Asking about a real tool the agent doesn’t have returns 200 with a zero count, not 404. A tool that already has usage recorded never returns 404, even if the MCP server behind it has since been renamed, disabled, or removed.
totalCount is the complete count over the window. recentCalls is only the most recent calls, and it is not paginated: For a complete call history rather than the latest few, page through /activity-log with ?page= and ?pageSize= and read the steps.

Example

Status codes

Every response from /workspaceapi/, including errors, is JSON. Errors carry a single error field with a human-readable message:

Rate limits

There is no enforced rate limit on the Workspace API today, and responses carry no rate-limit headers. Keep request rates reasonable — roughly one request per second is plenty for reporting and sync workloads, and the workspace-wide endpoints are designed so that most jobs need only a handful of calls. Limits may be introduced later, so avoid building anything that depends on unlimited throughput.

Data redaction

Credential values, API keys, and secret values are automatically stripped from all responses — the same redaction rules applied by the Workspace Explorer capability. Secret names and metadata are included so you can see what’s configured without exposing sensitive values.

API key scopes

Workspace API keys support two scopes that can be enabled independently: Existing keys default to Custom agent endpoints only. Enable Workspace read API explicitly to use the endpoints documented on this page.

Learn more

API Access

Expose agents as HTTP APIs, MCP servers, webhooks, or chat widgets

Access Control

Workspace roles, team permissions, and agent access levels