Developers
Access the Cloudax Connect API to programmatically manage agents, phone numbers, campaigns, contacts, and calls, and pull call, tool, webhook, and request logs for monitoring and reconciliation. The API follows RESTful conventions and returns JSON responses for all endpoints.
API Access add-on
Getting Started
Confirm API availability
Open the Developers page
Create a personal API key
Creating API Keys
Cloudax supports two API-key types:
- Personal keys belong to your account. They can be read-only or read-and-write, but their effective access is always intersected with your current role permissions in the target organisation. They stop working for an organisation immediately if your membership is removed, personal-key access is disabled by RBAC, API Access is unavailable, or the organisation is archived or suspended.
- Service-account keys belong to one organisation and continue working independently of an individual's membership. Organisation administrators configure their scopes, rate limit, optional expiration, and IP allowlist from the Developers page.
Both types have:
- Name: a human-readable label such as "Cursor on my laptop" or "Production integration".
- IP allowlist: optional IPv4 or IPv6 addresses and CIDR ranges. An empty allowlist permits requests from any IP.
Store your key securely
Available Scopes
Scopes control which endpoints a service-account key can access. Personal keys do not expose individual scope selection: read-only keys request all supported read operations, while read-and-write keys request all supported operations. On every request, Cloudax reduces that requested access to the actions the user can currently perform in the target organisation. Available API scopes are grouped by resource:
| Scope | Description |
|---|---|
assistants:read | List and read agents. |
assistants:write | Create and update agents. |
assistants:delete | Delete agents. |
calls:initiate | Initiate outbound calls programmatically. |
call-logs:read | Read call logs including transcripts and metadata. |
phone-numbers:read | List and read phone numbers (provider credentials are never returned). |
phone-numbers:write | Connect SIP numbers, update assignments, and disconnect customer-owned numbers. |
phone-numbers:purchase | Acquire Cloudax-managed numbers when workspace, verification, and payment requirements are met. |
phone-numbers:release | Release Cloudax-managed numbers. |
organisations:read | List the reseller's complete sub-organisation hierarchy. |
organisations:manage | Target a managed sub-organisation in other API operations. |
campaigns:read | Read campaigns, their analytics, contacts, and per-campaign call logs. |
campaigns:write | Create, update, and delete campaigns; bulk-import, edit, and remove contacts. |
campaigns:execute | Start, pause, and resume campaigns. |
tool-logs:read | Read tool execution logs for debugging integrations. |
webhook-logs:read | Read webhook delivery logs and response details. |
calls:read | List calls and read a call's details, authenticated recording access, and transcript. |
chats:read | List chats and read their messages. |
tools:read | List and read custom function tools. |
tools:write | Create, update, and delete tools. |
webhooks:read | List and read event webhooks. |
webhooks:write | Create, update, and delete webhooks. |
knowledge-bases:read | List and read knowledge bases. |
knowledge-bases:write | Create and delete knowledge bases. |
documents:read | List and read documents in a knowledge base. |
documents:write | Upload and delete documents. |
voices:read | List the real personality names available in the agent editor. |
Accepted scope aliases
calls:read or the legacy call-logs:read scope. Voice listing also accepts assistants:read. Knowledge-base and document endpoints accept the legacy files:read and files:write aliases where applicable.Workspace isolation
X-Organisation-Id. Unrelated workspaces are always rejected.Partner sub-organisations
Legacy and Current Reseller Partners can call GET /api/v1/organisations with the organisations:read scope to list their complete sub-organisation hierarchy. Each result includes its hierarchy depth and whether it is directly manageable. To run another API operation against a directly linked workspace, the key must also have organisations:manage. Keep using the reseller API key and add this header:
X-Organisation-Id: sub-organisation-idThe key's existing resource scopes still apply. For example, updating an agent in a sub-organisation requires assistants:write.
Payment required responses
402 Payment Required response means the workspace needs an active payment setup, plan upgrade, add-on or additional capacity before the request can continue. A 403 Forbidden response means the key does not have the required permission or workspace access. A 451 Unavailable For Legal Reasons response means the organisation is under regulatory suspension.Authentication
All API requests must include a cloudax_ (or legacy cs_) API key as a Bearer token in the Authorization header:
Authorization: Bearer your-api-keyRequests without a valid token will receive an HTTP 401 Unauthorised response. Requests with a valid token but insufficient scopes will receive an HTTP 403 Forbidden response.
Available Endpoints
The following endpoints are available through the Cloudax Connect API. All endpoints are prefixed with /api/v1. For full request/response shapes, query parameters, required scopes, and response statuses, see the read-only API Endpoints tab on the Developers page. It renders the live OpenAPI schema but does not send requests or expose API-key secrets.
Agents
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/assistants | List all agents in the workspace. | assistants:read |
POST | /api/v1/assistants | Create a new agent. | assistants:write |
GET | /api/v1/assistants/{id} | Retrieve a single agent's configuration. | assistants:read |
PUT | /api/v1/assistants/{id} | Update an agent's configuration. | assistants:write |
DELETE | /api/v1/assistants/{id} | Delete an agent. | assistants:delete |
GET | /api/v1/assistants/{id}/test-link | Get the public test link for a published voice agent. | assistants:read |
GET | /api/v1/assistants/{id}/versions | List agent version history. | assistants:read |
GET | /api/v1/assistants/{id}/versions/{version} | Retrieve a provider-neutral, secret-redacted agent version. | assistants:read |
GET | /api/v1/assistants/{id}/versions/compare | Compare two agent versions. | assistants:read |
GET / POST | /api/v1/assistants/{id}/comments | List or add agent comments and replies. | assistants:read / assistants:write |
PATCH / DELETE | /api/v1/assistants/{id}/comments/{commentId} | Edit, resolve, reopen or delete an agent comment. | assistants:write |
GET / POST | /api/v1/assistant-folders | List or create agent folders. | assistants:read / assistants:write |
PUT / DELETE | /api/v1/assistant-folders/{id} | Update or delete an agent folder. | assistants:write |
POST | /api/v1/assistant-folders/reorder | Set the complete folder display order. | assistants:write |
POST | /api/v1/assistants/move-to-folder | Move one or more accessible agents into a folder. | assistants:write |
Provider-neutral by design
GET /api/v1/voices; never invent a name or send a raw vendor id or model slug.Calls & Call Logs
| Method | Endpoint | Description | Scope |
|---|---|---|---|
POST | /api/v1/calls/initiate | Initiate an outbound call to a specified phone number using a configured agent. | calls:initiate |
GET | /api/v1/calls | List calls with optional assistantId, direction, status, startDate, and endDate filters. | calls:read |
GET | /api/v1/calls/{id} | Retrieve a single call including its transcript. | calls:read |
GET | /api/v1/calls/{id}/recording | Access a recording through the authenticated API, with optional redirect support. | calls:read |
GET | /api/v1/calls/{id}/transcript | Get the full call transcript. | calls:read |
GET | /api/v1/call-logs | List call logs with optional startDate, endDate, assistantId, and callType filters. | call-logs:read |
GET | /api/v1/call-logs/{id} | Retrieve a single call log including its transcript, summary, and metadata. | call-logs:read |
GET | /api/v1/call-logs/stats | Retrieve aggregated call statistics including total calls, durations, and outcomes. | call-logs:read |
API playback and webhook URLs are different
recording_url field in an end-of-call webhook. That webhook field is populated only where a workspace has been configured to return a recording URL; otherwise it is null. A retained or provider-backed recording may still be available through authenticated Cloudax playback without exposing a public URL.Phone Numbers
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/phone-numbers | List phone numbers with friendly name, region, and assigned agent. | phone-numbers:read |
GET | /api/v1/phone-numbers/{id} | Retrieve a single phone number. Provider credentials and trunk SIDs are never returned. | phone-numbers:read |
PATCH | /api/v1/phone-numbers/{id} | Update the friendly name or reassign inbound and outbound agents. | phone-numbers:write |
POST | /api/v1/phone-numbers/sip | Connect a customer-owned SIP number through sip.cloud.ax, with optional outbound termination credentials. | phone-numbers:write |
POST | /api/v1/phone-numbers/purchase | Acquire and activate a managed number in the requested country. | phone-numbers:purchase |
DELETE | /api/v1/phone-numbers/{id} | Disconnect a phone number from the workspace. | phone-numbers:write |
Number safety checks
Campaigns
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/campaigns | List campaigns with status and high-level metrics. | campaigns:read |
POST | /api/v1/campaigns | Create a new campaign. | campaigns:write |
GET | /api/v1/campaigns/{id} | Retrieve a single campaign's configuration. | campaigns:read |
PATCH | /api/v1/campaigns/{id} | Update a campaign's configuration. | campaigns:write |
DELETE | /api/v1/campaigns/{id} | Delete a campaign. | campaigns:write |
POST | /api/v1/campaigns/{id}/start | Start (or resume) a campaign. | campaigns:execute |
POST | /api/v1/campaigns/{id}/pause | Pause a running campaign. | campaigns:execute |
GET | /api/v1/campaigns/{id}/analytics | Retrieve per-campaign analytics (attempts, completions, success rate, durations). | campaigns:read |
GET | /api/v1/campaigns/{id}/call-logs | List call logs scoped to a single campaign. | campaigns:read |
GET | /api/v1/campaigns/{id}/contacts | List contacts attached to a campaign with their dial status. | campaigns:read |
POST | /api/v1/campaigns/{id}/contacts | Bulk-import contacts into a campaign. | campaigns:write |
PATCH | /api/v1/campaigns/{id}/contacts/{contactId} | Update an individual contact (e.g. retry status, custom fields). | campaigns:write |
DELETE | /api/v1/campaigns/{id}/contacts/{contactId} | Remove a contact from a campaign. | campaigns:write |
Tool Logs
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/tools/logs | List tool execution logs with details on inputs, outputs, and response times. | tool-logs:read |
Webhook Logs
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/webhooks/logs | List webhook execution logs including delivery status and response bodies. | webhook-logs:read |
Chats
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/chats | List text chats, optionally filtered by agent. | chats:read |
GET | /api/v1/chats/{id} | Retrieve a chat with its messages. | chats:read |
GET | /api/v1/chats/{id}/messages | List the messages in a chat. | chats:read |
Tools
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/tools | List custom function tools. | tools:read |
POST | /api/v1/tools | Create a tool. | tools:write |
GET | /api/v1/tools/{id} | Retrieve a single tool. | tools:read |
PUT | /api/v1/tools/{id} | Update a tool. | tools:write |
DELETE | /api/v1/tools/{id} | Delete a tool. | tools:write |
Webhooks
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/webhooks | List event webhooks. | webhooks:read |
POST | /api/v1/webhooks | Create a webhook. | webhooks:write |
GET | /api/v1/webhooks/{id} | Retrieve a single webhook. | webhooks:read |
PUT | /api/v1/webhooks/{id} | Update a webhook. | webhooks:write |
DELETE | /api/v1/webhooks/{id} | Delete a webhook. | webhooks:write |
Knowledge Bases & Documents
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/knowledge-bases | List knowledge bases. | knowledge-bases:read |
POST | /api/v1/knowledge-bases | Create a knowledge base. | knowledge-bases:write |
GET | /api/v1/knowledge-bases/{id} | Retrieve a single knowledge base. | knowledge-bases:read |
DELETE | /api/v1/knowledge-bases/{id} | Delete a knowledge base. | knowledge-bases:write |
GET | /api/v1/knowledge-bases/{id}/documents | List documents inside a knowledge base. | documents:read |
GET | /api/v1/documents | List documents (filter by knowledgeBaseId). | documents:read |
POST | /api/v1/documents | Upload a document (multipart: file + knowledgeBaseId). | documents:write |
GET | /api/v1/documents/{id} | Retrieve a single document. | documents:read |
DELETE | /api/v1/documents/{id} | Delete a document. | documents:write |
Voices
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/voices | List the real personality names available in the agent editor. | voices:read |
Postman collection
AI agents & MCP server
Cloudax Connect ships a hosted MCP (Model Context Protocol) server so clients like Cursor, Claude, ChatGPT, Microsoft Copilot Studio, VS Code and Codex can control your workspace directly, creating agents, initiating calls, managing tools and webhooks, uploading knowledge, and more. It speaks the Streamable HTTP transport and supports secure browser sign-in for interactive clients. Sign in to Cloudax, review the requested read or write access, and approve the connection.
| Transport | Endpoint | Auth |
|---|---|---|
| Streamable HTTP | POST /api/mcp | OAuth 2.1 (preferred) or API key fallback |
The quickest way to connect is the Overview tab of the in-app Developers page, which has an Add to Cursor button plus URL-only setup for Cursor, Claude, Claude Code, VS Code, Codex, ChatGPT and Microsoft Copilot Studio. Your client opens Cloudax sign-in and consent in the browser. Follow the instructions for your client below:
Cursor
Use the button below, approve opening Cursor, then sign in to Cloudax when your browser opens.
To configure Cursor manually, add this server to your MCP settings:
{
"Cloudax": {
"url": "https://your-domain.com/api/mcp"
}
}Claude
Open Settings → Connectors, create a custom connector, enter https://your-domain.com/api/mcp, then sign in to Cloudax and approve access.
Claude Code
Run this command, then complete the Cloudax sign-in in your browser:
claude mcp add --transport http Cloudax https://your-domain.com/api/mcpVS Code
Create or edit .vscode/mcp.json, add the server below, then start it and complete sign-in.
{
"servers": {
"Cloudax": {
"type": "http",
"url": "https://your-domain.com/api/mcp"
}
}
}Codex
Add Cloudax, then start its browser sign-in:
codex mcp add Cloudax --url https://your-domain.com/api/mcp
codex mcp login CloudaxChatGPT
Open Settings → Connectors, create a custom MCP connector, enter https://your-domain.com/api/mcp, then sign in to Cloudax and approve access.
Microsoft Copilot Studio
- Open your agent and go to Tools.
- Select Add a tool → New tool → Model Context Protocol.
- Enter Cloudax as the server name and use
https://your-domain.com/api/mcp. - Select OAuth 2.0 and choose Dynamic discovery.
- Select Create → Next → Create a new connection.
- Sign in to Cloudax, approve access, then select Add to agent.
OAuth access belongs to your user account rather than one selected organisation. The client can work only in organisations and with actions currently available to your account. You can review and revoke access under Account → Connected apps.
Connected clients label viewing actions as read-only and actions that change data as writes. Cloudax product guidance is also available as a documentation resource, with search for finding a specific guide or workflow.
Agent reads and writes include every transfer type, post-call actions, folder assignment, department routing, speech endpointing and keyterms. Version history and published voice-agent test links are available as read-only operations. MCP clients can also list, add, edit, resolve and delete agent comments when the workspace plan includes Multi-user editing and comments; normal assistant permissions and comment ownership rules continue to apply.
API keys remain available for automation
Authorization: Bearer your-api-key. Personal keys are displayed only once when created under Account → API keys; they are never embedded in the Add to Cursor link.AI instruction files
To make any AI agent a Cloudax expert without MCP, download one of the ready-made instruction files from the Overview tab of the Developers page. They are generated from the live API spec and use only provider-neutral vocabulary (personality names, voice-model names, and language-model names shown in the agent editor):
llms.txt/llms-full.txt: condensed and full API reference for LLMs.AGENTS.md: instructions for Cursor, Codex, and most agents.cloudax.mdc: a Cursor rule (drop into.cursor/rules/).CLAUDE.md: Claude project instructions.
Provider-neutral, always
GET /api/v1/voices, use editor voice-model names such as Flash 2.5, and use the actual language-model names shown in the agent editor rather than invented tiers or internal slugs.Request Logs
The Request Logs tab on the Developers page records every single request made against your /api/v1 endpoints, successful and failed alike. Use it to debug integrations, audit usage, and quickly spot keys that are misconfigured or being abused.
What is captured
Each entry shows:
- Time: when the request was received (UTC, displayed in your local timezone).
- Method: the HTTP verb (GET, POST, PATCH, DELETE).
- Endpoint: the full path that was called, e.g.
/api/v1/call-logs?limit=50. - Status: the HTTP response code, colour-coded as success (2xx), client error (4xx), or server error (5xx).
- Duration: the time taken to handle the request, in milliseconds.
- API Key: the human-readable name of the key that made the request, plus its masked prefix (for example
cloudax_****a1b2). - IP Address: the originating IP of the caller, useful for IP-whitelisting and abuse investigation.
Click any row to open a detail panel with the full request body, response body, any error message, the user-agent, and the exact timestamp, so you can reproduce and debug the call without leaving the dashboard.
Filtering and search
The Request Logs tab supports free-text search across the endpoint, error message, IP address, and API-key name, plus structured filters for:
- Status: Success (2xx), Client error (4xx), or Server error (5xx).
- Method: restrict to a single HTTP verb.
- API Key: show only requests made by a specific key, which is ideal when isolating issues to a single integration.
The header card surfaces 30-day rolling stats: total requests, success / 4xx / 5xx counts, average duration, and your top-5 most-called endpoints, so you can eyeball traffic health at a glance.
Org-scoped & secret-safe
Rate Limiting
A key may have its own requests-per-minute limit. Endpoint limits also apply: call-log lists and statistics allow 20 requests per minute, individual call logs and calls endpoints allow 30, general and assistant endpoints allow 60, and webhook-management endpoints allow 100. The effective limit is the first applicable limit reached. Exceeding a limit returns HTTP 429 Too Many Requests.
Per-key and current V1 endpoint limit responses include a Retry-After header. Implement backoff and do not assume that every legacy call-log response includes that header.
IP Whitelisting
For additional security, you can restrict API access to specific IP addresses. When IP whitelisting is enabled, only requests originating from your approved IP addresses will be accepted; all other requests will be rejected with an HTTP 403 Forbidden response, regardless of whether a valid API key is provided.
For personal keys, open Account → API keys and set the allowlist while creating the key or edit it later with the shield action. Organisation administrators configure service-account key allowlists from Developers → API Keys. Both support individual IPv4 and IPv6 addresses plus CIDR ranges. This is especially useful for production integrations whose requests originate from known networks.
Combine with scopes