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

Directly billed Launch, Growth and Enterprise workspaces can activate API Access from the Billing page for £100 per month excluding VAT. An administrator can also enable it as part of a managed workspace arrangement.

Getting Started

Confirm API availability

Ask a workspace billing administrator to open Billing, select Add-ons and activate API Access. For a managed workspace, ask your Cloudax contact to enable it. Once available, the Developers page appears in the sidebar.

Open the Developers page

Navigate to Developers in the sidebar. The page is split into four tabs: Overview (base URL, workspace ID, quickstart), API Endpoints (a read-only reference generated from the live API schema), API Keys (organisation service-account keys, visible to administrators) and Request Logs (every request your keys have made).

Create a personal API key

Open the account menu, select Account, then open API keys. Choose read-only or read-and-write access and optionally restrict the key to known IP addresses. Organisation administrators can instead create service-account keys from Developers → API Keys. See Creating API Keys below for full details.

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

API keys are displayed only once after creation or rotation, inside the key-management dialog. Cloudax stores only a one-way hash and cannot retrieve the secret later. The Developers setup examples and Add to Cursor link never contain the secret. Copy it immediately into your client or a secrets manager. If you lose it, rotate or replace the key.

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:

ScopeDescription
assistants:readList and read agents.
assistants:writeCreate and update agents.
assistants:deleteDelete agents.
calls:initiateInitiate outbound calls programmatically.
call-logs:readRead call logs including transcripts and metadata.
phone-numbers:readList and read phone numbers (provider credentials are never returned).
phone-numbers:writeConnect SIP numbers, update assignments, and disconnect customer-owned numbers.
phone-numbers:purchaseAcquire Cloudax-managed numbers when workspace, verification, and payment requirements are met.
phone-numbers:releaseRelease Cloudax-managed numbers.
organisations:readList the reseller's complete sub-organisation hierarchy.
organisations:manageTarget a managed sub-organisation in other API operations.
campaigns:readRead campaigns, their analytics, contacts, and per-campaign call logs.
campaigns:writeCreate, update, and delete campaigns; bulk-import, edit, and remove contacts.
campaigns:executeStart, pause, and resume campaigns.
tool-logs:readRead tool execution logs for debugging integrations.
webhook-logs:readRead webhook delivery logs and response details.
calls:readList calls and read a call's details, authenticated recording access, and transcript.
chats:readList chats and read their messages.
tools:readList and read custom function tools.
tools:writeCreate, update, and delete tools.
webhooks:readList and read event webhooks.
webhooks:writeCreate, update, and delete webhooks.
knowledge-bases:readList and read knowledge bases.
knowledge-bases:writeCreate and delete knowledge bases.
documents:readList and read documents in a knowledge base.
documents:writeUpload and delete documents.
voices:readList the real personality names available in the agent editor.

Accepted scope aliases

Calls endpoints accept either 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

Service-account keys are bound to their issuing organisation. A personal key can target only organisations where its owner has a current membership and where API Access and personal-key RBAC are enabled. Resource restrictions assigned to that membership, including allowed agents and phone numbers, still apply. A partner-owned service-account key may also target a directly linked sub-organisation by sending its ID in 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:

HTTP
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

A 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 header
Authorization: Bearer your-api-key

Requests 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

MethodEndpointDescriptionScope
GET/api/v1/assistantsList all agents in the workspace.assistants:read
POST/api/v1/assistantsCreate 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-linkGet the public test link for a published voice agent.assistants:read
GET/api/v1/assistants/{id}/versionsList 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/compareCompare two agent versions.assistants:read
GET / POST/api/v1/assistants/{id}/commentsList 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-foldersList 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/reorderSet the complete folder display order.assistants:write
POST/api/v1/assistants/move-to-folderMove one or more accessible agents into a folder.assistants:write

Provider-neutral by design

Agents use a real personality name and voice model from the agent editor, plus a language model name such as 5.3 Chat or 4.1 Mini. Lucy is the default personality. Fetch the current personality names from GET /api/v1/voices; never invent a name or send a raw vendor id or model slug.

Calls & Call Logs

MethodEndpointDescriptionScope
POST/api/v1/calls/initiateInitiate an outbound call to a specified phone number using a configured agent.calls:initiate
GET/api/v1/callsList 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}/recordingAccess a recording through the authenticated API, with optional redirect support.calls:read
GET/api/v1/calls/{id}/transcriptGet the full call transcript.calls:read
GET/api/v1/call-logsList 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/statsRetrieve aggregated call statistics including total calls, durations, and outcomes.call-logs:read

API playback and webhook URLs are different

The authenticated recording endpoint above is separate from the 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

MethodEndpointDescriptionScope
GET/api/v1/phone-numbersList 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/sipConnect a customer-owned SIP number through sip.cloud.ax, with optional outbound termination credentials.phone-numbers:write
POST/api/v1/phone-numbers/purchaseAcquire 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

Managed-number purchases stop when workspace policy, verification, or payment requirements are not met. Assigning a managed number for outbound use is also blocked until the required verification and usage-credit checks pass.

Campaigns

MethodEndpointDescriptionScope
GET/api/v1/campaignsList campaigns with status and high-level metrics.campaigns:read
POST/api/v1/campaignsCreate 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}/startStart (or resume) a campaign.campaigns:execute
POST/api/v1/campaigns/{id}/pausePause a running campaign.campaigns:execute
GET/api/v1/campaigns/{id}/analyticsRetrieve per-campaign analytics (attempts, completions, success rate, durations).campaigns:read
GET/api/v1/campaigns/{id}/call-logsList call logs scoped to a single campaign.campaigns:read
GET/api/v1/campaigns/{id}/contactsList contacts attached to a campaign with their dial status.campaigns:read
POST/api/v1/campaigns/{id}/contactsBulk-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

MethodEndpointDescriptionScope
GET/api/v1/tools/logsList tool execution logs with details on inputs, outputs, and response times.tool-logs:read

Webhook Logs

MethodEndpointDescriptionScope
GET/api/v1/webhooks/logsList webhook execution logs including delivery status and response bodies.webhook-logs:read

Chats

MethodEndpointDescriptionScope
GET/api/v1/chatsList 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}/messagesList the messages in a chat.chats:read

Tools

MethodEndpointDescriptionScope
GET/api/v1/toolsList custom function tools.tools:read
POST/api/v1/toolsCreate 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

MethodEndpointDescriptionScope
GET/api/v1/webhooksList event webhooks.webhooks:read
POST/api/v1/webhooksCreate 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

MethodEndpointDescriptionScope
GET/api/v1/knowledge-basesList knowledge bases.knowledge-bases:read
POST/api/v1/knowledge-basesCreate 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}/documentsList documents inside a knowledge base.documents:read
GET/api/v1/documentsList documents (filter by knowledgeBaseId).documents:read
POST/api/v1/documentsUpload 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

MethodEndpointDescriptionScope
GET/api/v1/voicesList the real personality names available in the agent editor.voices:read

Postman collection

Every endpoint above is included in the Postman collection bundled on the Developers page: open the Overview tab and click Download Postman Collection to import a ready-to-use workspace with example requests and environment variables.

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.

TransportEndpointAuth
Streamable HTTPPOST /api/mcpOAuth 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.

Add to Cursor

To configure Cursor manually, add this server to your MCP settings:

mcp.json
{
  "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:

terminal
claude mcp add --transport http Cloudax https://your-domain.com/api/mcp

VS Code

Create or edit .vscode/mcp.json, add the server below, then start it and complete sign-in.

.vscode/mcp.json
{
  "servers": {
    "Cloudax": {
      "type": "http",
      "url": "https://your-domain.com/api/mcp"
    }
  }
}

Codex

Add Cloudax, then start its browser sign-in:

terminal
codex mcp add Cloudax --url https://your-domain.com/api/mcp
codex mcp login Cloudax

ChatGPT

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

  1. Open your agent and go to Tools.
  2. Select Add a tool → New tool → Model Context Protocol.
  3. Enter Cloudax as the server name and use https://your-domain.com/api/mcp.
  4. Select OAuth 2.0 and choose Dynamic discovery.
  5. Select Create → Next → Create a new connection.
  6. Sign in to Cloudax, approve access, then select Add to agent.

Read Microsoft's Copilot Studio instructions

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

Scripts and clients without OAuth can still send an active personal or service-account key in 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

Whether you use the REST API, the MCP server, or the instruction files, Cloudax never exposes the underlying voice, transcription, or language-model providers. Discover personality names with 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

Request logs are strictly scoped to your workspace; keys from other tenants never appear here. Sensitive values such as API key secrets and provider credentials are stripped from request and response bodies before being persisted, so the log is safe to share with team members during debugging.

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

For service accounts, combine IP allowlisting with the smallest required scope set. For personal keys, choose read-only unless writes are required; live membership and RBAC permissions further restrict the key. In either case, a configured allowlist prevents use outside your approved network.