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-id The 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, including optional MCP servers. | assistants:write |
GET | /api/v1/assistants/{id} | Retrieve a single agent's configuration (MCP credentials are redacted). | assistants:read |
PUT | /api/v1/assistants/{id} | Update an agent's configuration, including MCP servers. | 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 | /api/v1/assistants/{id}/tools | List this agent's tools. The flat tools route remains supported. | tools:read |
POST | /api/v1/assistants/{id}/tools | Create a tool on this agent. | tools:write |
GET | /api/v1/assistants/{id}/webhooks | List this agent's webhooks. The flat webhooks route remains supported. | webhooks:read |
POST | /api/v1/assistants/{id}/webhooks | Create a webhook on this agent, including extracted variables. | webhooks: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. MCP servers on agents
enableMCP and mcpServers. Static auth headers are write-only; responses only show whether auth is configured. Full field definitions are in /api/v1/openapi.json. 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 | Returns 302 with a Location header. | 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. The id returned when a call is initiated is accepted. Set format to `opentelemetry` to include trace data. | call-logs:read |
GET | /api/v1/call-logs/stats | Retrieve aggregated call statistics including total calls, durations, and outcomes. | call-logs:read |
GET | /api/v1/calls/logs | List call logs, or fetch one with `callId`. Limit defaults to 100 and cannot exceed 1000. Use offset to skip rows. The id returned when a call is initiated is accepted. | call-logs:read |
Recording access
curl -L -H "Authorization: Bearer your-api-key" \ -o call-recording.ogg \ "https://YOUR_WORKSPACE_HOST/api/v1/calls/CALL_ID/recording"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
Read the same tool history shown on Actions. Filter by agent, tool name, status, or date. Results default to 100 rows and cannot exceed 1000. Use offset to skip rows, or page when you leave offset out. A connected assistant can read the same history.
| 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
Read the same webhook delivery history shown on Actions. Filter by agent, webhook, status, or date. Results default to 100 rows and cannot exceed 1000. Use offset to skip rows, or page when you leave offset out. A connected assistant can read the same history.
| 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
List and create an agent's tools from the agent routes under Agent Management, or use the tools routes below. Creating on the agent does not need an agent id in the body. Get, update, and delete a tool by its own id.
| 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
List and create an agent's webhooks from the agent routes under Agent Management, or use the webhook routes below. Creating on the agent does not need an agent id in the body. Update a webhook, including the values it extracts at the end of a call, by its own id. Sending that list replaces every extracted value.
| 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, including the values it extracts at the end of a call. | 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
API specification
| Method | Endpoint | Description | Scope |
|---|---|---|---|
GET | /api/v1/openapi.json | Download the OpenAPI specification for these endpoints. | None |
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/mcpcodex 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, call notifications, 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 Expressive, 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 can capture requests made against your /api/v1 endpoints while Debug mode is on. Logging is off by default; turn Debug on for one hour when you need to inspect traffic, then leave it off. Captured logs are kept for 14 days.
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
Frequently asked questions
How do I authenticate Cloudax Connect API requests?
Send an Authorization: Bearer header with an API key on every request to /api/v1. Personal keys are created under Account → API keys and are limited by your own role permissions; organisation service-account keys are created by administrators under Developers → API Keys. Keys can be read-only or read-and-write and optionally IP-restricted.
Is API access included in every plan?
API Access is included with Scale and Enterprise. Directly billed Starter and Growth workspaces can activate it from Billing → Add-ons for £100 per month excluding VAT, and an administrator can enable it for managed workspaces. Once active, the Developers page appears in the sidebar with the endpoint reference, keys and request logs.
Does Cloudax Connect offer an MCP server for AI agents?
Yes. A hosted Model Context Protocol server is available at /api/mcp over Streamable HTTP. Interactive clients sign in with OAuth 2.1, and API-key Bearer authentication remains available for automation. Tools include listing and creating assistants, reading call logs and transcripts, and managing tools, webhooks and knowledge bases.
How do I start an outbound call via the API (for example from n8n)?
Send POST /api/v1/calls/initiate with Authorization: Bearer <api-key> and a JSON body that includes the assistant and destination number. The key needs calls:initiate, and API Access must be active. See the Call management table on this page for related list and recording endpoints.