SENDO AI AGENTS API
Manage AI voice and chat agents — LLM/STT/TTS configurations, skills, conversations, calls, SIP telephony, outbound campaigns, and more.
This API manages AI agents that handle voice calls and chat conversations: their LLM/STT/TTS bindings, skills, conversation flows, SIP telephony, outbound campaigns, and call records. Built with FastAPI; every resource exchanges JSON.
Authentication is conditional: when the server has FEATURE_FLAG_JWT_AUTH=true, every route below requires a valid JWT (Authorization: Bearer <token>) except the documentation and login routes. When that flag is false, no token is required. Check with your environment’s administrator which mode applies.
skip and limit for pagination, plus order_by / order_dir for sorting — shown per endpoint below. Many routes also silently accept a trailing-slash variant (e.g. /users/); this document lists the canonical route without the trailing slash. Clients
A client is the organization that owns agents, SIP numbers, and configurations — every other resource in this API is ultimately scoped to a client.
Create a Client
Creates a new client record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/clients' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Acme Corp","contact_email": "ops@acme.com"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 1,
"name": "Acme Corp",
"contact_email": "ops@acme.com",
"created_at": "2026-07-29T10:35:00Z"
}
Server responses.
List Clients
Lists clients, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| contact_email | string | Filter by contact email. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/clients?skip=0&limit=20&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 1,
"name": "Acme Corp",
"contact_email": "ops@acme.com"
}
]
Server responses.
Get a Client
Retrieves a single client record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_id | integer | Record id. | none | No | 1 |
Request.
curl --location 'https://api.sendo.cloud/clients/1' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 1,
"name": "Acme Corp",
"contact_email": "ops@acme.com",
"created_at": "2026-07-29T10:35:00Z",
"agents": [
{
"id": 44,
"name": "Sales Assistant"
}
],
"sip_numbers": [
{
"id": 10,
"sip_number": "+14155550100"
}
]
}
Server responses.
Users
Operators, supervisors, and administrators who manage voice/chat agent deployments and monitor calls.
Create a User
Creates a new user record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/users' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Jane Doe","email": "jane@acme.com","is_admin": true,"is_super_user": false}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 25,
"name": "Jane Doe",
"email": "jane@acme.com",
"is_admin": true,
"is_super_user": false
}
Server responses.
List Users
Lists users, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| name | string | Filter by name. | none | Yes | |
| string | Filter by email. | none | Yes | ||
| is_admin | boolean | Filter by admin role. | none | Yes | true |
| is_super_user | boolean | Filter by super user role. | none | Yes | false |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/users?skip=0&limit=20&is_admin=true&is_super_user=false&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 25,
"name": "Jane Doe",
"email": "jane@acme.com",
"is_admin": true
}
]
Server responses.
Get a User
Retrieves a single user record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| user_id | integer | Record id. | none | No | 25 |
Request.
curl --location 'https://api.sendo.cloud/users/25' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 25,
"name": "Jane Doe",
"email": "jane@acme.com",
"is_admin": true,
"is_super_user": false,
"clients": [
{
"id": 1,
"name": "Acme Corp"
}
]
}
Server responses.
Update a User
Updates an existing user record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| user_id | integer | Record id. | none | No | 25 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/users/25' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Jane Doe","email": "jane@acme.com","is_admin": true,"is_super_user": false}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 25,
"name": "Jane Doe",
"email": "jane@acme.com",
"is_admin": true,
"is_super_user": false
}
Server responses.
Delete a User
Deletes a user record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| user_id | integer | Record id. | none | No | 25 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/users/25' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 25,
"name": "Jane Doe",
"email": "jane@acme.com"
}
Server responses.
Client-User Relationship
Links a user to a client, granting them operational access to that client’s agents and calls.
Create a Client-User Link
Creates a new client-user link record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/client_users' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"client_id": 1,"user_id": 25}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 9,
"client_id": 1,
"user_id": 25
}
Server responses.
List Client-User Relationship
Lists client-user relationship, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| user_id | integer | Filter by user. | none | Yes | 25 |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/client_users?skip=0&limit=20&client_id=1&user_id=25&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 9,
"client_id": 1,
"user_id": 25
}
]
Server responses.
Get a Client-User Link
Retrieves a single client-user link record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_user_id | integer | Record id. | none | No | 9 |
Request.
curl --location 'https://api.sendo.cloud/client_users/9' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 9,
"client_id": 1,
"user_id": 25,
"role": "operator",
"expires_at": null
}
Server responses.
Update a Client-User Link
Updates an existing client-user link record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_user_id | integer | Record id. | none | No | 9 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/client_users/9' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"role": "supervisor","expires_at": "2027-01-01T00:00:00Z"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 9,
"client_id": 1,
"user_id": 25,
"role": "supervisor",
"expires_at": "2027-01-01T00:00:00Z"
}
Server responses.
Delete a Client-User Link
Deletes a client-user link record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_user_id | integer | Record id. | none | No | 9 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/client_users/9' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 9,
"client_id": 1,
"user_id": 25
}
Server responses.
Agents
A voice/chat AI agent that answers calls, runs IVR flows, or holds automated conversations — bound to an LLM, STT, and TTS configuration, plus routing and skills.
Create Agent
Defines and registers a new AI agent. Note the route is /agent (singular) — not /agents.
Request body.
curl --location -X POST 'https://api.sendo.cloud/agent' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Sales Assistant","language": "en","client_id": 1,"llm_configuration_id": 3,"tts_configuration_id": 2,"stt_configuration_id": 4}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 44,
"name": "Sales Assistant",
"language": "en",
"client_id": 1
}
Server responses.
List Agents
Lists agents for management — filter by client, language, or bound configuration to control active call handlers.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| language | string | Filter by language. | none | Yes | en |
| llm_configuration_id | integer | Filter by bound LLM config. | none | Yes | |
| tts_configuration_id | integer | Filter by bound TTS config. | none | Yes | |
| stt_configuration_id | integer | Filter by bound STT config. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/agents?client_id=1' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 44,
"name": "Sales Assistant",
"language": "en",
"client_id": 1
}
]
Server responses.
Paginated Agents
Same filters as List Agents, wrapped in a paginated envelope (items, total, skip, limit) for UI lists — includes status/health metadata.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 10 |
| client_id | integer | Filter by client. | none | Yes | 1 |
Request.
curl --location 'https://api.sendo.cloud/paginated-agents?skip=0&limit=10&client_id=1' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"items": [
{
"id": 44,
"name": "Sales Assistant"
}
],
"total": 1,
"skip": 0,
"limit": 10
}
Server responses.
Get Agent
Retrieves an agent’s full call configuration (skills, voice settings, routing, provider links) for diagnostics or editing.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_id | integer | Agent id. | none | No | 44 |
Request.
curl --location 'https://api.sendo.cloud/agents/44' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 44,
"name": "Sales Assistant",
"language": "en",
"client_id": 1,
"llm_configuration_id": 3,
"tts_configuration_id": 2,
"stt_configuration_id": 4,
"skills": [
{
"id": 6,
"name": "EmailTranscript"
}
],
"created_at": "2026-07-29T10:40:00Z"
}
Server responses.
Update Agent
Updates an agent’s configuration, swaps provider credentials (LLM/STT/TTS), or changes active skills.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_id | integer | Agent id. | none | No | 44 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/agents/44' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Sales Assistant","language": "en","tts_configuration_id": 5}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 44,
"name": "Sales Assistant",
"language": "en",
"tts_configuration_id": 5
}
Server responses.
Delete Agent
Deactivates or removes an agent and its runtime assignments when decommissioning.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_id | integer | Agent id. | none | No | 44 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/agents/44' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 44,
"name": "Sales Assistant"
}
Server responses.
Skills
A voice-call skill or integration (e.g., emailing the call transcript, logging call data into a Google Sheet) that agents execute during or after calls.
Create a Skill
Creates a new skill record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/skills' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "EmailTranscript","description": "Emails the call transcript to a configured address","event": "on_call_end","webhook_url": "https://api.example.com/skills/email-transcript","parameters": [{"name":"recipient","type":"string"}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 6,
"name": "EmailTranscript",
"description": "Emails the call transcript to a configured address",
"event": "on_call_end"
}
Server responses.
List Skills
Lists skills, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| name | string | Filter by name. | none | Yes | |
| description | string | Filter by description. | none | Yes | |
| event | string | Filter by trigger event. | none | Yes | on_call_end |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/skills?skip=0&limit=20&event=on_call_end&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 6,
"name": "EmailTranscript",
"event": "on_call_end"
}
]
Server responses.
Get a Skill
Retrieves a single skill record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_id | integer | Record id. | none | No | 6 |
Request.
curl --location 'https://api.sendo.cloud/skills/6' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 6,
"name": "EmailTranscript",
"description": "Emails the call transcript to a configured address",
"event": "on_call_end",
"webhook_url": "https://api.example.com/skills/email-transcript",
"parameters": [
{
"name": "recipient",
"type": "string"
}
]
}
Server responses.
Update a Skill
Updates an existing skill record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_id | integer | Record id. | none | No | 6 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/skills/6' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"description": "Emails the call transcript to a configured address (v2)"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 6,
"name": "EmailTranscript",
"description": "Emails the call transcript to a configured address (v2)"
}
Server responses.
Delete a Skill
Deletes a skill record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_id | integer | Record id. | none | No | 6 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/skills/6' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 6,
"name": "EmailTranscript"
}
Server responses.
Client-Skill Relationship
Enables a skill for a client and applies client-specific configuration (e.g., greetings, limits).
Create a Client-Skill Link
Creates a new client-skill link record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/client_skills' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"client_id": 1,"skill_id": 6,"greeting": "Thanks for calling Acme!"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 14,
"client_id": 1,
"skill_id": 6,
"greeting": "Thanks for calling Acme!"
}
Server responses.
List Client-Skill Relationship
Lists client-skill relationship, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| skill_id | integer | Filter by skill. | none | Yes | 6 |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/client_skills?skip=0&limit=20&client_id=1&skill_id=6&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 14,
"client_id": 1,
"skill_id": 6
}
]
Server responses.
Get a Client-Skill Link
Retrieves a single client-skill link record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_skill_id | integer | Record id. | none | No | 14 |
Request.
curl --location 'https://api.sendo.cloud/client_skills/14' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 14,
"client_id": 1,
"skill_id": 6,
"greeting": "Thanks for calling Acme!",
"limit": 100
}
Server responses.
Update a Client-Skill Link
Updates an existing client-skill link record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_skill_id | integer | Record id. | none | No | 14 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/client_skills/14' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"limit": 250}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 14,
"client_id": 1,
"skill_id": 6,
"limit": 250
}
Server responses.
Delete a Client-Skill Link
Deletes a client-skill link record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_skill_id | integer | Record id. | none | No | 14 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/client_skills/14' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 14,
"client_id": 1,
"skill_id": 6
}
Server responses.
Agent-Skill Relationship
Assigns a skill to an agent so it can execute that behavior during live calls or IVR flows.
Create an Agent-Skill Link
Creates a new agent-skill link record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/agent_skills' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"skill_id": 6,"priority": 1}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 21,
"agent_id": 44,
"skill_id": 6,
"priority": 1
}
Server responses.
List Agent-Skill Relationship
Lists agent-skill relationship, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| skill_id | integer | Filter by skill. | none | Yes | 6 |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/agent_skills?skip=0&limit=20&agent_id=44&skill_id=6&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 21,
"agent_id": 44,
"skill_id": 6
}
]
Server responses.
Get an Agent-Skill Link
Retrieves a single agent-skill link record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_skill_id | integer | Record id. | none | No | 21 |
Request.
curl --location 'https://api.sendo.cloud/agent_skills/21' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 21,
"agent_id": 44,
"skill_id": 6,
"priority": 1,
"threshold": 0.7
}
Server responses.
Update an Agent-Skill Link
Updates an existing agent-skill link record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_skill_id | integer | Record id. | none | No | 21 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/agent_skills/21' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"priority": 2,"threshold": 0.8}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 21,
"agent_id": 44,
"skill_id": 6,
"priority": 2,
"threshold": 0.8
}
Server responses.
Delete an Agent-Skill Link
Deletes an agent-skill link record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| agent_skill_id | integer | Record id. | none | No | 21 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/agent_skills/21' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 21,
"agent_id": 44,
"skill_id": 6
}
Server responses.
Calls
Call lifecycle events and metadata (start, end, participants) used by telephony integrations to persist call history and trigger post-call processing.
Create Call
Records a call’s start metadata. Used by telephony integrations to persist call lifecycle and trigger post-call processing.
Request body.
curl --location -X POST 'https://api.sendo.cloud/calls' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"client_id": 1,"sip_number_id": 10,"incoming_number": "+15551230000"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 510,
"agent_id": 44,
"client_id": 1,
"status": "in_progress"
}
Server responses.
List Calls
Retrieves call logs — filter by time, agent, or SIP number for QA, analytics, or billing.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| sip_number_id | integer | Filter by SIP number. | none | Yes | 10 |
| incoming_number | string | Filter by caller number. | none | Yes | |
| start_time | string | Filter by start time (ISO 8601). | none | Yes | |
| end_time | string | Filter by end time (ISO 8601). | none | Yes | |
| status | string | Filter by call status. | none | Yes | completed |
| is_in | boolean | Filter inbound calls. | none | Yes | true |
| is_out | boolean | Filter outbound calls. | none | Yes | false |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | desc |
Request.
curl --location 'https://api.sendo.cloud/calls?client_id=1&agent_id=44&limit=20' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 510,
"agent_id": 44,
"client_id": 1,
"status": "completed"
}
]
Server responses.
Get Call
Retrieves call details — participants, duration, transcription links, recording references, and status. duration is converted to a string before being returned.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| call_id | integer | Call id. | none | No | 510 |
Request.
curl --location 'https://api.sendo.cloud/calls/510' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 510,
"agent_id": 44,
"client_id": 1,
"incoming_number": "+15551230000",
"status": "completed",
"duration": "184",
"room_id": "room-abc-123",
"audio": "call_510.wav",
"transcription_url": "https://s3.amazonaws.com/.../call_510.json"
}
Server responses.
Update Call
Updates call-level resources for a session — e.g. uploading audio, marking processing status, or attaching transcripts. Note: identified by room_id, not call_id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| room_id | string | Room id assigned to the call session. | none | No | room-abc-123 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/calls/room-abc-123' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"audio": "call_510.wav"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 510,
"room_id": "room-abc-123",
"audio": "call_510.wav"
}
Server responses.
Get Audio URL
Generates a temporary signed S3 URL to securely stream or download a call recording.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| audio | string | Audio filename. | none | No | call_510.wav |
Request.
curl --location 'https://api.sendo.cloud/audio-url/call_510.wav' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"url": "https://s3.amazonaws.com/...signed-url..."
}
Server responses.
TTS Configurations
Registers tts provider settings used by voice agents at runtime.
Create a TTS Configuration
Creates a new TTS configuration record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/tts_configurations' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"provider": "elevenlabs","details": [{"parameter":"model","value":"gpt-4o-mini","parameter_type":"string"},{"parameter":"temperature","value":"0.2","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 2,
"provider": "elevenlabs",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
List TTS Configurations
Lists tts configurations, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
Request.
curl --location 'https://api.sendo.cloud/tts_configurations?skip=0&limit=20' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 2,
"provider": "elevenlabs"
}
]
Server responses.
Get a TTS Configuration
Retrieves a single TTS configuration record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| tts_config_id | integer | Record id. | none | No | 2 |
Request.
curl --location 'https://api.sendo.cloud/tts_configurations/2' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 2,
"provider": "elevenlabs",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
Update a TTS Configuration
Updates an existing TTS configuration record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| tts_config_id | integer | Record id. | none | No | 2 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/tts_configurations/2' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"details": [{"parameter":"temperature","value":"0.5","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 2,
"provider": "elevenlabs",
"details": [
{
"parameter": "temperature",
"value": "0.5",
"parameter_type": "float"
}
]
}
Server responses.
Delete a TTS Configuration
Deletes a TTS configuration record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| tts_config_id | integer | Record id. | none | No | 2 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/tts_configurations/2' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 2,
"provider": "elevenlabs"
}
Server responses.
STT Configurations
Registers stt provider settings used by voice agents at runtime.
Create an STT Configuration
Creates a new STT configuration record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/stt_configurations' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"provider": "deepgram","details": [{"parameter":"model","value":"gpt-4o-mini","parameter_type":"string"},{"parameter":"temperature","value":"0.2","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 4,
"provider": "deepgram",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
List STT Configurations
Lists stt configurations, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
Request.
curl --location 'https://api.sendo.cloud/stt_configurations?skip=0&limit=20' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 4,
"provider": "deepgram"
}
]
Server responses.
Get an STT Configuration
Retrieves a single STT configuration record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| stt_config_id | integer | Record id. | none | No | 4 |
Request.
curl --location 'https://api.sendo.cloud/stt_configurations/4' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 4,
"provider": "deepgram",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
Update an STT Configuration
Updates an existing STT configuration record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| stt_config_id | integer | Record id. | none | No | 4 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/stt_configurations/4' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"details": [{"parameter":"temperature","value":"0.5","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 4,
"provider": "deepgram",
"details": [
{
"parameter": "temperature",
"value": "0.5",
"parameter_type": "float"
}
]
}
Server responses.
Delete an STT Configuration
Deletes an STT configuration record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| stt_config_id | integer | Record id. | none | No | 4 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/stt_configurations/4' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 4,
"provider": "deepgram"
}
Server responses.
LLM Configurations
Registers llm provider settings used by voice agents at runtime.
Create an LLM Configuration
Creates a new LLM configuration record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/llm_configurations' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"provider": "openai","details": [{"parameter":"model","value":"gpt-4o-mini","parameter_type":"string"},{"parameter":"temperature","value":"0.2","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 3,
"provider": "openai",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
List LLM Configurations
Lists llm configurations, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
Request.
curl --location 'https://api.sendo.cloud/llm_configurations?skip=0&limit=20' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 3,
"provider": "openai"
}
]
Server responses.
Get an LLM Configuration
Retrieves a single LLM configuration record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| llm_config_id | integer | Record id. | none | No | 3 |
Request.
curl --location 'https://api.sendo.cloud/llm_configurations/3' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 3,
"provider": "openai",
"details": [
{
"parameter": "model",
"value": "gpt-4o-mini",
"parameter_type": "string"
},
{
"parameter": "temperature",
"value": "0.2",
"parameter_type": "float"
}
]
}
Server responses.
Update an LLM Configuration
Updates an existing LLM configuration record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| llm_config_id | integer | Record id. | none | No | 3 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/llm_configurations/3' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"details": [{"parameter":"temperature","value":"0.5","parameter_type":"float"}]}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 3,
"provider": "openai",
"details": [
{
"parameter": "temperature",
"value": "0.5",
"parameter_type": "float"
}
]
}
Server responses.
Delete an LLM Configuration
Deletes an LLM configuration record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| llm_config_id | integer | Record id. | none | No | 3 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/llm_configurations/3' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 3,
"provider": "openai"
}
Server responses.
Provider Configuration Templates
A template schema used to validate provider-specific fields (LLM, TTS, STT), ensuring agent configurations meet each provider’s expectations.
Create a Provider Configuration Template
Creates a new provider configuration template record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/provider_configuration_templates' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"provider": "openai","provider_type": "llm","details": [{"parameter":"model","parameter_type":"string","required":true},{"parameter":"temperature","parameter_type":"float","required":false}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 12,
"provider": "openai",
"provider_type": "llm",
"details": [
{
"parameter": "model",
"parameter_type": "string",
"required": true
},
{
"parameter": "temperature",
"parameter_type": "float",
"required": false
}
]
}
Server responses.
List Provider Configuration Templates
Lists provider configuration templates, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| filter_key | string | Field name to filter templates by. | none | Yes | provider |
| filter_value | string | Value to match filter_key against. | none | Yes | openai |
Request.
curl --location 'https://api.sendo.cloud/provider_configuration_templates?skip=0&limit=20&filter_key=provider&filter_value=openai' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 12,
"provider": "openai",
"provider_type": "llm"
}
]
Server responses.
Get a Provider Configuration Template
Retrieves a single provider configuration template record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| provider_configuration_template_id | integer | Record id. | none | No | 12 |
Request.
curl --location 'https://api.sendo.cloud/provider_configuration_templates/12' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 12,
"provider": "openai",
"provider_type": "llm",
"details": [
{
"parameter": "model",
"parameter_type": "string",
"required": true
},
{
"parameter": "temperature",
"parameter_type": "float",
"required": false
}
]
}
Server responses.
Update a Provider Configuration Template
Updates an existing provider configuration template record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| provider_configuration_template_id | integer | Record id. | none | No | 12 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/provider_configuration_templates/12' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"details": [{"parameter":"max_tokens","parameter_type":"integer","required":false}]}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 12,
"provider": "openai",
"provider_type": "llm",
"details": [
{
"parameter": "max_tokens",
"parameter_type": "integer",
"required": false
}
]
}
Server responses.
Delete a Provider Configuration Template
Deletes a provider configuration template record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| provider_configuration_template_id | integer | Record id. | none | No | 12 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/provider_configuration_templates/12' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 12,
"provider": "openai",
"provider_type": "llm"
}
Server responses.
SIP and Telephony
Provisioning and routing for SIP numbers used to receive and place voice calls, plus operational/diagnostic views.
All Agents (with SIP Numbers)
Returns all agents with their associated SIP numbers, for operational dashboards and routing views.
Request.
curl --location 'https://api.sendo.cloud/all-agents' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 44,
"name": "Sales Assistant",
"sip_numbers": [
{
"id": 10,
"sip_number": "+14155550100"
}
]
}
]
Server responses.
List SIP Numbers
Lists provisioned SIP numbers used to receive and place voice calls for clients/agents.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 10 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| conversation_id | integer | Filter by bound conversation. | none | Yes | 8 |
| sip_number | string | Filter by number. | none | Yes | +14155550100 |
| is_in | boolean | Filter inbound-enabled numbers. | none | Yes | true |
| is_out | boolean | Filter outbound-enabled numbers. | none | Yes | true |
| description | string | Filter by description. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/sip-numbers?client_id=1&skip=0&limit=10' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"items": [
{
"id": 10,
"sip_number": "+14155550100",
"is_in": true,
"is_out": true
}
],
"total": 1,
"skip": 0,
"limit": 10
}
Server responses.
Get SIP Number
Retrieves SIP number provisioning details — assigned trunks and dispatch rules required for call handling.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| sip_number_id | integer | SIP number id. | none | No | 10 |
Request.
curl --location 'https://api.sendo.cloud/sip-numbers/10' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 10,
"client_id": 1,
"agent_id": 44,
"sip_number": "+14155550100",
"sip_trunk_in": "TRUNK_IN_123",
"sip_trunk_out": "TRUNK_OUT_456",
"sip_dispatch_rule": "RULE_789",
"is_in": true,
"is_out": true
}
Server responses.
Provision SIP Number
Provisions a new SIP number, creates trunks and dispatch rules, and optionally assigns it to an agent for call handling.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_id | integer | Owning client id. | none | No | 1 |
| agent_id | integer | Agent to assign the number to. | none | Yes | 44 |
Request body.
curl --location -X POST 'https://api.sendo.cloud/sip-numbers?client_id=1&agent_id=44' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"sip_number": "+14155550100","conversation_id": 8,"is_in": true,"is_out": true,"description": "Main support line"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 10,
"client_id": 1,
"agent_id": 44,
"sip_number": "+14155550100",
"sip_trunk_in": "TRUNK_IN_123",
"sip_trunk_out": "TRUNK_OUT_456",
"sip_dispatch_rule": "RULE_789",
"is_in": true,
"is_out": true
}
Server responses.
Process SIP Numbers
Reprocesses and reconciles SIP records to recreate missing telephony resources and fix provisioning issues.
Request.
curl --location 'https://api.sendo.cloud/process-sip-numbers' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"result": "Client SIP numbers were processed successfully"
}
Server responses.
Update SIP Number
Updates provisioning, routing, or assignment for a SIP number to change how calls are handled.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| sip_number_id | integer | SIP number id. | none | No | 10 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/sip-numbers/10' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 45,"is_out": false}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 10,
"sip_number": "+14155550100",
"agent_id": 45,
"is_out": false
}
Server responses.
Delete SIP Number
Deprovisions a SIP number and cleans up associated telephony artifacts when retiring a number.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| sip_number_id | integer | SIP number id. | none | No | 10 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/sip-numbers/10' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 10,
"sip_number": "+14155550100"
}
Server responses.
SIP Numbers Detailed
Returns a detailed view combining SIP numbers, agents, and voice configuration for diagnostics and reports.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| sip_number | string | Filter by number. | none | Yes | +14155550100 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
Request.
curl --location 'https://api.sendo.cloud/sip-numbers-detailed?sip_number=%2B14155550100' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 10,
"sip_number": "+14155550100",
"agent": {
"id": 44,
"name": "Sales Assistant",
"language": "en"
},
"llm_configuration": {
"id": 3,
"provider": "openai"
},
"tts_configuration": {
"id": 2,
"provider": "elevenlabs"
},
"stt_configuration": {
"id": 4,
"provider": "deepgram"
}
}
]
Server responses.
Outbound Campaigns
Trigger outbound calls, either one at a time (for testing) or in bulk dialing lists.
Start Campaigns (Batch)
Starts bulk outbound calling campaigns using configured voice agents and a dialing list. Runs asynchronously to scale.
Request body.
curl --location -X POST 'https://api.sendo.cloud/start-campaigns' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"0": {"target_number":"+15551230000","sip_number":"+14155550100","agent_id":44,"params":{"batch":"july"}},"1": {"target_number":"+15551239999","sip_number":"+14155550100","agent_id":44}}'
| Code | Description |
|---|---|
| 200 | OK |
{
"total": 2,
"results": [
{
"status": "ok",
"dispatch_id": "DISPATCH_003"
},
{
"status": "ok",
"dispatch_id": "DISPATCH_004"
}
]
}
Server responses.
Start Campaign (Quick, GET)
Triggers a single outbound call or test call via query parameters — a quick invocation without a JSON body.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| target_number | string | Number to call. | none | No | +15551230000 |
| sip_number | string | Originating SIP number. | none | No | +14155550100 |
| agent_id | integer | Agent to handle the call. | none | No | 44 |
| params | string | Optional JSON string with extra parameters. | none | Yes |
Request.
curl --location 'https://api.sendo.cloud/start-campaign?target_number=%2B15551230000&sip_number=%2B14155550100&agent_id=44' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"status": "ok",
"dispatch_id": "DISPATCH_001"
}
Server responses.
Start Campaign (Detailed, POST)
Starts a detailed single outbound campaign with scheduling, templates, and retry logic via a JSON body.
Request body.
curl --location -X POST 'https://api.sendo.cloud/start-campaign' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"target_number": "+15551230000","sip_number": "+14155550100","agent_id": 44,"params": {"source":"crm","priority":"high"}}'
| Code | Description |
|---|---|
| 200 | OK |
{
"status": "ok",
"dispatch_id": "DISPATCH_002"
}
Server responses.
Conversations
A conversation flow (IVR / dialogue tree) used by voice agents to handle calls, prompts, and decisions.
Create a Conversation
Creates a new conversation record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/conversations' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Sales Flow","description": "Inbound sales routing"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 8,
"name": "Sales Flow",
"description": "Inbound sales routing"
}
Server responses.
List Conversations
Lists conversations, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| name | string | Filter by name. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/conversations?skip=0&limit=20&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 8,
"name": "Sales Flow"
}
]
Server responses.
Get a Conversation
Retrieves a single conversation record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| conversation_id | integer | Record id. | none | No | 8 |
Request.
curl --location 'https://api.sendo.cloud/conversations/8' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 8,
"name": "Sales Flow",
"description": "Inbound sales routing",
"skills": [
{
"id": 6,
"name": "EmailTranscript"
}
]
}
Server responses.
Update a Conversation
Updates an existing conversation record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| conversation_id | integer | Record id. | none | No | 8 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/conversations/8' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"description": "Inbound sales routing (updated)"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 8,
"name": "Sales Flow",
"description": "Inbound sales routing (updated)"
}
Server responses.
Delete a Conversation
Deletes a conversation record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| conversation_id | integer | Record id. | none | No | 8 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/conversations/8' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 8,
"name": "Sales Flow"
}
Server responses.
Conversation Detail (with Transitions)
Retrieves the conversation with ordered transitions and detailed step metadata, for debugging or documentation.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| conversation_id | integer | Conversation id. | none | No | 8 |
Request.
curl --location 'https://api.sendo.cloud/conversation_detail/8' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 8,
"name": "Sales Flow",
"transitions": [
{
"id": 101,
"source_agent_id": 44,
"destination_agent_id": 45,
"trigger_condition": "intent=handoff"
}
]
}
Server responses.
Transitions
Routing rules and trigger-based transitions used to move callers between agents or conversation states.
Create a Transition
Creates a new transition record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/transitions' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"conversation_id": 8,"source_agent_id": 44,"destination_agent_id": 45,"trigger_condition": "intent=handoff","propagate_context": true}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 101,
"conversation_id": 8,
"source_agent_id": 44,
"destination_agent_id": 45,
"trigger_condition": "intent=handoff",
"propagate_context": true
}
Server responses.
List Transitions
Lists transitions, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| conversation_id | integer | Filter by conversation. | none | Yes | 8 |
| source_agent_id | integer | Filter by source agent. | none | Yes | 44 |
| destination_agent_id | integer | Filter by destination agent. | none | Yes | 45 |
| trigger_condition | string | Filter by trigger condition. | none | Yes | |
| propagate_context | boolean | Filter by context-propagation flag. | none | Yes | true |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/transitions?skip=0&limit=20&conversation_id=8&source_agent_id=44&destination_agent_id=45&propagate_context=true&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 101,
"source_agent_id": 44,
"destination_agent_id": 45,
"trigger_condition": "intent=handoff"
}
]
Server responses.
Get a Transition
Retrieves a single transition record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transition_id | integer | Record id. | none | No | 101 |
Request.
curl --location 'https://api.sendo.cloud/transitions/101' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 101,
"conversation_id": 8,
"source_agent_id": 44,
"destination_agent_id": 45,
"trigger_condition": "intent=handoff",
"propagate_context": true
}
Server responses.
Update a Transition
Updates an existing transition record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transition_id | integer | Record id. | none | No | 101 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/transitions/101' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"trigger_condition": "intent=billing_handoff"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 101,
"conversation_id": 8,
"source_agent_id": 44,
"destination_agent_id": 45,
"trigger_condition": "intent=billing_handoff"
}
Server responses.
Delete a Transition
Deletes a transition record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transition_id | integer | Record id. | none | No | 101 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/transitions/101' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 101,
"conversation_id": 8
}
Server responses.
Client-Conversation Relationship
Assigns a conversation flow to a client, enabling call routing and agent behavior customization for that client.
Create a Client-Conversation Link
Creates a new client-conversation link record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/client_conversations' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"client_id": 1,"conversation_id": 8,"active": true}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 17,
"client_id": 1,
"conversation_id": 8,
"active": true
}
Server responses.
List Client-Conversation Relationship
Lists client-conversation relationship, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| client_id | integer | Filter by client. | none | Yes | 1 |
| conversation_id | integer | Filter by conversation. | none | Yes | 8 |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/client_conversations?skip=0&limit=20&client_id=1&conversation_id=8&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 17,
"client_id": 1,
"conversation_id": 8
}
]
Server responses.
Get a Client-Conversation Link
Retrieves a single client-conversation link record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_conversation_id | integer | Record id. | none | No | 17 |
Request.
curl --location 'https://api.sendo.cloud/client_conversations/17' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 17,
"client_id": 1,
"conversation_id": 8,
"active": true,
"activation_start": null,
"activation_end": null
}
Server responses.
Update a Client-Conversation Link
Updates an existing client-conversation link record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_conversation_id | integer | Record id. | none | No | 17 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/client_conversations/17' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"active": false}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 17,
"client_id": 1,
"conversation_id": 8,
"active": false
}
Server responses.
Delete a Client-Conversation Link
Deletes a client-conversation link record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| client_conversation_id | integer | Record id. | none | No | 17 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/client_conversations/17' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 17,
"client_id": 1,
"conversation_id": 8
}
Server responses.
Call Transfers
Transfer and escalation rules used to route calls from voice agents to human operators or other handlers.
Create a Transfer Rule
Creates a new transfer rule record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/transfer_calls' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"operator_number": "+15550999999","take_over_message": "Connecting you to an operator","call_transfer_context": "billing"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 15,
"agent_id": 44,
"operator_number": "+15550999999"
}
Server responses.
List Call Transfers
Lists call transfers, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| operator_number | string | Filter by operator number. | none | Yes | |
| take_over_message | string | Filter by takeover message. | none | Yes | |
| call_transfer_context | string | Filter by transfer context. | none | Yes | billing |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/transfer_calls?skip=0&limit=20&agent_id=44&call_transfer_context=billing&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 15,
"agent_id": 44,
"operator_number": "+15550999999"
}
]
Server responses.
Get a Transfer Rule
Retrieves a single transfer rule record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transfer_call_id | integer | Record id. | none | No | 15 |
Request.
curl --location 'https://api.sendo.cloud/transfer_calls/15' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 15,
"agent_id": 44,
"operator_number": "+15550999999",
"take_over_message": "Connecting you to an operator",
"call_transfer_context": "billing"
}
Server responses.
Update a Transfer Rule
Updates an existing transfer rule record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transfer_call_id | integer | Record id. | none | No | 15 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/transfer_calls/15' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"take_over_message": "One moment, transferring your call"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 15,
"agent_id": 44,
"operator_number": "+15550999999",
"take_over_message": "One moment, transferring your call"
}
Server responses.
Delete a Transfer Rule
Deletes a transfer rule record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| transfer_call_id | integer | Record id. | none | No | 15 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/transfer_calls/15' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 15,
"agent_id": 44
}
Server responses.
Session Summaries
Automated or manual summaries of voice calls (key points, actions, follow-ups) for agents and supervisors.
Create a Session Summary
Creates a new session summary record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/session_summaries' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"participant_number": "+15551230000","summary_text": "Customer requested pricing details"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 88,
"agent_id": 44,
"participant_number": "+15551230000",
"summary_text": "Customer requested pricing details"
}
Server responses.
List Session Summaries
Lists session summaries, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| participant_number | string | Filter by caller number. | none | Yes | |
| summary_text | string | Filter by summary content. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/session_summaries?skip=0&limit=20&agent_id=44&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 88,
"agent_id": 44,
"summary_text": "Customer requested pricing details"
}
]
Server responses.
Get a Session Summary
Retrieves a single session summary record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| session_summary_id | integer | Record id. | none | No | 88 |
Request.
curl --location 'https://api.sendo.cloud/session_summaries/88' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 88,
"agent_id": 44,
"participant_number": "+15551230000",
"summary_text": "Customer requested pricing details"
}
Server responses.
Update a Session Summary
Updates an existing session summary record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| session_summary_id | integer | Record id. | none | No | 88 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/session_summaries/88' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"summary_text": "Customer requested pricing details; follow-up scheduled"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 88,
"agent_id": 44,
"summary_text": "Customer requested pricing details; follow-up scheduled"
}
Server responses.
Delete a Session Summary
Deletes a session summary record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| session_summary_id | integer | Record id. | none | No | 88 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/session_summaries/88' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 88,
"agent_id": 44
}
Server responses.
Collections
Collections of prompts, templates, or voice assets used by agents (e.g., greeting scripts or fallback prompts).
Create a Collection
Creates a new collection record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/collections' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"description": "Product Catalog","code": "CAT-001","items": [{"description":"Basic Plan"},{"description":"Premium Plan"}]}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 31,
"description": "Product Catalog",
"code": "CAT-001",
"items": [
{
"description": "Basic Plan"
},
{
"description": "Premium Plan"
}
]
}
Server responses.
List Collections
Lists collections, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| description | string | Filter by description. | none | Yes | |
| code | string | Filter by code. | none | Yes | CAT-001 |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/collections?skip=0&limit=20&code=CAT-001&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 31,
"description": "Product Catalog",
"code": "CAT-001"
}
]
Server responses.
Get a Collection
Retrieves a single collection record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| collection_id | integer | Record id. | none | No | 31 |
Request.
curl --location 'https://api.sendo.cloud/collections/31' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 31,
"description": "Product Catalog",
"code": "CAT-001",
"items": [
{
"description": "Basic Plan"
},
{
"description": "Premium Plan"
}
]
}
Server responses.
Update a Collection
Updates an existing collection record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| collection_id | integer | Record id. | none | No | 31 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/collections/31' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"items": [{"description":"Basic Plan"},{"description":"Premium Plan"},{"description":"Enterprise Plan"}]}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 31,
"description": "Product Catalog",
"code": "CAT-001",
"items": [
{
"description": "Basic Plan"
},
{
"description": "Premium Plan"
},
{
"description": "Enterprise Plan"
}
]
}
Server responses.
Delete a Collection
Deletes a collection record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| collection_id | integer | Record id. | none | No | 31 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/collections/31' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 31,
"description": "Product Catalog",
"code": "CAT-001"
}
Server responses.
Report Subscriptions
Scheduled reports (call metrics, agent performance) delivered to emails or operators.
GET /report_subcriptions — missing the second “s” in “subscriptions”. This is a real quirk of the API, not a typo in this document; the other four routes use the correctly spelled report_subscriptions. Create a Report Subscription
Creates a new report subscription record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/report_subscriptions' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"email": "analytics@acme.com","active": true,"report_type": "daily_calls"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 19,
"agent_id": 44,
"email": "analytics@acme.com",
"active": true,
"report_type": "daily_calls"
}
Server responses.
List Report Subscriptions
Lists report subscriptions, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| agent_id | integer | Filter by agent. | none | Yes | 44 |
| string | Filter by recipient email. | none | Yes | ||
| active | boolean | Filter by active status. | none | Yes | true |
| report_type | string | Filter by report type. | none | Yes | daily_calls |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/report_subcriptions?skip=0&limit=20&agent_id=44&active=true&report_type=daily_calls&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 19,
"agent_id": 44,
"email": "analytics@acme.com",
"active": true
}
]
Server responses.
Get a Report Subscription
Retrieves a single report subscription record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| report_subscription_id | integer | Record id. | none | No | 19 |
Request.
curl --location 'https://api.sendo.cloud/report_subscriptions/19' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 19,
"agent_id": 44,
"email": "analytics@acme.com",
"active": true,
"report_type": "daily_calls"
}
Server responses.
Update a Report Subscription
Updates an existing report subscription record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| report_subscription_id | integer | Record id. | none | No | 19 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/report_subscriptions/19' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"active": false}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 19,
"agent_id": 44,
"email": "analytics@acme.com",
"active": false
}
Server responses.
Delete a Report Subscription
Deletes a report subscription record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| report_subscription_id | integer | Record id. | none | No | 19 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/report_subscriptions/19' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 19,
"agent_id": 44,
"email": "analytics@acme.com"
}
Server responses.
Firewall Clients
Allowed/blocked caller entries used by routing and security to protect voice services from unwanted calls.
Create a Firewall Entry
Creates a new firewall entry record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/firewall_client' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Trusted Dialer","telephone": "+15554440000"}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 5,
"name": "Trusted Dialer",
"telephone": "+15554440000"
}
Server responses.
List Firewall Clients
Lists firewall clients, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| name | string | Filter by entry name. | none | Yes | |
| telephone | string | Filter by phone number. | none | Yes | |
| order_by | string | Field to sort by. | none | Yes | id |
| order_dir | string | asc or desc. | none | Yes | asc |
Request.
curl --location 'https://api.sendo.cloud/firewall_client?skip=0&limit=20&order_by=id&order_dir=asc' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 5,
"name": "Trusted Dialer",
"telephone": "+15554440000"
}
]
Server responses.
Get a Firewall Entry
Retrieves a single firewall entry record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| firewall_client_id | integer | Record id. | none | No | 5 |
Request.
curl --location 'https://api.sendo.cloud/firewall_client/5' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 5,
"name": "Trusted Dialer",
"telephone": "+15554440000"
}
Server responses.
Update a Firewall Entry
Updates an existing firewall entry record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| firewall_client_id | integer | Record id. | none | No | 5 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/firewall_client/5' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "Trusted Dialer (verified)"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 5,
"name": "Trusted Dialer (verified)",
"telephone": "+15554440000"
}
Server responses.
Delete a Firewall Entry
Deletes a firewall entry record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| firewall_client_id | integer | Record id. | none | No | 5 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/firewall_client/5' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 5,
"name": "Trusted Dialer",
"telephone": "+15554440000"
}
Server responses.
Skill Templates
Reusable skill templates (IVR menus, verification flows) that can be instantiated for new agents.
Create a Skill Template
Creates a new skill template record.
Request body.
curl --location -X POST 'https://api.sendo.cloud/skill_templates' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"name": "LookupCRM","webhook_url": "https://api.example.com/crm/lookup","description": "Fetch contact data","event": "on_intent","parameters": [{"name":"phone","type":"string"}],"static_parameters": {"source":"voice"}}'
| Code | Description |
|---|---|
| 201 | Created |
{
"id": 7,
"name": "LookupCRM",
"webhook_url": "https://api.example.com/crm/lookup"
}
Server responses.
List Skill Templates
Lists skill templates, with optional filtering and pagination.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skip | integer | Pagination offset. | none | Yes | 0 |
| limit | integer | Page size. | none | Yes | 20 |
| filter_key | string | Field name to filter templates by. | none | Yes | event |
| filter_value | string | Value to match filter_key against. | none | Yes | on_intent |
Request.
curl --location 'https://api.sendo.cloud/skill_templates?skip=0&limit=20&filter_key=event&filter_value=on_intent' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
[
{
"id": 7,
"name": "LookupCRM"
}
]
Server responses.
Get a Skill Template
Retrieves a single skill template record by id.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_template_id | integer | Record id. | none | No | 7 |
Request.
curl --location 'https://api.sendo.cloud/skill_templates/7' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 7,
"name": "LookupCRM",
"webhook_url": "https://api.example.com/crm/lookup",
"description": "Fetch contact data",
"event": "on_intent",
"parameters": [
{
"name": "phone",
"type": "string"
}
],
"static_parameters": {
"source": "voice"
}
}
Server responses.
Update a Skill Template
Updates an existing skill template record.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_template_id | integer | Record id. | none | No | 7 |
Request body.
curl --location -X PUT 'https://api.sendo.cloud/skill_templates/7' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"description": "Fetch contact data from CRM"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 7,
"name": "LookupCRM",
"description": "Fetch contact data from CRM"
}
Server responses.
Delete a Skill Template
Deletes a skill template record. The deleted record is echoed back in the response.
Parameters
| Field | Type | Description | Default Value | Optional | Example |
|---|---|---|---|---|---|
| skill_template_id | integer | Record id. | none | No | 7 |
Request.
curl --location -X DELETE 'https://api.sendo.cloud/skill_templates/7' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"id": 7,
"name": "LookupCRM"
}
Server responses.
Test Webhook (Reverse Words)
Demo webhook used for integration tests — simulates an incoming event to voice-processing pipelines.
Request body.
curl --location -X POST 'https://api.sendo.cloud/webhooks/reverse_words' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"word": "hello"}'
| Code | Description |
|---|---|
| 200 | OK |
{
"message": "The reversed word is: olleh"
}
Server responses.
WhatsApp Bridge
Receives WhatsApp events for agents that also handle chat, bridging them into the same processing pipeline as voice.
WhatsApp Bridge Webhook
Receives WhatsApp events and forwards text/media to bridge services — less commonly used for voice, but useful for multichannel integrations.
Request body.
curl --location -X POST 'https://api.sendo.cloud/whatsapp/webhook' --header 'Authorization: Bearer YOUR_TOKEN' --header 'Content-Type: application/json' --data-raw '{"agent_id": 44,"value": {"metadata":{"display_phone_number":"+14155550100"},"messages":[{"from_number":"+15551230000","timestamp":"1722250000","text":{"body":"Hi, I need support"}}]}}'
| Code | Description |
|---|---|
| 200 | OK |
{
"status": "forwarded",
"message_id": "wamid.HBg..."
}
Server responses.
SIP Concurrency Monitoring
Operational endpoints to monitor how many calls are active against your configured capacity.
Concurrent Call Count
Returns the current concurrent call total and the configured limit, to monitor capacity for voice agents.
Request.
curl --location 'https://api.sendo.cloud/concurrent-count' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"concurrent_calls": 4,
"max_concurrent_calls": 15
}
Server responses.
Concurrent Calls with Call IDs
Returns detailed concurrent call data with active call IDs, useful for troubleshooting and live operations.
Request.
curl --location 'https://api.sendo.cloud/concurrent-calls-with-call-id' --header 'Authorization: Bearer YOUR_TOKEN'
| Code | Description |
|---|---|
| 200 | OK |
{
"concurrent_calls": 4,
"max_concurrent_calls": 15,
"call_ids": [
"CA_001",
"CA_002",
"CA_003",
"CA_004"
]
}
Server responses.
On This Page
- Clients
- Create a Client
- List Clients
- Get a Client
- Users
- Create a User
- List Users
- Get a User
- Update a User
- Delete a User
- Client-User Relationship
- Create a Client-User Link
- List Client-User Relationship
- Get a Client-User Link
- Update a Client-User Link
- Delete a Client-User Link
- Agents
- Create Agent
- List Agents
- Paginated Agents
- Get Agent
- Update Agent
- Delete Agent
- Skills
- Create a Skill
- List Skills
- Get a Skill
- Update a Skill
- Delete a Skill
- Client-Skill Relationship
- Create a Client-Skill Link
- List Client-Skill Relationship
- Get a Client-Skill Link
- Update a Client-Skill Link
- Delete a Client-Skill Link
- Agent-Skill Relationship
- Create an Agent-Skill Link
- List Agent-Skill Relationship
- Get an Agent-Skill Link
- Update an Agent-Skill Link
- Delete an Agent-Skill Link
- Calls
- Create Call
- List Calls
- Get Call
- Update Call
- Get Audio URL
- TTS Configurations
- Create a TTS Configuration
- List TTS Configurations
- Get a TTS Configuration
- Update a TTS Configuration
- Delete a TTS Configuration
- STT Configurations
- Create an STT Configuration
- List STT Configurations
- Get an STT Configuration
- Update an STT Configuration
- Delete an STT Configuration
- LLM Configurations
- Create an LLM Configuration
- List LLM Configurations
- Get an LLM Configuration
- Update an LLM Configuration
- Delete an LLM Configuration
- Provider Configuration Templates
- Create a Provider Configuration Template
- List Provider Configuration Templates
- Get a Provider Configuration Template
- Update a Provider Configuration Template
- Delete a Provider Configuration Template
- SIP and Telephony
- All Agents (with SIP Numbers)
- List SIP Numbers
- Get SIP Number
- Provision SIP Number
- Process SIP Numbers
- Update SIP Number
- Delete SIP Number
- SIP Numbers Detailed
- Outbound Campaigns
- Start Campaigns (Batch)
- Start Campaign (Quick, GET)
- Start Campaign (Detailed, POST)
- Conversations
- Create a Conversation
- List Conversations
- Get a Conversation
- Update a Conversation
- Delete a Conversation
- Conversation Detail (with Transitions)
- Transitions
- Create a Transition
- List Transitions
- Get a Transition
- Update a Transition
- Delete a Transition
- Client-Conversation Relationship
- Create a Client-Conversation Link
- List Client-Conversation Relationship
- Get a Client-Conversation Link
- Update a Client-Conversation Link
- Delete a Client-Conversation Link
- Call Transfers
- Create a Transfer Rule
- List Call Transfers
- Get a Transfer Rule
- Update a Transfer Rule
- Delete a Transfer Rule
- Session Summaries
- Create a Session Summary
- List Session Summaries
- Get a Session Summary
- Update a Session Summary
- Delete a Session Summary
- Collections
- Create a Collection
- List Collections
- Get a Collection
- Update a Collection
- Delete a Collection
- Report Subscriptions
- Create a Report Subscription
- List Report Subscriptions
- Get a Report Subscription
- Update a Report Subscription
- Delete a Report Subscription
- Firewall Clients
- Create a Firewall Entry
- List Firewall Clients
- Get a Firewall Entry
- Update a Firewall Entry
- Delete a Firewall Entry
- Skill Templates
- Create a Skill Template
- List Skill Templates
- Get a Skill Template
- Update a Skill Template
- Delete a Skill Template
- Test Webhook (Reverse Words)
- WhatsApp Bridge
- WhatsApp Bridge Webhook
- SIP Concurrency Monitoring
- Concurrent Call Count
- Concurrent Calls with Call IDs