Download OpenAPI specification:Download
FonoUC API REST documentation
[- {
- "name": "string",
- "role_id": "string",
- "permissions": {
- "reports": {
- "enabled": true
}, - "provision": {
- "enabled": true
}, - "status": {
- "enabled": true
}, - "config": {
- "enabled": true
}, - "smart_pbx": {
- "enabled": true
}, - "users": {
- "enabled": true,
- "user": {
- "read": true,
- "create": true,
- "delete": true,
- "edit": true,
- "disable": true
}
}
}
}
]{- "_id": "string",
- "realm": "string",
- "name": "string",
- "timezone": "string",
- "is_reseller": true,
- "pvt_account_db": "string",
- "pvt_account_id": "string",
- "pvt_alphanum_name": "string",
- "pvt_superduper_admin": true,
- "pvt_tree": [
- "string"
], - "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}, - "fonoUC": {
- "collaboration": {
- "id": "string",
- "enabled": true,
- "webrtc": true
}, - "call_recording": {
- "enabled": true,
- "size_limit": 0,
- "retention_duration": 0
}, - "custom_routing": { },
- "locations": {
- "enabled": false,
- "default": "string",
- "data": [
- {
- "name": "string",
- "note": "string",
- "timezone": "string",
- "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}
}
]
}, - "auto_provision": { },
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}, - "callcenter": {
- "enabled": true
}, - "desktop": {
- "enabled": true
}, - "fixed_destination": {
- "enabled": true,
- "destination": 0
}
}
}| accountID required | string ID of account to update Call Recording feature status |
| enabled | boolean Call Recording feature status |
| retention_duration | number Max number of days that the recordings will be stored in local database |
| size_limit | number Max disk size in MB that will be used to store recordings |
{- "enabled": true,
- "retention_duration": 0,
- "size_limit": 0
}| accountID required | string <string> ID of account to get transcription feature status |
| enabled | boolean |
object |
{- "enabled": true,
- "settings": {
- "recordings": {
- "auto": true
}, - "voicemails": {
- "auto": true
}
}
}| X-Account-ID | string Account ID |
Account information that needs to be added to the systeem
| name | string Account Name |
| timezone | string Account timezone |
| is_reseller | boolean Flag to indicate if account is reseller |
| service_plans | Array of strings |
object Collaboration settings | |
object (Address) Address settings | |
object or null Values to override service plans | |
object or null Account limits | |
object or null Call recording information | |
object or null Credit information | |
Array of objects or null (UserAdd) Users to add on account creation | |
object Autoprovisioning parameters for UCP and UCP mobile | |
object |
{- "name": "string",
- "timezone": "string",
- "is_reseller": true,
- "service_plans": [
- "string"
], - "collaboration": {
- "enabled": true,
- "webrtc": true
}, - "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}, - "overrides": {
- "service_plan_id": {
- "users": {
- "user": {
- "rate": 0
}, - "admin": {
- "rate": 0
}, - "_all": {
- "rate": 0
}
}, - "phone_numbers": {
- "caribbean": {
- "rate": 0
}, - "did_us": {
- "rate": 0
}, - "emergency": {
- "rate": 0
}, - "international": {
- "rate": 0
}, - "local": {
- "rate": 0
}, - "sri_lanka": {
- "rate": "string"
}, - "toll_us": {
- "rate": 0
}, - "tollfree_us": {
- "rate": 0
}, - "unknown": {
- "rate": 0
}, - "_all": {
- "rate": 0
}
}
}
}, - "limits": {
- "inbound_trunks": 0,
- "outbound_trunks": 0,
- "twoway_trunks": 0
}, - "call_recording": {
- "enabled": true,
- "retention_duration": 0
}, - "credit": {
- "add": 0,
- "treshold_alert": 0,
- "recharge_treshold": 0,
- "recharge_amount": 0
}, - "users": [
- {
- "email": "string",
- "level": "string",
- "first_name": "string",
- "last_name": "string",
- "number": "string",
- "password": "string",
- "send_email_on_creation": true
}
], - "auto_provision": {
- "ucp": {
- "enabled": true,
- "codecs": {
- "audio": [
- "string"
]
}
}, - "ucp_mobile": {
- "enabled": true,
- "codecs": {
- "audio": [
- "string"
], - "video": [
- "string"
]
}
}
}, - "contact": {
- "technical": {
- "email": "string",
- "name": "string",
- "number": "string"
}
}
}{- "id": "string"
}| name required | string <= 128 characters Name of the agent. |
| description | string Description of the agent. |
| instructions required | string Instructions for the agent. |
| extension required | string Phone extension of the agent. |
{- "name": "John Doe",
- "description": "Support agent for customer inquiries.",
- "instructions": "Follow up on all customer tickets within 24 hours.",
- "extension": "1001"
}{- "id": "string"
}| id required | string ID of the agent to update. |
| name required | string <= 128 characters Name of the agent. |
| description | string Description of the agent. |
| instructions required | string Instructions for the agent. |
| extension required | string Phone extension of the agent. |
{- "name": "John Doe",
- "description": "Support agent for customer inquiries.",
- "instructions": "Follow up on all customer tickets within 24 hours.",
- "extension": "1001"
}Endpoints powering the AI Concierge product (signup flow, authentication, voice catalog, DID search, etc.)
Verifies the provided Google OAuth access token and returns a short-lived signup token (30 minutes) whose claims include the Google email, to be used across the signup flow.
| accessToken | string Google OAuth access token |
{- "accessToken": "string"
}{- "signupToken": "string"
}Verifies the Google OAuth access token and looks up a user with the authenticated email.
account is omitted, the backend searches across all accounts.account is provided, the search is limited to that account.When the user belongs to exactly one account (or the account is specified), access and refresh tokens are returned. When the user belongs to multiple accounts, the list of accounts is returned so the client can re-send the request with the chosen account id.
| accessToken | string Google OAuth access token |
| account | string Optional account id to restrict the lookup |
{- "accessToken": "string",
- "account": "string"
}{- "accountId": "string",
- "userId": "string",
- "accessToken": "string",
- "refreshToken": "string",
- "accounts": [
- {
- "id": "string",
- "name": "string"
}
]
}Returns the catalog of voices that can be assigned to the AI agent during signup. Each entry includes a previewUrl pointing to the audio preview endpoint.
[- {
- "id": "string",
- "name": "string",
- "gender": "Male",
- "description": "string",
- "avatarColor": "string",
- "previewUrl": "string"
}
]Queries the DID provider (Twilio) for local phone numbers that match the given ISO country code and optional area code.
| country required | string ISO 3166-1 alpha-2 country code (e.g. US, CA, AR) |
| areaCode | string Numeric area code prefix to filter available numbers |
[- {
- "id": "string",
- "number": "string",
- "location": "string"
}
]Returns the catalog of plans a user can pick during signup. The plans are stored in the AI Concierge master account as service plan documents linked to permissions templates. Missing plans / permissions are created on the first call.
[- {
- "id": "string",
- "name": "string",
- "ratePerUser": 0,
- "features": {
- "desktop": true,
- "mobile": true,
- "portal": true,
- "smartpbx": true,
- "reports": true,
- "callcenter": true,
- "phone_numbers": true,
- "sms": true
}
}
]Sanitizes the provided name (trims and collapses internal whitespace) and reports whether it can be used as the account name when completing signup. The same sanitization runs at account creation time to guarantee the value checked here is the one persisted.
| name required | string Agency name to validate (URL-encoded) |
| Authorization required | string Bearer |
{- "name": "string",
- "available": true
}Creates a Stripe customer for the signup email and a SetupIntent whose client secret is returned so the FE can securely collect card details via Stripe.js (no card data ever touches our backend).
The returned customerId + the payment method id the FE obtains after
confirming the SetupIntent must be sent in the accounts/new request.
| Authorization required | string Bearer |
{- "customerId": "string",
- "clientSecret": "string"
}Final step of the signup flow. Provisions everything needed for the customer to start using AI Concierge:
fullName).ai_concierge.twilio_sip_trunk_sid is configured, attaches the
DID to that Elastic SIP Trunk (QVoice inbound) before Kazoo
registration. Registers the number in the numbers DB. If anything
after the Twilio purchase fails the number is released automatically
to avoid charges.All createAccountRequest fields are required.
| Authorization required | string Bearer |
| agencyName | string Used both as the account name and as part of the realm |
| fullName | string |
| country | string ISO 3166-1 alpha-2 country code |
| state | string Region / province / state of the agency |
| timezone | string IANA timezone name (e.g. "America/Argentina/Buenos_Aires") |
| agentName | string |
| voiceId | string Voice id from the voices catalog |
| language | string Primary language code (e.g. "en", "es") |
| greeting | string |
| greetingOutbound | string First sentence the AI agent will say on outbound calls. Empty string is valid; backend cap is 1000 characters. |
| voicemailGreeting | string Text for the admin user's voicemail greeting. Persisted on persona.voicemail_greeting; audio is synthesized by OpenAI in the signup voiceId and uploaded as an MP3 to the VMBox media. Empty string is replaced server-side with a default greeting built from the first name. Backend cap is 1000 characters. |
| areaCodePrefix | string Area code prefix used for the number search |
| phoneNumberId | string E.164 phone number selected from the availability search |
| planId | string Plan id from the signup plans endpoint |
| billingCycle | string Enum: "monthly" "yearly" |
| stripeCustomerId | string |
| paymentMethodId | string |
{- "agencyName": "string",
- "fullName": "string",
- "country": "string",
- "state": "string",
- "timezone": "string",
- "agentName": "string",
- "voiceId": "string",
- "language": "string",
- "greeting": "string",
- "greetingOutbound": "string",
- "voicemailGreeting": "string",
- "areaCodePrefix": "string",
- "phoneNumberId": "string",
- "planId": "string",
- "billingCycle": "monthly",
- "stripeCustomerId": "string",
- "paymentMethodId": "string"
}{- "accountId": "string",
- "userId": "string",
- "agentId": "string",
- "accessToken": "string",
- "refreshToken": "string"
}Returns the AI Concierge user and account documents with only the fields relevant to the FE, derived from the data persisted during signup.
Authenticated with a session access token; the user id and account id are extracted from the token claims.
| Authorization required | string Bearer |
{- "user": {
- "id": "string",
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "fullName": "string"
}, - "account": {
- "id": "string",
- "name": "string",
- "country": "string",
- "state": "string",
- "timezone": "string",
- "plan": "string",
- "billing": "monthly"
}
}Returns the AI Concierge agent document for the authenticated account. Each account has exactly one agent (created at signup time).
The Twilio SID stored alongside the phone number is intentionally omitted from the response — it is an internal handle used for provider operations and never needed by the FE.
| Authorization required | string Bearer |
{- "id": "string",
- "name": "string",
- "voiceId": "string",
- "language": "string",
- "greeting": "string",
- "greetingOutbound": "string",
- "voicemailGreeting": "string",
- "phoneNumber": {
- "number": "string"
}, - "gmailInboundCampaignId": "string",
- "gmailSenderInclude": [
- "string"
]
}Partial update of the AI Concierge agent. Only supplied fields are written. Returns the same shape as GET /agent.
The voicemail audio is regenerated (OpenAI TTS in the persona voice)
when voicemailGreeting is supplied OR when voiceId changes and the
persona already has a voicemail greeting. language is NOT required
for the voicemail greeting.
If the persona write succeeds but the voicemail step fails, the response is 502 and the persona change is kept (partial-write window; the FE should re-fetch via GET /agent to show the actual state).
| Authorization required | string Bearer |
| name | string |
| voiceId | string |
| greeting | string |
| greetingOutbound | string First sentence the AI speaks on outbound calls. Empty string clears the field. Max 1000 characters. |
| voicemailGreeting | string Voicemail greeting text. Persisted on persona.voicemail_greeting; audio is synthesized by OpenAI in the persona voice and uploaded as an MP3. Empty string is replaced with a default greeting (never cleared). Max 1000 characters. |
| language | string Enum: "en" "es" Optional. Rewrites the persona prompt language instruction. Not coupled to the voicemail greeting (voicemail voice is the persona voice). |
| officeHours | object |
| voiceWhatsappNotifyScope | string |
| gmailInboundCampaignId | string |
| gmailSenderInclude | Array of strings |
{- "name": "string",
- "voiceId": "string",
- "greeting": "string",
- "greetingOutbound": "string",
- "voicemailGreeting": "string",
- "language": "en",
- "officeHours": { },
- "voiceWhatsappNotifyScope": "string",
- "gmailInboundCampaignId": "string",
- "gmailSenderInclude": [
- "string"
]
}{- "id": "string",
- "name": "string",
- "voiceId": "string",
- "greeting": "string",
- "greetingOutbound": "string",
- "voicemailGreeting": "string",
- "status": "active"
}| X-Account-ID required | string Account ID for which to create the API key |
API key information that needs to be created
| name required | string Nombre de la API key |
| description | string Descripción opcional de la API key |
| expires_at | integer <int64> >= 0 Timestamp Unix de expiración (0 = sin expiración) |
{- "name": "API Key para integración",
- "description": "API key para integración con sistema externo",
- "expires_at": 1735689600
}{- "id": "string",
- "key": "string",
- "account_id": "string",
- "name": "string",
- "description": "string",
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "is_revoked": true,
- "expires_at": 1735689600
}| X-Account-ID required | string Account ID for which to list API keys |
[- {
- "id": "string",
- "name": "string",
- "description": "string",
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used": "2019-08-24T14:15:22Z",
- "is_revoked": true,
- "expires_at": "2019-08-24T14:15:22Z",
- "is_expired": true
}
]| key_id required | string ID of the API key to retrieve |
| X-Account-ID required | string Account ID for which to retrieve the API key |
{- "id": "string",
- "name": "string",
- "description": "string",
- "created_by": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "last_used": "2019-08-24T14:15:22Z",
- "is_revoked": true,
- "expires_at": "2019-08-24T14:15:22Z",
- "is_expired": true
}| username | string User Email |
| password | string User Password |
| domain | string User account name |
{- "username": "string",
- "password": "string",
- "domain": "string"
}{- "access_token": "string",
- "refresh_token": "string",
- "user": { }
}| audio required | Array of strings UCP Mobile audio codecs list |
| video required | Array of strings UCP Mobile video codecs list |
| transport | string Default: "tcp" UCP Mobile transport. [udp | tcp] |
{- "audio": [
- "string"
], - "video": [
- "string"
], - "transport": "tcp"
}{- "id": "string",
- "name": "string",
- "extension": "string",
- "queues": [
- {
- "id": "string",
- "name": "string",
- "logged_in": true,
- "total_agents": 0,
- "logged_in_agents": 0,
- "logged_out_agents": 0,
- "did": "string",
- "callers_in_queue": 0,
- "last_status_change": 0
}
]
}{- "id": "string",
- "name": "string",
- "max_time_caller_in_queue": 0,
- "strategy": "string",
- "agents": [
- {
- "id": "string",
- "name": "string",
- "extension": "string",
- "delay": 0,
- "timeout": 0,
- "logged_in": true,
- "status": "string",
- "registered": true,
- "conference": {
- "id": "string",
- "answered": true,
- "participants": 0,
- "duration": 0,
- "agent": {
- "hear": true,
- "speak": true,
- "duration": 0
}, - "caller": {
- "name": "string",
- "number": "string",
- "hear": true,
- "speak": true,
- "duration": 0
}
}
}
], - "total_agents": 0,
- "logged_in_agents": 0,
- "logged_out_agents": 0
}[- {
- "id": "string",
- "name": "string",
- "answered": true,
- "participants": 0,
- "duration": 0,
- "agent": [
- {
- "id": "string",
- "name": "string",
- "ext": 0,
- "hear": true,
- "speak": true,
- "duration": 0
}
], - "caller": {
- "name": "string",
- "number": "string",
- "hear": true,
- "speak": true,
- "duration": 0
}, - "wait_time": 0,
- "queue_id": "string",
- "call_id": "string"
}
]Patches a supervisor extension into a live queue conference in one of three monitoring modes. The request is forwarded to the queues engine over RabbitMQ. Restricted to account admins and queue supervisors (UserAdminOrSupervisorMiddleware).
The mode is selected by the action path parameter:
spy — silent monitoring. The supervisor hears the call but is
muted to everyone (listen / eavesdrop).barge — the supervisor joins and is audible to both parties.coach — whisper / coaching. The supervisor is audible ONLY to the
monitored agent (ext), not to the remote party.This is the queue-conference twin of the live-call endpoint POST /api/v2/calls/{action}/{uuid}/{extension}; here the target is identified by the queue conference id rather than a call-leg UUID.
| confid required | string Queue conference id of the call to monitor. |
| ext required | string Supervisor extension to patch into the conference. |
| action required | string Enum: "spy" "barge" "coach" Monitoring mode. |
| X-Account-ID required | string Kazoo account id that owns the queue conference. |
| file | string <binary> |
| name | string |
| type | string Enum: "mp3" "x-wav" |
| description | string |
{- "streamable": true,
- "name": "string",
- "description": "string",
- "prompt_id": "string",
- "language": "string",
- "tts": {
- "voice": "string"
}, - "media_source": "string",
- "id": "string"
}Access and modify the information that has to do with Call Recording, both for the account and for the users.
| name | string Callflow Name |
| type | string Callflow Type |
| numbers | Array of strings Callflow Numbers |
| patterns | Array of strings Callflow Patterns |
Array of objects Callflow Modules list |
{- "name": "string",
- "type": "string",
- "numbers": [
- "string"
], - "patterns": [
- "string"
], - "modules": [
- {
- "name": "string",
- "data": { }
}
]
}{- "id": "string"
}Returns the full callflow document for the supplied id, including the list of DIDs/extensions attached to it (numbers), any matching patterns, the top-level routing module (flow), and the fonoUC callflow extensions (queue id, omnichannel team, CRM popup config, after-call actions, etc.). Use this to resolve a DID → callflow → destination (queue, user, voicemail, ring group, …) for routing UIs.
| id required | string Callflow ID |
{- "_id": "string",
- "name": "string",
- "owner_id": "string",
- "numbers": [
- "string"
], - "patterns": [
- "string"
], - "type": "string",
- "group_id": "string",
- "contact_list": {
- "property1": true,
- "property2": true
}, - "flow": {
- "module": "string",
- "data": { },
- "children": { }
}, - "fonoUC": { }
}| id required | string Callflow ID |
| name | string Callflow Name |
| type | string Callflow Type |
| numbers | Array of strings Callflow Numbers |
| patterns | Array of strings Callflow Patterns |
Array of objects Callflow Modules list |
{- "name": "string",
- "type": "string",
- "numbers": [
- "string"
], - "patterns": [
- "string"
], - "modules": [
- {
- "name": "string",
- "data": { }
}
]
}{- "enabled": true,
- "account_mode": true,
- "retention_duration": 0,
- "size_limit": 0,
- "service": "string",
- "is_filename_custom": true,
- "custom_filename": "%call_id-%caller_id_number-%caller_id_name",
- "encryption": {
- "enabled": false,
- "algorithm": "AES-256-GCM",
- "key_version": 1,
- "key_id": "key_1234567890",
- "salt": "base64-encoded-salt",
- "encrypted_key": "encrypted-account-specific-key"
}
}| account_mode required | boolean |
| outbound_onnet | boolean |
| outbound_offnet | boolean |
| inbound_onnet | boolean |
| inbound_offnet | boolean |
Array of objects (EditCallRecordingUserData) | |
| is_filename_custom | boolean |
| custom_filename | string |
| enable_recording_per_user | boolean |
object HIPAA compliant encryption configuration for recordings |
{- "account_mode": true,
- "outbound_onnet": true,
- "outbound_offnet": true,
- "inbound_onnet": true,
- "inbound_offnet": true,
- "edited_users": [
- {
- "id": "string",
- "outbound_onnet": true,
- "outbound_offnet": true,
- "inbound_onnet": true,
- "inbound_offnet": true
}
], - "is_filename_custom": true,
- "custom_filename": "string",
- "enable_recording_per_user": true,
- "encryption": {
- "enabled": false,
- "algorithm": "AES-256-GCM",
- "key_version": 1,
- "key_id": "key_1234567890",
- "salt": "base64-encoded-salt",
- "encrypted_key": "encrypted-account-specific-key"
}
}[- {
- "id": "string",
- "username": "string",
- "first_name": "string",
- "last_name": "string",
- "outbound_onnet": true,
- "outbound_offnet": true,
- "inbound_onnet": true,
- "inbound_offnet": true
}
]Retrieves the current encryption configuration for call recordings.
| X-Account-ID required | string Account ID |
{- "success": true,
- "config": {
- "enabled": true,
- "algorithm": "string",
- "key_version": 0,
- "key_id": "string",
- "salt": "string",
- "encrypted_key": "string"
}
}Updates the encryption configuration for call recordings. This endpoint allows you to enable or disable encryption and configure encryption parameters.
| X-Account-ID required | string Account ID |
| enabled | boolean Whether to enable encryption for call recordings |
| algorithm | string Encryption algorithm to use (optional, defaults to AES-256-GCM) |
| key_version | integer Version of the encryption key (optional, defaults to 1) |
| key_id | string Unique identifier for the encryption key (optional) |
| salt | string Base64 encoded salt for encryption (optional) |
| encrypted_key | string Encrypted account-specific key (optional) |
{- "enabled": false,
- "algorithm": "AES-256-GCM",
- "key_version": 1,
- "key_id": "key_default",
- "salt": "default_salt",
- "encrypted_key": "default_encrypted_key"
}{- "success": true,
- "message": "Encryption configuration updated successfully",
- "config": {
- "enabled": true,
- "algorithm": "string",
- "key_version": 0,
- "key_id": "string",
- "salt": "string",
- "encrypted_key": "string"
}
}This endpoint allows users to toggle recording for a specific call.
| id required | any The ID of the call to toggle recording for. You should look for the |
| action required | any The action to perform (start or stop recording) |
| filename | any The name of the file to save the recording as. You should look for the |
Real-time call control (hangup). Originating, bridging, transferring and querying live call state are not exposed as REST endpoints — see the "Calls (real-time)" note below.
Tears down a two-legged call by call-leg UUID. The inbound and outbound leg UUIDs come from the CDR or from the realtime call events that the platform emits. The handler first attempts to hang up via the Kazoo API (HangupCall) on the inbound leg, then falls back to the outbound leg, and finally to a force fs_cli uuid_kill over SSH on every configured FreeSWITCH node if both API calls fail. Both legs are best-effort: a 204 No Content only means the request was accepted, not that both legs were guaranteed alive when the kill was issued.
| inbound required | string <uuid> UUID of the inbound leg (A-leg). |
| outbound | string <uuid> UUID of the outbound leg (B-leg). Optional but strongly recommended for bridged calls — if only the inbound leg is supplied and the Kazoo hangup of that leg fails, the call cannot be torn down. |
Adds a supervisor extension into a live call leg in one of three listen modes. The handler forwards the request to the queues / three-way engine (GET /threeway_barge) which patches the supervisor into the existing bridge.
The mode is selected by the action path parameter:
spy — silent monitoring. The supervisor hears both parties but
is muted to everyone (a.k.a. listen / eavesdrop).barge — the supervisor joins the conversation and is audible to
both parties.coach — whisper / coaching. The supervisor is audible ONLY to the
monitored agent (extension), not to the remote party.This endpoint is the call-control twin of PUT /callcenter/queue/queue_add_agent/{confid}/{ext}/{action}; this one keys off the live call-leg UUID, the call-center one keys off the queue conference id. The HTTP status returned mirrors whatever the queues engine replies with.
| action required | string Enum: "spy" "barge" "coach" Monitoring mode. |
| uuid required | string <uuid> UUID of the call leg to monitor (from the CDR or realtime call events). |
| extension required | string Supervisor extension to patch into the call. |
| X-Account-ID required | string Kazoo account id that owns the call. |
| id required | string Campaign ID |
| number | string |
| retries | integer Number of retries assigned to number. If omitted, then campaign rules will apply. |
| first_name | string |
| last_name | string |
| type | string |
| priority | integer range 1 to 100 |
| ticket_id | string custom value |
| note | string custom value |
| cool_off | integer in seconds |
| cool_off_2nd | integer in seconds |
| cool_off_3rd | integer in seconds |
{- "number": "string",
- "retries": 0,
- "first_name": "string",
- "last_name": "string",
- "type": "string",
- "priority": 0,
- "ticket_id": "string",
- "note": "string",
- "cool_off": 0,
- "cool_off_2nd": 0,
- "cool_off_3rd": 0
}| id required | string Campaign ID |
| method required | string HTTP method to be used (e.g., GET, POST) in the API request |
| url required | string URL of the CRM API endpoint to fetch leads |
required | object Mapping between CRM response fields and internal lead fields |
{- "method": "string",
- "url": "string",
- "mapping": {
- "leads_array": "string",
- "first_name": "string",
- "last_name": "string",
- "number": "string",
- "priority": "string",
- "ticket_id": "string",
- "dial_retries": "string",
- "first_cooloff": "string",
- "cooloff": "string",
- "notes": "string"
}
}| lead_id required | string Number ID |
| number | string |
| retries | integer Number of retries assigned to number. If omitted, then campaign rules will apply. |
{- "number": "string",
- "retries": 0
}| from required | integer <int64> Example: from=1640995200 Start of the date range as a unix timestamp |
| to required | integer <int64> Example: to=1641081600 End of the date range as a unix timestamp |
[- {
- "call_id": "string",
- "cdr_id": "string",
- "customer_number": "string",
- "queue_id": "string",
- "agent_id": "string",
- "disposition_id": "string",
- "follow_up_timestamp": 0,
- "follow_up_notes": "string",
- "follow_up_reason": "string",
- "status": "string",
- "created": 0
}
]A follow-up with no call behind it: no CDR, call, queue or disposition. It belongs to the signed-in
user, never to an agent named in the body, and is delivered by the same reminder and Follow-Up
WebSocket events as a follow-up set in a call's wrap-up. Its cdr_id is <YYYYMM>-manual-<32 hex>.
Refused for an API key, and for a user working in an account other than their own (X-Account-ID).
| customer_number required | string The number to call back. Spaces, dashes, brackets and dots are dropped; what remains must match |
| follow_up_reason required | string <= 120 characters Why the agent will call back. Required; trimmed; at most 120 characters. |
| follow_up_timestamp required | integer <int64> When to call back, unix seconds. At least one scheduler pending-check interval ahead ( |
| follow_up_notes | string Optional notes. |
{- "customer_number": "+27115550100",
- "follow_up_reason": "Send the quote",
- "follow_up_timestamp": 1792500000,
- "follow_up_notes": "string"
}| cdr_id required | string The CDR ID of the follow-up event |
{- "call_id": "string",
- "cdr_id": "string",
- "customer_number": "string",
- "queue_id": "string",
- "agent_id": "string",
- "disposition_id": "string",
- "follow_up_timestamp": 0,
- "follow_up_notes": "string",
- "follow_up_reason": "string",
- "status": "string",
- "created": 0
}| cdr_id required | string The CDR ID of the follow-up event |
| status required | string Enum: "pending" "reminded" "offered" "in_progress" "completed" "cancelled" The new status for the follow-up event. Allowed transitions: pending → reminded/offered/in_progress/cancelled, reminded → offered/in_progress/cancelled, offered → in_progress/cancelled, in_progress → completed/cancelled |
{- "status": "in_progress"
}| id required | string The ID of the call to edit disposition |
| X-Account-ID required | string The ID of the account for which the call belongs |
| disposition required | string The disposition value for the call |
| follow_up_timestamp | integer <int64> Timestamp for follow-up action |
| follow_up_notes | string Notes for follow-up action |
object Type of follow-up action | |
object Subdisposition information (optional) |
{- "disposition": "ANSWERED",
- "follow_up_timestamp": 1640995200,
- "follow_up_notes": "Customer requested callback",
- "follow_up_type": {
- "value": "callback",
- "label": "Callback"
}, - "subdisposition": {
- "name": "string",
- "subdisposition": { }
}
}| id required | string ID of Account |
| threshold_alert | number |
| recharge_threshold | number |
| recharge_amount | number |
{- "threshold_alert": 0,
- "recharge_threshold": 0,
- "recharge_amount": 0
}| id required | string ID of Account |
| operation required | string Type of Operation (add or remove) |
| X-Account-ID | string Account ID |
| amount | number Credit amount |
| mount | number Deprecated Deprecated alias for amount (still accepted) |
{- "amount": 0,
- "mount": 0
}| X-Account-ID | string Account ID |
| code | string Authentication code generated by Zoho during the integration process |
| location | string Geographic location of the user that started the integration process |
{- "code": "string",
- "location": "string"
}| ZohoUserID required | string ID of the Zoho user |
| X-Account-ID | string Account ID |
| user | string System user ID |
{- "user": "string"
}{- "request body": "string"
}| ZohoUserID required | string ID of the Zoho user |
| X-Account-ID | string Account ID |
string Email of the Zoho user |
{- "email": "string"
}{- "request body": "string"
}Reuploads a single recording's URI to Zoho CRM. This is useful when a recording link needs to be regenerated or updated in Zoho. You can specify the recording by either recording_id or call_id.
| recording_id | string Example: recording_id=202512-AJrKOXn30WDcEcvZswGD ID of the recording (format YYYYMM-xxxxx). Either recording_id or call_id is required. |
| call_id | string Example: call_id=18241418-4b3c-4d14-9515-df572699c2ad ID of the call associated with the recording. Either recording_id or call_id is required. |
| X-Account-ID required | string Account ID |
{- "success": true,
- "recording_id": "202512-AJrKOXn30WDcEcvZswGD",
- "call_id": "18241418-4b3c-4d14-9515-df572699c2ad",
- "message": "Recording URI successfully uploaded to Zoho"
}| X-Account-ID | string Account ID |
| enabled | boolean Status of the integration |
| code | string Authorization code obtained through the OAuth authentication process (it is required to enable the integration) |
{- "enabled": true,
- "code": "string"
}| userID required | string Hubspot user id |
| X-Account-ID | string Account ID |
string Hubspot user email |
{- "email": "string"
}All the documents of the users sent in the request will be modified. Modifying the fields sent by each user (callerid_name, callerid_number)
| id | string ID of User |
| callerid_name | string or null Edited Caller ID Name of User |
| callerid_number | string or null Edited Caller ID Number of User |
[- {
- "id": "string",
- "callerid_name": "string",
- "callerid_number": "string"
}
]All documents of the users of the account specified in the header are accessed. A summary of these users is returned in response (with callerid_name & callerid_number)
[- {
- "_id": "string",
- "username": "string",
- "first_name": "string",
- "last_name": "string",
- "presence_id": "string",
- "callerid_name": "string",
- "callerid_number": "string"
}
]| name | string Device Name |
| number | string Device Number |
{- "name": "string",
- "number": "string"
}{- "id": "9eca3e9020030b9a95793f9e7a81590e",
- "call_forward": {
- "direct_calls_only": false,
- "enabled": true,
- "failover": false,
- "ignore_early_media": true,
- "keep_caller_id": true,
- "number": 123,
- "require_keypress": true,
- "substitute": true
}, - "contact_list": {
- "exclude": true
}, - "device_type": "cellphone",
- "enabled": true,
- "exclude_from_queues": false,
- "media": {
- "encryption": {
- "enforce_security": false
}, - "audio": {
- "codecs": [
- "PCMU"
], - "encryption": {
- "enforce_security": false
}
}, - "video": {
- "codecs": [
- "string"
]
}
}, - "music_on_hold": { },
- "mwi_unsolicitated_updates": true,
- "name": "my_device",
- "owner_id": "e65cf6fa51dbba68aa4f1ba70fe05e9f",
- "register_overwrite_notify": false,
- "ringtones": { },
- "sip": {
- "expire_seconds": 300,
- "invite_format": "contact",
- "method": "method"
}, - "suppress_unregister_notifications": true,
- "ui_metadata": { }
}| id required | string ID of User |
| X-Account-ID required | string Account ID |
| name | string Device Name |
{- "name": "string"
}{- "id": "string"
}| id required | string ID of User |
| X-Account-ID required | string Account ID |
| name | string Device Name |
object |
[- {
- "name": "string",
- "media": {
- "audio": {
- "codecs": [
- "string"
]
}
}
}
]{- "ids": [
- "string"
]
}Get export tasks configuration with a given resource /category
| category required | string Resource category (for instance reports) |
| method required | string Name of the export method (for instance email) |
{- "export_method": {
- "users_activity": {
- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}, - "users_charges": {
- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}
}
}Update export tasks configuration with a given resource /category
| category required | string Resource category (for instance reports) |
| method required | string Name of the export method (for instance email) |
object | |
object |
{- "users_activity": {
- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}, - "users_charges": {
- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}
}Get export task configuration with a given resource /category/name
| category required | string Resource category (for instance reports) |
| name required | string Resource name (for instance users_activity) |
| method required | string Name of the export method (for instance email) |
{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}Update export task configuration with a given resource /category/name
| category required | string Resource category (for instance reports) |
| name required | string Resource name (for instance users_activity) |
| method required | string Name of the export method (for instance email) |
| single_json_file | boolean Indicates if the single json file task is scheduled or not |
| single_csv_file | boolean Indicates if the single csv file task is scheduled or not |
| interval | string Indicates the execution interval configured for the task |
object |
{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}
}Delete export task configuration with a given resource /category/name
| category required | string Resource category (for instance reports) |
| name required | string Resource name (for instance users_activity) |
| method required | string Name of the export method (for instance email) |
Update given export method configuration
| method required | string Export method (for instance email) |
| server | string Domain of the SMTP Server (for instance smtp.gmail.com) |
| port | number Port number of the SMTP Server (for instance 587) |
| username | string Email address that will be the sender of the emails |
| password | string Password of the account |
{- "server": "string",
- "port": 0,
- "username": "string",
- "password": "string"
}List the export jobs of the account, ordered by name
| method | string Name of the export method. Defaults to email |
[- {
- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}
]Create an export job and schedule its tasks
| method | string Name of the export method. Defaults to email |
| single_json_file | boolean Indicates if the single json file task is scheduled or not |
| single_csv_file | boolean Indicates if the single csv file task is scheduled or not |
| interval | string Indicates the execution interval configured for the task |
object | |
| id | string The job document id, assigned on creation; ignored in a request body |
| method | string Delivery method the job was filed under. Taken from the route, ignored in a request body |
| name | string Name shown in the exportables list |
| description | string Optional free text saying what the export is for |
| report | string Exported report (for instance all_calls) |
| enabled | boolean A disabled job keeps its configuration but is not scheduled. Defaults to true |
{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}Get a single export job
| id required | string Export job ID |
| method | string Name of the export method. Defaults to email |
{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}Update an export job and re-schedule its tasks
| id required | string Export job ID |
| method | string Name of the export method. Defaults to email |
| single_json_file | boolean Indicates if the single json file task is scheduled or not |
| single_csv_file | boolean Indicates if the single csv file task is scheduled or not |
| interval | string Indicates the execution interval configured for the task |
object | |
| id | string The job document id, assigned on creation; ignored in a request body |
| method | string Delivery method the job was filed under. Taken from the route, ignored in a request body |
| name | string Name shown in the exportables list |
| description | string Optional free text saying what the export is for |
| report | string Exported report (for instance all_calls) |
| enabled | boolean A disabled job keeps its configuration but is not scheduled. Defaults to true |
{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}{- "single_json_file": true,
- "single_csv_file": true,
- "interval": "string",
- "settings": {
- "recipients": [
- "string"
]
}, - "id": "string",
- "method": "string",
- "name": "string",
- "description": "string",
- "report": "string",
- "enabled": true
}| from_name | string sender's Email |
| from_number | string sender's number |
| to_name | string receiver's Email |
| to_number | string receiver's number |
| url | string url of the file to send |
| file | string <binary> |
{- "from_name": "string",
- "from_number": "string",
- "to_name": "string",
- "to_number": "string",
- "url": "string",
- "file": "string"
}{- "attempts": null,
- "document": {
- "method": "string",
- "url": "string"
}, - "fax_timezone": "string",
- "from_name": "string",
- "from_number": "string",
- "id": "string",
- "retries": null,
- "to_name": "string",
- "to_number": "string"
}[- {
- "attempts": 0,
- "caller_id": "string",
- "caller_name": "string",
- "fax_header": "string",
- "fax_identity": "string",
- "id": "string",
- "media": {
- "fax_option": true
}, - "name": "string",
- "owner_id": "string",
- "retries": 0,
- "smtp_email_address": "string",
- "smtp_permission_list": [
- "string"
]
}
]{- "attempts": 0,
- "caller_id": "string",
- "caller_name": "string",
- "fax_header": "string",
- "fax_identity": "string",
- "id": "string",
- "media": {
- "fax_option": true
}, - "name": "string",
- "owner_id": "string",
- "retries": 0,
- "smtp_email_address": "string",
- "smtp_permission_list": [
- "string"
]
}| attempts | integer |
| caller_id | string |
| caller_name | string |
| fax_header | string |
| fax_identity | string |
| id | string |
object | |
| name | string |
| owner_id | string |
| retries | integer |
| smtp_email_address | string |
| smtp_permission_list | Array of strings |
{- "attempts": 0,
- "caller_id": "string",
- "caller_name": "string",
- "fax_header": "string",
- "fax_identity": "string",
- "id": "string",
- "media": {
- "fax_option": true
}, - "name": "string",
- "owner_id": "string",
- "retries": 0,
- "smtp_email_address": "string",
- "smtp_permission_list": [
- "string"
]
}{- "attempts": 0,
- "caller_id": "string",
- "caller_name": "string",
- "fax_header": "string",
- "fax_identity": "string",
- "id": "string",
- "media": {
- "fax_option": true
}, - "name": "string",
- "owner_id": "string",
- "retries": 0,
- "smtp_email_address": "string",
- "smtp_permission_list": [
- "string"
]
}[- {
- "user_id": "string",
- "username": "string",
- "id": "string",
- "name": "string",
- "to": "string",
- "from": "string",
- "description": "string",
- "source_type": "string",
- "folder": "string",
- "timestamp": 0,
- "created": 0,
- "faxbox_id": "string",
- "media_type": "string",
- "call_id": "string",
- "cdr_doc_id": "string",
- "_attachments": { },
- "result": {
- "fax_bad_rows": 0,
- "fax_error_correction": true,
- "fax_receiver_id": "string",
- "fax_speed": 0,
- "pages_sent": 0,
- "result_code": 0,
- "result_text": "string",
- "success": true,
- "time_elapsed": 0
}
}
]Creates a new feature bundle with the provided features.
Feature bundle object that needs to be created
| features | Array of strings |
| name | string |
| description | string |
{- "features": [
- "string"
], - "name": "string",
- "description": "string"
}{- "id": "string"
}Updates an existing feature bundle with new features.
| id required | string |
Updated feature bundle object
| features | Array of strings |
| name | string |
| description | string |
{- "features": [
- "string"
], - "name": "string",
- "description": "string"
}Creates a new feature plan with the provided features.
Feature plan object that needs to be created
| name | string |
| description | string |
| feature_bundle_id | string |
| price | integer |
| users_limit | integer |
| unlimited_users | boolean |
{- "name": "string",
- "description": "string",
- "feature_bundle_id": "string",
- "price": 0,
- "users_limit": 0,
- "unlimited_users": true
}{- "id": "string"
}{- "property1": {
- "name": "string",
- "description": "string",
- "feature_bundle_id": "string",
- "price": 0,
- "users_limit": 0,
- "unlimited_users": true
}, - "property2": {
- "name": "string",
- "description": "string",
- "feature_bundle_id": "string",
- "price": 0,
- "users_limit": 0,
- "unlimited_users": true
}
}Updates an existing feature bundle with new features.
| id required | string |
Updated feature bundle object
| name | string |
| description | string |
| feature_bundle_id | string |
| price | integer |
| users_limit | integer |
| unlimited_users | boolean |
{- "name": "string",
- "description": "string",
- "feature_bundle_id": "string",
- "price": 0,
- "users_limit": 0,
- "unlimited_users": true
}Adds an IP address to the whitelist.
| ip | string <ipv4> The IP address to be added to the whitelist. |
| description | string A description for the IP address entry. |
| comments | string Additional comments or notes about the IP address. |
{- "ip": "192.168.0.1",
- "description": "string",
- "comments": "string"
}Retrieves metadata for all whitelisted IP addresses.
[- {
- "ip": "string",
- "metadata": {
- "description": "string",
- "date_added": 0,
- "added_by": {
- "id": "string",
- "full_name": "string"
}, - "last_modified": 0,
- "modified_by": {
- "id": "string",
- "full_name": "string"
}, - "expiration": 0,
- "usage_stats": {
- "access_count": 0
}, - "comments": "string",
- "services": [
- "string"
]
}
}
]Edits metadata for a whitelisted IP address.
| ip required | any IP address to edit |
| description | string The updated description for the IP address entry. |
| comments | string The updated comments or notes about the IP address. |
{- "description": "string",
- "comments": "string"
}Retrieves metadata for a whitelisted IP address.
| ip required | any IP address to retrieve |
{- "ip": "string",
- "metadata": {
- "description": "string",
- "date_added": 0,
- "added_by": {
- "id": "string",
- "full_name": "string"
}, - "last_modified": 0,
- "modified_by": {
- "id": "string",
- "full_name": "string"
}, - "expiration": 0,
- "usage_stats": {
- "access_count": 0
}, - "comments": "string",
- "services": [
- "string"
]
}
}Taking the ID of the Location that arrives by parameters of the URL, a summary of the list of users belonging to the account will be returned, each user will contain a boolean that indicates if the user belongs to that location.
| id required | string ID of Location |
[- {
- "_id": "string",
- "username": "string",
- "first_name": "string",
- "last_name": "string",
- "presence_id": "string",
- "in_this_location": true
}
]{- "enabled": false,
- "default": "string",
- "data": [
- {
- "name": "string",
- "note": "string",
- "timezone": "string",
- "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}
}
]
}Location object that needs to be added to the account
| default | boolean |
object |
{- "default": true,
- "location": {
- "name": "string",
- "note": "string",
- "timezone": "string",
- "allowed_sip_trunks": [
- "string"
], - "outbound_calls_disabled": true,
- "access_list": [
- "string"
], - "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}
}
}{- "id": "string"
}| locationID required | string <uuid4> ID of location to update |
Location object that needs to be edited
| default | boolean |
object |
{- "default": true,
- "location": {
- "name": "string",
- "note": "string",
- "timezone": "string",
- "allowed_sip_trunks": [
- "string"
], - "outbound_calls_disabled": true,
- "access_list": [
- "string"
], - "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}
}
}Using the token sent in the Authorization header you access the user's location
{- "name": "string",
- "note": "string",
- "timezone": "string",
- "caller_id": {
- "internal": {
- "name": "string",
- "number": "string"
}, - "external": {
- "number": "string"
}, - "emergency": {
- "name": "string",
- "number": "string",
- "account_address": true,
- "address": {
- "postal_code": "string",
- "street_address": "string",
- "extended_address": "string",
- "locality": "string",
- "region": "string",
- "country": "string"
}
}
}
}Assign or remove users to/from a location
| locationID required | string <uuid4> ID of location to assign or remove users from / to |
Location object that needs to be edited
| add | Array of strings |
| delete | Array of strings |
{- "add": [
- "string"
], - "delete": [
- "string"
]
}| cloudID required | string app cloud ID |
| username required | string username |
| password required | string password |
| account required | string Account name |
{- "cloud_id": "string",
- "username": "string",
- "password": "string"
}| cloud_username required | string username |
| cloud_password required | string password |
{- "contactId": "string",
- "displayname": "string",
- "fname": "string",
- "lname": "string",
- "contactEntries": [
- {
- "entryID": "string",
- "label": "string",
- "type": "string",
- "URI": "string"
}
]
}Receives a JSON doc with mobile device information
| name | string Mobile device name |
| token_id | string Device TOKEN ID. Unique key |
| platform | string android / ios |
| user | string username associated to device |
| extension | string extension associated to device |
| model_name | string Device model name |
| model_number | string Device model number |
| os_version | string Device Operative system version |
| registered | boolean Flag that indicates if device is registered or not |
| last_registered | number UNIX epoch with last registered time |
| last_push | number UNIX epoch with last time push sent to device |
{- "name": "string",
- "token_id": "string",
- "platform": "string",
- "user": "string",
- "extension": "string",
- "model_name": "string",
- "model_number": "string",
- "os_version": "string",
- "registered": true,
- "last_registered": 0,
- "last_push": 0
}| state | string Two-letter abbreviation of state (For instance California = CA) |
| areacode | number Numbers area code (For instance 201) |
| sms | number Numbers should support SMS or not |
| results | number Maximum quantity of results (For instance 10) |
[- {
- "number": "string",
- "type": "string",
- "rate": 0
}
]| accountID required | string <string> ID of account to get numbers from |
| X-Account-ID | string Account ID |
{- "number": {
- "number": "string",
- "in_use": true,
- "used_by": "string",
- "created": 0,
- "updated": 0,
- "outbound_cid": "string",
- "inbound_cid": true
}
}| phoneNumber required | string phone number to update |
Number CID information to be edited
| outbound_cid | string Oubound Caller ID number |
| inbound_cid | boolean Indicates if caller ID nummber must be showed for incoming calls |
{- "outbound_cid": "string",
- "inbound_cid": true
}| type | string DIDs provider (For instance voip_innovations) |
| name | string Name of your integration (descriptive) |
| note | string Note of your integration |
| username | string DIDs provider account username |
| password | string DIDs provider account password |
| group_id | string DIDs provider account specified group_id |
object DIDs provider configuration options |
{- "type": "string",
- "name": "string",
- "note": "string",
- "username": "string",
- "password": "string",
- "group_id": "string",
- "configuration": {
- "tiers": [
- 0
]
}
}Sends an onboarding email to the user on the account without a valid token
| email required | string The email of the user to invite |
| account required | string The account name to use |
{- "email": "john@doe.com",
- "account": "fonoUC"
}| id required | string ID of Payment gateway integration |
| name | string Payment gateway name |
| note | string Payment gateway note |
| api_key | string Payment gateway api_key of Stripe |
| publishable_key | string Payment gateway publishable_key of Stripe |
{- "name": "string",
- "note": "string",
- "api_key": "string",
- "publishable_key": "string"
}| name | string Payment gateway name |
| note | string Payment gateway note |
| api_key | string Payment gateway api_key of Stripe |
| publishable_key | string Payment gateway publishable_key of Stripe |
{- "name": "string",
- "note": "string",
- "api_key": "string",
- "publishable_key": "string"
}{- "id": "string"
}| number | integer Card Number |
| expiration_date | integer Card Expiration Date |
| cvv | integer Card Security Three-Digit Code |
| cardholder | string Owner of the Card |
| country | string Country of Card Owner |
| city | string City of Card Owner |
| address_zip | integer Address ZIP of Card Owner |
| type | string Type of Payment Method |
| active | boolean Set payment method as active |
{- "number": 0,
- "expiration_date": 0,
- "cvv": 0,
- "cardholder": "string",
- "country": "string",
- "city": "string",
- "address_zip": 0,
- "type": "string",
- "active": true
}{- "error": {
- "code": 0,
- "description": "string"
}
}The handler will access the document that the account gives using the X-ACCOUNT-ID heading and will give a response with the information found in the document.
{- "enabled": 1,
- "mode": "whitelisted",
- "disa_from_ignore_prefixes": [ ],
- "disa_to_ignore_prefixes": [ ],
- "disa_ignore_trunk_ids": [ ],
- "groups": [ ],
- "pins_v2": { },
- "enable_user_ids": [ ]
}Modify Pins V2 Structure into pins data structure within account document.
required | object Pins V2 Object |
{- "pins_v2": {
- "pin": {
- "note": "string",
- "groups": [
- "string"
], - "owner_id": "string"
}
}
}Modify List of Pins Groups into pins data structure within account document.
required | Array of objects (PinGroup) List of Groups (Pin Groups Structure) |
{- "groups": [
- {
- "group": "string",
- "name": "string",
- "pattern": [
- "string"
]
}
]
}Modify ignored trunks IDs list into pins data structure within account document.
| disa_ignore_trunk_ids required | Array of strings List of ignored trunks IDs |
{- "disa_ignore_trunk_ids": [
- "string"
]
}Modify ignored pin lists. disa_from_ignore_prefixes and disa_to_ignore_prefixes within the pin data structure in the account document.
| disa_from_ignore_prefixes required | Array of strings List of ignored prefixes (From) |
| disa_to_ignore_prefixes required | Array of strings List of ignored prefixes (To) |
{- "disa_from_ignore_prefixes": [
- "string"
], - "disa_to_ignore_prefixes": [
- "string"
]
}Creates a new phone entry with the provided information.
| mac | string MAC address of the phone |
| note | string Note or description for the phone |
| profile | string Profile ID for the phone |
| button_profile_id | string Live linked Buttons profile ID. Empty unlinks. Stored keys stay Line only while linked. |
Array of objects (PhoneKey) List of phone keys | |
object (KeypadLockType) |
{- "mac": "string",
- "note": "string",
- "profile": "string",
- "button_profile_id": "string",
- "keys": [
- {
- "type": "string",
- "device_id": "string",
- "user_id": "string",
- "label": "string",
- "value": "string",
- "number": "string",
- "page_ip": "string",
- "handset": "string",
- "listener": { }
}
], - "keypad_lock": {
- "enabled": true,
- "pin": "string"
}
}[- {
- "name": "string",
- "max_time_caller_remains": 0,
- "call_only_if_registered_agents": true,
- "strategy": "string",
- "timeout": 0,
- "moh": "string",
- "extensions": [
- {
- "extension": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "dids": [
- {
- "did": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "pre_connect": [
- {
- "type": "string",
- "action": "string",
- "media_id": "string",
- "time": 0
}
], - "agents": [
- {
- "type": "string",
- "id": "string",
- "delay": 0,
- "timeout": 0
}
], - "next_actions": [
- {
- "type": "string",
- "data": "string"
}
], - "after_actions": [
- {
- "type": "string",
- "enabled": true,
- "api_call_action": {
- "url": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string"
}
}
]
}
]Queue object that needs to be added to the account
| name | string Queue name |
| max_time_caller_remains | number Maximum time (in minutes) that a caller will remain in a queue if call is not answered |
| call_only_if_registered_agents | boolean Calls will be routed to agents only if at least one agent is registered |
| strategy | string One of simultaneous, single, or weighted_random |
| timeout | number Maximum time (in seconds) |
| moh | string ID of media to reproduce as music on hold |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects A list of actions to execute after the call ends |
{- "name": "string",
- "max_time_caller_remains": 0,
- "call_only_if_registered_agents": true,
- "strategy": "string",
- "timeout": 0,
- "moh": "string",
- "extensions": [
- {
- "extension": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "dids": [
- {
- "did": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "pre_connect": [
- {
- "type": "string",
- "action": "string",
- "media_id": "string",
- "time": 0
}
], - "agents": [
- {
- "type": "string",
- "id": "string",
- "delay": 0,
- "timeout": 0
}
], - "next_actions": [
- {
- "type": "string",
- "data": "string"
}
], - "after_actions": [
- {
- "type": "string",
- "enabled": true,
- "api_call_action": {
- "url": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string"
}
}
]
}{- "id": "string"
}{- "name": "string",
- "max_time_caller_remains": 0,
- "call_only_if_registered_agents": true,
- "strategy": "string",
- "timeout": 0,
- "moh": "string",
- "extensions": [
- {
- "extension": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "dids": [
- {
- "did": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "pre_connect": [
- {
- "type": "string",
- "action": "string",
- "media_id": "string",
- "time": 0
}
], - "agents": [
- {
- "type": "string",
- "id": "string",
- "delay": 0,
- "timeout": 0
}
], - "next_actions": [
- {
- "type": "string",
- "data": "string"
}
], - "after_actions": [
- {
- "type": "string",
- "enabled": true,
- "api_call_action": {
- "url": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string"
}
}
]
}| queueID required | string <uuid4> ID of queue to update |
Queue object that needs to be edited
| name | string Queue name |
| max_time_caller_remains | number Maximum time (in minutes) that a caller will remain in a queue if call is not answered |
| call_only_if_registered_agents | boolean Calls will be routed to agents only if at least one agent is registered |
| strategy | string One of simultaneous, single, or weighted_random |
| timeout | number Maximum time (in seconds) |
| moh | string ID of media to reproduce as music on hold |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects | |
Array of objects A list of actions to execute after the call ends |
{- "name": "string",
- "max_time_caller_remains": 0,
- "call_only_if_registered_agents": true,
- "strategy": "string",
- "timeout": 0,
- "moh": "string",
- "extensions": [
- {
- "extension": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "dids": [
- {
- "did": "string",
- "prepend": "string",
- "emergency_mode": true
}
], - "pre_connect": [
- {
- "type": "string",
- "action": "string",
- "media_id": "string",
- "time": 0
}
], - "agents": [
- {
- "type": "string",
- "id": "string",
- "delay": 0,
- "timeout": 0
}
], - "next_actions": [
- {
- "type": "string",
- "data": "string"
}
], - "after_actions": [
- {
- "type": "string",
- "enabled": true,
- "api_call_action": {
- "url": "string",
- "method": "string",
- "headers": {
- "property1": "string",
- "property2": "string"
}, - "body": "string"
}
}
]
}| ratedeck required | string Ratedeck ID |
| number required | number Number |
{- "Base-Cost": 0,
- "E164-Number": "string",
- "Prefix": 0,
- "Rate": "string",
- "Rate-Description": "string",
- "Rate-Increment": 0,
- "Rate-Minimum": "string",
- "Rate-Name": "string",
- "Ratedeck-ID": "string",
- "Surcharge": "string"
}| ratedeck required | string Name of Ratedeck |
| rate required | string ID of Rate |
{- "_id": "string",
- "name": "string",
- "rate_name": "string",
- "rate_cost": "string",
- "prefix": "string",
- "weight": 0,
- "ratedeck_id": "string",
- "iso_country_code": "string",
- "routes": [
- "string"
], - "description": "string"
}| ratedeck required | string Name of Ratedeck |
| name | string Rate Name |
| rate_name | string Rate Name |
| rate_cost | number <float> Rate Cost |
| prefix | number |
| weight | number |
| iso_country_code | string |
| routes | Array of strings Regexes to match calls |
| description | string |
{- "name": "string",
- "rate_name": "string",
- "rate_cost": 0,
- "prefix": 0,
- "weight": 0,
- "iso_country_code": "string",
- "routes": [
- "string"
], - "description": "string"
}{- "_id": "string",
- "name": "string",
- "rate_name": "string",
- "rate_cost": "string",
- "prefix": "string",
- "weight": 0,
- "ratedeck_id": "string",
- "iso_country_code": "string",
- "routes": [
- "string"
], - "description": "string"
}| ratedeck required | string Name of Ratedeck |
| pageSize required | number Indicates the limit of the number of rates that will be returned as a response |
| nextStartKey | string Indicate from which rate will be listed as response |
{- "rates": [
- {
- "_id": "string",
- "name": "string",
- "rate_name": "string",
- "rate_cost": "string",
- "prefix": "string",
- "weight": 0,
- "ratedeck_id": "string",
- "iso_country_code": "string",
- "routes": [
- "string"
], - "description": "string"
}
], - "next_start_key": "string"
}| startDate required | string Start range date for recordings query. Unix timestamp |
| endDate required | string End range date for recordings query. Unix timestamp |
| pageSize | integer Maximum number of recordings per page |
| startKey | string ID of the first recording of the page |
{- "next_start_key": "string",
- "recordings": [
- {
- "id": "string",
- "owner_id": "string",
- "call_id": "string",
- "callee_id_name": "string",
- "callee_id_number": "string",
- "caller_id_name": "string",
- "caller_id_number": "string",
- "cdr_id": "string",
- "content_type": "string",
- "custom_channel_vars": {
- "Media-Name": "string",
- "Media-Recording-ID": "string"
}, - "description": "string",
- "direction": "string",
- "duration": 0,
- "duration_ms": 0,
- "from": "string",
- "interaction_id": "string",
- "media_source": "string",
- "media_type": "string",
- "name": "string",
- "origin": "string",
- "request": "string",
- "source_type": "string",
- "start": 0,
- "to": "string",
- "_attachments": {
- "filename.mp3": {
- "content_type": "string",
- "revpos": 0,
- "digest": "string",
- "length": 0,
- "stub": true
}
}, - "user": {
- "username": "string",
- "first_name": "string",
- "last_name": "string"
}
}
]
}Retrieves the full recording document as JSON, excluding private CouchDB fields like "_rev", "_id", "_deleted", "_revisions", and "_attachments".
The response includes all recording metadata fields such as call information, timestamps, user data, and other recording properties.
| recordingID required | string Example: 202510-3475fecb3c9ee9fbff6e797975a691da ID of the recording (format: YYYYMM-{uuid}) |
{- "call_id": "791b68a6-a807-4de0-b41b-577dba3c31ce",
- "callee_id_name": "John Doe",
- "callee_id_number": "+1234567890",
- "caller_id_name": "Jane Smith",
- "caller_id_number": "+0987654321",
- "cdr_id": "202510-cdr-12345",
- "content_type": "audio/mpeg",
- "description": "Call recording",
- "direction": "inbound",
- "duration": 120,
- "duration_ms": 120000,
- "from": "+1234567890",
- "interaction_id": "interaction-123",
- "media_source": "local",
- "media_type": "audio",
- "name": "recording_1234567890.mp3",
- "origin": "internal",
- "owner_id": "user-123",
- "request": "call-request",
- "source_type": "call",
- "start": 1699123456,
- "to": "+0987654321",
- "url": "",
- "pvt_account_id": "account-123",
- "pvt_account_db": "account_db",
- "pvt_created": 1699123456,
- "pvt_modified": 1699123500,
- "pvt_type": "recording",
- "pvt_node": "node1",
- "pvt_document_hash": "abc123",
- "fonoUC": {
- "filename": "recording_1234567890.mp3",
- "storage": [
- "local"
]
}
}Retrieves a call recording by call ID with intelligent fallback logic.
Process:
Response Format:
id: Recording IDname: Filenamecontent_type: MIME type (e.g., "audio/mpeg")data: Base64 encoded audio datasize: File size in bytescaller_id_number: From number on this recordingcallee_id_number: To number on this recordingExamples:
791b68a6-a807-4de0-b41b-577dba3c31ce (will add current YYYYMM prefix)202510-791b68a6-a807-4de0-b41b-577dba3c31ce (will use existing prefix)| call_id required | string Examples:
Call ID to search for recording. Can be with or without YYYYMM prefix. |
{- "recordings": [
- {
- "id": "202510-3475fecb3c9ee9fbff6e797975a691da",
- "name": "recording1.mp3",
- "content_type": "audio/mpeg",
- "data": "SUQzBAAAAAA...",
- "size": 1234567,
- "caller_id_number": "1441",
- "callee_id_number": "14168882222"
}, - {
- "id": "202510-6CvnOrrzw9Gno7A3w6te",
- "name": "recording2.mp3",
- "content_type": "audio/mpeg",
- "data": "SUQzBAAAAAA...",
- "size": 987654,
- "caller_id_number": "1441",
- "callee_id_number": "1002"
}
], - "total": 2
}Retrieves storage server information for call recording(s) by call ID with intelligent fallback logic.
Process:
Response Format:
{"servers": ["local"]} or {"servers": ["server1", "server2", ...]}recording_id: Recording IDname: Filenameservers: Array of storage server namesNote: If a recording fails to load, it will be skipped and the response will include only the successfully loaded recordings.
| call_id required | string Examples:
Call ID to search for recording. Can be with or without YYYYMM prefix. |
{- "servers": [
- "local"
]
}Retrieves transcription information for call recording(s) by call ID with intelligent fallback logic.
Process:
Response Format:
{"done": true, "provider": "provider_name"} or {"done": false, "provider": ""}recording_id: Recording IDname: Filenamedone: Boolean indicating if transcription existsprovider: Provider name (empty if no transcription)Note: If a recording fails to load, it will be skipped and the response will include only the successfully loaded recordings.
| call_id required | string Examples:
Call ID to search for recording. Can be with or without YYYYMM prefix. |
{- "done": true,
- "provider": "deepgram"
}Aggregates DISA calls by the PIN used. The pin field is always
server-masked (e.g. ****45); raw PIN values never leave the server.
Only calls whose CDR carries a non-empty X-Pin custom SIP header are
considered; everything else is ignored.
| startDate required | integer Start date (Kazoo/Gregorian seconds). |
| endDate required | integer End date (Kazoo/Gregorian seconds). |
| timezone | string IANA timezone used to render Date/Time fields. Defaults to UTC. |
| X-ACCOUNT-ID required | string |
{- "rows": [
- {
- "pin": "string",
- "user_name": "string",
- "total_calls": 0,
- "outgoing_calls": 0,
- "total_duration_seconds": 0,
- "total_cost": "string"
}
]
}One row per call that used a PIN. The pin field is always server-masked.
| startDate required | integer |
| endDate required | integer |
| timezone | string |
| X-ACCOUNT-ID required | string |
{- "rows": [
- {
- "date": "string",
- "time": "string",
- "pin": "string",
- "user_name": "string",
- "caller_id_name": "string",
- "caller_id_number": "string",
- "dialed_number": "string",
- "call_type": "string",
- "duration_seconds": 0,
- "amount": "string",
- "flat_rate": true,
- "note": "string"
}
]
}For each PIN, the hour-of-day (0-23, in the request timezone) with the
highest call count in the range. Ties break to the earliest hour. The
pin field is always server-masked.
| startDate required | integer |
| endDate required | integer |
| timezone | string |
| X-ACCOUNT-ID required | string |
{- "rows": [
- {
- "pin": "string",
- "user_name": "string",
- "peak_hour": 23,
- "number_of_calls": 0,
- "total_duration_seconds": 0
}
]
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| timezone | string desired timezone to get cdrs in |
| columns | string comma-separated list of columns to include in the PDF. Available columns: call_start_time, user_name, extension, dialed_number, duration, billing, hangup_cause |
| X-Account-ID | string Account ID |
| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| pageSize | integer amount of records per page |
| startKey | integer key from where to start getting records. Used for pagination. |
{- "total_ammount": 0,
- "total_minutes": 0,
- "calls": [
- {
- "start_time": 0,
- "caller_id_name": "string",
- "caller_id_number": "string",
- "callee_id_name": "string",
- "callee_id_number": "string",
- "to": "string",
- "from": "string",
- "account_id": "string",
- "account_name": "string",
- "minutes": 0,
- "amount": 0
}
]
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| pageSize | integer amount of records per page |
| startKey | integer key from where to start getting records. Used for pagination. |
{- "totals": {
- "minutes": 0,
- "amount": 0,
- "total_calls": 0,
- "inbound_calls": 0,
- "outbound_calls": 0
}, - "summary_by_number": {
- "number": {
- "name": "string",
- "minutes": 0,
- "amount": 0,
- "total_calls": 0,
- "inbound_calls": 0,
- "outbound_calls": 0
}
}
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| pageSize | integer amount of records per page |
| startKey | integer key from where to start getting records. Used for pagination. |
{- "total_ammount": 0,
- "total_minutes": 0,
- "total_calls": 0,
- "calls": [
- {
- "start_time": 0,
- "extension": "string",
- "caller_id_name": "string",
- "caller_id_number": "string",
- "callee_id_name": "string",
- "callee_id_number": "string",
- "Destination": "string",
- "call_id": "string",
- "account_id": "string",
- "minutes": 0,
- "amount": 0,
- "account_name": "string",
- "duration_seconds": 0,
- "billing_seconds": 0,
- "direction": "string",
- "hangup_cause": "string",
- "flat_rate": true
}
]
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| pageSize | integer amount of records per page |
| startKey | integer key from where to start getting records. Used for pagination. |
| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| timezone | string desired timezone for date formatting |
| extension | string filter by extension |
| tag | Array of strings filter by tag IDs (can be repeated for multiple tags) |
| col | Array of strings custom columns to include in the PDF |
| brandPrimary | string Optional hex color for the primary brand color (e.g. "#246199"). Used for the table header background and title text. When omitted, default colors are used. |
| brandSecondary | string Optional hex color for the secondary brand color (e.g. "#2bbec1"). Used for the totals row background. Falls back to brandPrimary if omitted. |
| X-Account-ID | string Account ID |
| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
{- "totals": {
- "minutes": 0,
- "amount": 0,
- "total_calls": 0,
- "inbound_calls": 0,
- "outbound_calls": 0
}, - "summary_by_number": {
- "number": {
- "name": "string",
- "minutes": 0,
- "amount": 0,
- "total_calls": 0,
- "inbound_calls": 0,
- "outbound_calls": 0
}
}
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| timezone | string desired timezone for date formatting |
| tag | Array of strings filter by tag IDs (can be repeated for multiple tags) |
| col | Array of strings custom columns to include in the PDF |
| brandPrimary | string Optional hex color for the primary brand color (e.g. "#246199"). Used for the table header background and title text. When omitted, default colors are used. |
| brandSecondary | string Optional hex color for the secondary brand color (e.g. "#2bbec1"). Used for the totals row background. Falls back to brandPrimary if omitted. |
| X-Account-ID | string Account ID |
| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
[- {
- "account_id": "string",
- "name": "string",
- "total_amount": 0,
- "total_minutes": 0,
- "total_calls": 0
}
]| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| timezone | string desired timezone for date formatting |
| col | Array of strings custom columns to include in the PDF |
| brandPrimary | string Optional hex color for the primary brand color (e.g. "#246199"). Used for the table header background and title text. When omitted, default colors are used. |
| brandSecondary | string Optional hex color for the secondary brand color (e.g. "#2bbec1"). Used for the totals row background. Falls back to brandPrimary if omitted. |
| X-Account-ID | string Account ID |
| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| pageSize | integer amount of records per page |
| startKey | integer key from where to start getting records. Used for pagination. |
{- "cdrs": [
- {
- "id": "string",
- "start_time": 0,
- "caller_id_name": "string",
- "caller_id_number": "string",
- "destination": "string",
- "callee_id_name": "string",
- "callee_id_number": "string",
- "duration_seconds": "string",
- "billing_seconds": "string",
- "hangup_cause": "string"
}
], - "next_start_key": "string"
}| startDate required | integer range start date in UNIX epoch time |
| endDate required | integer range end date in UNIX epoch time |
| timezone | string desired timezone to get cdrs in |
| columns | string comma-separated list of columns to include in the PDF. Available columns: start_time, caller_id_name, caller_id_number, destination, callee_id_name, callee_id_number, duration, billing, hangup_cause |
| X-Account-ID | string Account ID |
| startDate required | string Start range date. Unix timestamp |
| endDate required | string End range date. Unix timestamp |
| timeRange | string Time range in format like 1d, 1w, 1h, etc. |
| pageSize | integer Number of records per page |
| startKey | string Start key for pagination |
{- "events": [
- {
- "event": "string",
- "enabled": true,
- "user_id": "string",
- "ext": "string",
- "username": "string",
- "state": "string",
- "timestamp": 0
}
], - "next_start_key": "1754419492"
}Retrieves user activity statistics for a specific tenant based on the provided parameters.
Note: Ensure that the necessary authentication headers are included in the request.
| timeRange | string Time range for the activity stats (e.g., "1h", "2d", "3w") |
| startDate | integer Start date in Unix timestamp format |
| endDate | integer End date in Unix timestamp format |
| pageSize | integer Default: 250 Set the page size for results (defaults to 250) |
| startKey | string Start key for pagination (to fetch results for 2nd page and beyond) |
| startKeyDocId | string Document ID of the next document (to be filled with info from the 1st request) |
{- "data": [
- {
- "id": "string",
- "call_id": "string",
- "user": "string",
- "start_time": 0,
- "caller_id_name": "string",
- "caller_id_number": "string",
- "destination": "string",
- "callee_id_number": "string",
- "callee_id_name": "string",
- "duration_seconds": "string",
- "billing_seconds": "string",
- "hangup_cause": "string",
- "direction": "string",
- "extension": "string"
}
], - "next_start_key": null,
- "next_start_doc_id": "string"
}object | |
object | |
object | |
object | |
object | |
object | |
object |
{- "credentials_login": {
- "portal": {
- "disabled": true
}, - "ucp": {
- "disabled": true
}
}, - "inactivity_period": {
- "enabled": true,
- "duration": 0
}, - "lockout_threshold": {
- "enabled": true,
- "invalid_logins": 0
}, - "password_age": {
- "enabled": true,
- "minimum_age": 0,
- "maximum_age": 0
}, - "password_length": {
- "enabled": true,
- "minimum_length": 0,
- "maximum_length": 0
}, - "password_history": {
- "enabled": true,
- "previous_passwords": 0
}, - "mfa": {
- "methods": [
- "string"
], - "email": {
- "ucp": true,
- "portal": true
}, - "sms": {
- "ucp": true,
- "portal": true
}, - "call": {
- "ucp": true,
- "portal": true
}
}
}{- "credentials_login": {
- "portal": {
- "disabled": true
}, - "ucp": {
- "disabled": true
}
}, - "inactivity_period": {
- "enabled": true,
- "duration": 0
}, - "lockout_threshold": {
- "enabled": true,
- "invalid_logins": 0
}, - "password_age": {
- "enabled": true,
- "minimum_age": 0,
- "maximum_age": 0
}, - "password_length": {
- "enabled": true,
- "minimum_length": 0,
- "maximum_length": 0
}, - "password_history": {
- "enabled": true,
- "previous_passwords": 0
}, - "mfa": {
- "methods": [
- "string"
], - "email": {
- "ucp": true,
- "portal": true
}, - "sms": {
- "ucp": true,
- "portal": true
}, - "call": {
- "ucp": true,
- "portal": true
}
}
}{- "email": {
- "code": 0,
- "token": "string"
}, - "sms": {
- "code": 0,
- "token": "string"
}, - "call": {
- "code": 0,
- "token": "string"
}
}{- "access_token": "string",
- "refresh_token": "string",
- "user": { }
}| method required | string Second Factor Auth Method (email, sms, call) |
| username | string User Email |
| account_name | string User Account Name |
{- "username": "string",
- "account_name": "string"
}{- "token": "string"
}| id required | string ID of Service Plan |
| X-Account-ID required | string Account ID |
| name | string Name of Service Plan |
| ratedeck | string Ratedeck to assign to the service plan |
{- "name": "string",
- "ratedeck": "string"
}| X-Account-ID required | string Account ID |
| _id | string ID of Service Plan |
| name | string Name of Service Plan |
| ratedeck | string Ratedeck to assign to the service plan |
{- "_id": "string",
- "name": "string",
- "ratedeck": "string"
}| X-Account-ID required | string Account ID |
Set up settings.
object | |
object |
{- "free_numbers": {
- "assign_free_number": true,
- "free_number_prefix": "string"
}, - "otp": {
- "cellphone_val": true
}
}| id required | string SMS Provider Account ID |
| X-Account-ID required | string Account ID |
{- "id": "string",
- "name": "string",
- "type": "string",
- "note": "string",
- "token": "string",
- "provider_number_id": "string"
}| id required | string SMS Provider Account ID |
| X-Account-ID required | string Account ID |
| name | string Provider Name |
| type | string Provider Type |
| note | string Provider Note |
| token | string Provider Account Token |
| provider_number_id | string |
{- "name": "string",
- "type": "string",
- "note": "string",
- "token": "string",
- "provider_number_id": "string"
}| X-Account-ID required | string Account ID |
| name | string Provider Name |
| type | string Provider Type |
| note | string Provider Note |
| token | string Provider Account Token |
| provider_number_id | string |
{- "name": "string",
- "type": "string",
- "note": "string",
- "token": "string",
- "provider_number_id": "string"
}{- "id": "string"
}[- {
- "account_name": "string",
- "account_realm": "string",
- "authorizing_id": "string",
- "authorizing_type": "string",
- "call_id": "string",
- "contact": "string",
- "contact_ip": "string",
- "contact_port": 0,
- "event_timestamp": 0,
- "expires": 0,
- "from_host": "string",
- "from_user": "string",
- "network_ip": "string",
- "network_port": "string",
- "original_contact": "string",
- "owner_id": "string",
- "owner_name": "string",
- "proxy_ip": "string",
- "proxy_port": 0,
- "proxy_protocol": "string",
- "source_ip": "string",
- "source_port": "string",
- "realm": "string",
- "suppress_unregister_notify": true,
- "to_host": "string",
- "to_user": "string",
- "user_agent": "string",
- "username": "string",
- "mac_address": "string",
- "manufacturer": "string",
- "model": "string",
- "extension": "string"
}
]Get storage server configuration of a specified resource (CDRs, Recordings, etc.)
| resource required | string Name of the resource (cdrs, recordings, etc.) |
{- "provider": "string",
- "local_storage": true,
- "local_storage_path": "string",
- "single_file": true,
- "single_file_upload_interval": "string",
- "single_file_array": true,
- "single_csv_file": true,
- "single_csv_file_upload_interval": "string",
- "auth": {
- "amazon": {
- "access_key": "string",
- "secret_access_key": "string",
- "bucket": "string",
- "bucket_directory": "string",
- "region": "string"
}, - "refract": {
- "account_key": "string",
- "integration_type": "string",
- "shared_secret": "string"
}, - "sftp": {
- "url": "string",
- "port": 0,
- "username": "string",
- "password": "string",
- "directory": "string"
}
}
}Update storage server configuration of a specified resource
| resource required | string Name of the resource (cdrs, recordings, etc.) |
| provider | string Name of storage server (local, amazon, refract, sftp or api) |
| local_storage | boolean Store resource using local server |
| local_storage_path | string Local server path where the resource is going to be saved |
| single_file | boolean Create a single JSON file to save the resource |
| single_file_upload_interval | string Interval of time to upload JSON File |
| single_file_array | boolean Put objects inside an array into JSON File |
| single_csv_file | boolean Create a single CSV file to save the resource |
| single_csv_file_upload_interval | string Interval of time to upload CSV File |
object |
{- "provider": "string",
- "local_storage": true,
- "local_storage_path": "string",
- "single_file": true,
- "single_file_upload_interval": "string",
- "single_file_array": true,
- "single_csv_file": true,
- "single_csv_file_upload_interval": "string",
- "auth": {
- "amazon": {
- "access_key": "string",
- "secret_access_key": "string",
- "bucket": "string",
- "bucket_directory": "string",
- "region": "string"
}, - "refract": {
- "account_key": "string",
- "integration_type": "string",
- "shared_secret": "string"
}, - "sftp": {
- "url": "string",
- "port": 0,
- "username": "string",
- "password": "string",
- "directory": "string"
}
}
}| group required | string Task Group |
| status | string Task Status (active or inactive) |
[- {
- "group": "string",
- "category": "string",
- "name": "string",
- "status": "string",
- "last_execution": 0,
- "next_run": 0,
- "configured": true
}
]| group required | string Task Group |
| category required | string Task Category |
| status | string Task Status (active or inactive) |
[- {
- "group": "string",
- "category": "string",
- "name": "string",
- "status": "string",
- "last_execution": 0,
- "next_run": 0,
- "configured": true
}
]| group required | string Task Group |
| category required | string Task Category |
| name required | string Task Name |
{- "group": "string",
- "category": "string",
- "name": "string",
- "status": "string",
- "last_execution": 0,
- "next_run": 0,
- "configured": true
}| group required | string Task Group |
| category required | string Task Category |
| name required | string Task Name |
| action | string Action that will affect the task status (schedule, re_schedule or cancel) |
| interval | string Task execution frequency |
{- "action": "string",
- "interval": "string"
}| provider | string Transcription provider |
object | |
object Additional parameters for the transcription provider | |
object |
{- "provider": "string",
- "credentials": {
- "api_key": "string",
- "api_secret": "string"
}, - "params": {
- "language": "string",
- "model": "string"
}, - "account": {
- "recordings": {
- "auto": true
}, - "voicemails": {
- "auto": true
}
}
}| resource_type | string Type of resource (call_recording, voicemail) |
| resource_id | string ID of the specified resource |
{- "resource_type": "string",
- "resource_id": "string"
}{- "provider": "string",
- "transcription": {
- "raw": { },
- "formatted": "string",
- "summary": "string"
}
}| source required | string Name of the contacts source. Valid values [google, fonouc] |
| name | string Contact name |
| phone_number | Array of strings Contact phone numbers |
| companies | Array of strings Contact companies |
{- "name": "string",
- "phone_number": [
- "string"
], - "companies": [
- "string"
]
}{- "id": "string",
- "name": "string",
- "phone_number": [
- "string"
], - "companies": [
- "string"
]
}| source required | string Name of the contacts source. Valid values [google, fonouc] |
| id | string Contact ID |
| name | string Contact name |
| phone_number | Array of strings Contact phone numbers |
| companies | Array of strings Contact companies |
{- "id": "string",
- "name": "string",
- "phone_number": [
- "string"
], - "companies": [
- "string"
]
}Forces synchronization of a user with Mattermost/Teams. This endpoint allows admins to manually trigger a sync when automatic sync fails.
| id required | string User ID |
{- "message": "User successfully synced with Mattermost",
- "user_id": "string",
- "username": "string",
- "account_id": "string",
- "sync_timestamp": "now"
}Forces a password reset for a user in Mattermost/Teams. This endpoint specifically focuses on password synchronization issues.
| id required | string User ID |
{- "message": "User password successfully reset in Mattermost",
- "user_id": "string",
- "username": "string",
- "account_id": "string",
- "reset_timestamp": "now"
}| id required | string User's ID |
| X-Account-ID required | string Account ID |
| data | Array of strings It must contain a length of 2 elements. [MD5_HASH, SHA1_HASH] |
{- "data": [
- "string"
]
}GET User Data (enabled, firstname, lastname, email, level)
| id required | string ID of User |
| X-Account-ID required | string Account ID |
{- "enabled": true,
- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "username": "string",
- "level": "string",
- "extension": "string",
- "include_in_directory": true,
- "conferencing": {
- "enabled": true,
- "number": "string",
- "pin": "string"
}
}Update a user. Enabled, first name, last name, email, role...
| id required | string ID of User |
| X-Account-ID required | string Account ID |
| enabled | boolean |
| first_name | string |
| last_name | string |
string | |
| level | string user role (user or admin) |
| is_operator | boolean |
object |
{- "enabled": true,
- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "level": "string",
- "is_operator": true,
- "conference": {
- "enabled": true,
- "pin": "string"
}
}Bulk creation of users based on csv file
| X-Account-ID required | string Account ID |
| users | object <binary> CSV File |
{- "created": 0,
- "failed": 0,
- "errors": [
- {
- "index": 0,
- "first_name": "string",
- "last_name": "string",
- "reason": "string"
}
]
}Perform all the actions necessary for user creation (document generation, vmbox, callflow)
| X-Account-ID required | string Account ID |
| first_name | string |
| last_name | string |
string | |
| level | string user role (user or admin) |
| password | string |
| extension | string |
| send_credentials | boolean |
| include_in_directory | boolean |
| role_id | string |
| is_operator | boolean |
object | |
| feature_plan | string ID of the feature plan the user is assigned to |
{- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "level": "string",
- "password": "string",
- "extension": "string",
- "send_credentials": true,
- "include_in_directory": true,
- "role_id": "string",
- "is_operator": true,
- "conference": {
- "enabled": true,
- "pin": "string"
}, - "feature_plan": "string"
}{- "_id": "string"
}Returns the list of users for the account specified in the X-Account-ID header. Each user has the essential information + the status of enablement...
| X-Account-ID | string Account ID |
[- {
- "id": "string",
- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "presence_id": 0,
- "enabled": true,
- "has_cellphones": false,
- "role": "string",
- "cellphones": [
- "string"
], - "invited": false,
- "accepted": false
}
]{- "name": "string",
- "role_id": "string",
- "permissions": {
- "reports": {
- "enabled": true
}, - "provision": {
- "enabled": true
}, - "status": {
- "enabled": true
}, - "config": {
- "enabled": true
}, - "smart_pbx": {
- "enabled": true
}, - "users": {
- "enabled": true,
- "user": {
- "read": true,
- "create": true,
- "delete": true,
- "edit": true,
- "disable": true
}
}
}
}| username required | string User name |
| account required | string Account name |
{- "account": {
- "id": "string",
- "name": "string",
- "realm": "string"
}, - "user": {
- "id": "string",
- "username": "string",
- "extension": "string",
- "device": {
- "name": "string",
- "enabled": true,
- "owner_id": "string",
- "sip": {
- "username": "string",
- "password": "string",
- "expire_seconds": "string",
- "invite_format": "string",
- "method": "string"
}
}
}
}| accountID required | string Account ID |
| X-Account-ID | string Account ID |
[- {
- "account_id": "string",
- "account_name": "string",
- "users": [
- {
- "id": "string",
- "first_name": "string",
- "last_name": "string",
- "username": "string",
- "extension": "string",
- "enabled": true,
- "created": 0
}
]
}
]| X-Account-ID | string Account ID |
[- {
- "account_id": "string",
- "account_name": "string",
- "users": [
- {
- "id": "string",
- "first_name": "string",
- "last_name": "string",
- "username": "string",
- "extension": "string",
- "enabled": true,
- "created": 0
}
]
}
]Returns the authenticated user's personal block list. The list only applies to direct calls from external numbers to the user's extension and direct numbers; queue calls do not consult it.
{- "numbers": [
- "+14155550100"
]
}Adds a number to the authenticated user's block list. Adding a number already on the list succeeds and leaves the list unchanged.
| number required | string Phone number, 7 to 20 digits with an optional leading +. Spaces, dashes, dots and parentheses are ignored. |
{- "number": "+14155550100"
}[- {
- "company": "string",
- "title": "string",
- "subject": "string",
- "stage": "string",
- "deal_name": "string",
- "valid_until": 0,
- "pay_terms": "string",
- "contact": {
- "name": "string",
- "phone_number": "string",
- "notes": "string"
}, - "account_name": "string",
- "billing_address": {
- "street": "string",
- "city": "string",
- "state": "string",
- "zip_code": "string",
- "country": "string"
}, - "quote_items": [
- {
- "quote_item_id": "string",
- "quantity": 0,
- "amount": 0,
- "discount": 0,
- "tax": 0,
- "total": 0
}
], - "sub_total": 0,
- "discount": 0,
- "tax": 0,
- "adjustment": 0,
- "total": 0,
- "terms": "string",
- "notes": "string"
}
]Create a new quote for the current account
| company | string Company name |
| title | string Quote title |
| subject | string Quote subject |
| stage | string Quote stage |
| deal_name | string Deal name |
| valid_until | integer Valid until timestamp |
| pay_terms | string Payment terms |
object (QuoteContact) | |
| account_name | string Account name |
object (QuoteAddress) | |
Array of objects (QuoteItemApplied) | |
| sub_total | number <float> Subtotal amount |
| discount | number <float> Discount amount |
| tax | number <float> Tax amount |
| adjustment | number <float> Adjustment amount |
| total | number <float> Total amount |
| terms | string Terms and conditions |
| notes | string Additional notes |
{- "company": "string",
- "title": "string",
- "subject": "string",
- "stage": "string",
- "deal_name": "string",
- "valid_until": 0,
- "pay_terms": "string",
- "contact": {
- "name": "string",
- "phone_number": "string",
- "notes": "string"
}, - "account_name": "string",
- "billing_address": {
- "street": "string",
- "city": "string",
- "state": "string",
- "zip_code": "string",
- "country": "string"
}, - "quote_items": [
- {
- "quote_item_id": "string",
- "quantity": 0,
- "amount": 0,
- "discount": 0,
- "tax": 0,
- "total": 0
}
], - "sub_total": 0,
- "discount": 0,
- "tax": 0,
- "adjustment": 0,
- "total": 0,
- "terms": "string",
- "notes": "string"
}{- "company": "string",
- "title": "string",
- "subject": "string",
- "stage": "string",
- "deal_name": "string",
- "valid_until": 0,
- "pay_terms": "string",
- "contact": {
- "name": "string",
- "phone_number": "string",
- "notes": "string"
}, - "account_name": "string",
- "billing_address": {
- "street": "string",
- "city": "string",
- "state": "string",
- "zip_code": "string",
- "country": "string"
}, - "quote_items": [
- {
- "quote_item_id": "string",
- "quantity": 0,
- "amount": 0,
- "discount": 0,
- "tax": 0,
- "total": 0
}
], - "sub_total": 0,
- "discount": 0,
- "tax": 0,
- "adjustment": 0,
- "total": 0,
- "terms": "string",
- "notes": "string"
}Create a new quote item
| product_name | string Name of the product |
| description | string Product description |
| price | number <float> Product price |
{- "product_name": "string",
- "description": "string",
- "price": 0
}{- "product_name": "string",
- "description": "string",
- "price": 0
}Update an existing quote item
| id required | string Quote Item ID |
| product_name | string Name of the product |
| description | string Product description |
| price | number <float> Product price |
{- "product_name": "string",
- "description": "string",
- "price": 0
}{- "product_name": "string",
- "description": "string",
- "price": 0
}| app_name required | string Name of the UCP application [desktop/mobile] |
| hide | boolean Indicates whether the download link for the specified app will be hidden or not |
{- "hide": true
}Sends a message to a specific agent via WebSocket. The agent can be identified by either agent_id or agent_extension. Currently supports pop-up notifications, but can be extended for other message types.
| X-Account-ID required | string Example: 507f1f77bcf86cd799439011 Account identifier |
| id | string Unique identifier for the message (optional) |
| event required | string Event type identifier |
| type required | string Type of follow-up |
object Action configuration for the message | |
| title required | string Title of the pop-up notification |
| phone_number | string Phone number associated with the follow-up |
| follow_up_type | string Type of follow-up action |
| follow_up_note | string Additional notes for the follow-up |
| message | string Custom message to display |
| agent_id | string Agent ID to target (optional if agent_extension is provided) |
| agent_extension | string Agent extension to target (optional if agent_id is provided) |
object UI configuration for the message |
{- "id": "uuid",
- "event": "pop_up",
- "type": "follow_up",
- "action": {
- "type": "dial",
- "label": "Call customer",
- "allow_dismiss": true
}, - "title": "Follow UP",
- "phone_number": "+14798798797",
- "follow_up_type": "2",
- "follow_up_note": "follow up note",
- "message": "Some custom message: we need to call this customer. He wants a Premium subscription",
- "agent_id": "",
- "agent_extension": "003",
- "ui": {
- "colour": "#465421",
- "height": 120,
- "width": 120
}
}{- "status": "success"
}