Before you start
- API key: All endpoints require a Bearer token. Admins can create API keys in the workspace settings under the API Keys section.
- Space scope: Agents always belong to a space, so all endpoints are nested under the space path (
/api/v1/spaces/{spaceId}/agents). The caller’s role in that space must grant read permission for the Agents feature to list or read agents, and write permission to create, update, or delete them. - Draft & published versions: Create and update operations write to the agent’s draft. Publishing makes the draft the live version that the Completion API uses by default. API responses always show the draft state. The
publishedfield tells whether a published version exists, andhasUnpublishedChangestells whether the draft differs from it. Who can see and use the agent is controlled separately via sharing in the nuwacom app. - Custom agents only: Built-in nuwacom system agents are not listed or readable through this API. Only agents created in the space (via this API or the app) appear. You can still chat with a system agent through the Completion API if you already know its ID.
Base URL
{customer-tenant} with your workspace’s tenant name.
Available endpoints
Agents
Related
Pagination
List agents is paginated. Control the page with two optional query parameters:
The response is an envelope: the agents are in
data, alongside pagination metadata.
offset by limit until hasMore is false:
Chat with an agent
To chat with an agent, use the OpenAI-compatible Completion API and pass the agent’s ID asagentId. The agent’s full configuration (system prompt, knowledge sources, model options) is applied automatically:
model field is required on the Completion API and acts as a fallback; when the agent has a model configured, the agent’s model wins.
By default, the published version of the agent is used. To chat with an agent that only exists as a draft (for example right after creating it via the API), additionally pass "agentPublished": false.
Example: create an agent
id in attachmentIds. Use folderIds or contentIds for knowledge folders and nuwacom documents.
The available model IDs for model can be retrieved via List available models.
The response contains the new agent’s id along with all its settings. The agent starts as an unpublished draft (published: false); use Publish an agent to make it the live version.
Actions
Actions are the tools an agent may call while chatting — built-in nuwacom tools (like web search or knowledge retrieval), an MCP server’s tools, or actions from a connected integration (Gmail, Outlook, …). Configure them via theactions array on Create and Update.
Each action has the following fields:
Built-in nuwacom action keys
Whenintegration is "nuwacom", key must be one of the app-supported built-in tools:
On update, the
actions array fully replaces the agent’s current draft actions. Send the complete desired set, or [] to remove all of them. Omitting actions leaves them unchanged. Like other changes, action edits apply to the draft — publish the agent to make them take effect for the Completion API.Skills
Skills are reusable instruction packages (see the Skills API) that an agent loads on demand while chatting. Attach them via theskillIds array on Create and Update; responses return the attached IDs in the same field.
- When an agent has attached skills, only those skills are loaded for it. An agent without attached skills gets none.
- Skill IDs must belong to the same space — create and discover them via List skills and Create a skill.
On update, the
skillIds array fully replaces the agent’s current draft skill set. Send the complete desired set, or [] to detach all skills. Omitting skillIds leaves them unchanged. Like other changes, skill edits apply to the draft — publish the agent to make them take effect for the Completion API.Availability: app and external embed
Where an agent can be used is controlled by two independent switches, both configurable on Create and Update:embedOptions supports the following keys:
appEnabled, embedEnabled, and embedOptions are draft settings like everything else — publish the agent to make them take effect. Publishing an agent with embedEnabled: true makes the external widget live and therefore requires a non-empty embedOptions.domainWhitelist; otherwise the publish request is rejected with 400.