Connect your CRM or your own app to your Crang workspace with the REST API, get events as webhooks, or let an AI assistant work with it over MCP. Everything is secured with an API key you create in Settings, Integrations.
Overview
Your workspace has three ways in: a REST API to read and change data, webhooks that call you when something happens, and an MCP server for AI assistants. Each one belongs to a single workspace: the API key decides which.
REST base URL
https://api.crang.ai/v1
MCP server URL
https://mcp.crang.ai/mcp
Versioning
The version is in the path (/v1). New routes and new response fields are added within a version, so ignore fields you do not know. A breaking change ships as a new version, and the old one keeps working for a notice period.
Authentication
Create an API key in Settings, Integrations, and send it on every request as Authorization: Bearer <key>. The key is shown once: store it like a password.
A key belongs to one workspace and acts with the role of the person who created it. The workspace is never part of a request: there is no workspace id to send, and none that could be changed.
Each route needs one scope on the key. Without it the API answers 403. A missing, unknown, revoked or expired key answers 401.
You choose the scopes when you create a key. A key never gets more than its creator's role allows.
Scope
Allows
calls:read
Read calls, transcripts and results
contacts:read
Read contact lists and contacts
contacts:write
Import contacts and add numbers to the do-not-call list
campaigns:read
Read campaigns and their status
campaigns:write
Create and edit campaigns
campaigns:run
Start, pause, resume and cancel campaigns
agents:read
List agents and read their settings
agents:write
Edit the draft of an agent. Nothing goes live
agents:publish
Publish an agent. Changes go live on real calls
knowledge:read
List knowledge base documents
knowledge:write
Add knowledge base documents. They join every agent, live versions included, so the assistant also needs agents:publish
numbers:read
List phone numbers and the agent that answers each
analytics:read
Read analytics and goal results
usage:read
Read minutes left and usage
mcp
Connect an AI assistant to the MCP server
Errors
Errors are JSON, { "error": { "code": "...", "details": ... } }. Branch on code, never on the HTTP text.
Status
Code
Meaning
400
common.validation
The request is not valid. details lists the problems.
401
api_keys.invalid
The key is missing, unknown, revoked or expired.
402
tenant.subscription_suspended
The workspace subscription is suspended.
403
api_keys.scope_missing
The key lacks the scope the route needs (details.scope), or the integration is turned off for the workspace.
404
common.not_found
Nothing with that id in your workspace.
429
common.rate_limited
Too many requests. Wait the Retry-After header's seconds.
Rate limits
By default 120 requests per minute per key and 600 per minute per workspace across all its keys, shared by the REST API and the MCP server. Beyond that the API answers 429 with a Retry-After header (seconds).
REST API
Requests and answers are JSON unless a route says otherwise. Fields marked required must be sent. In answers, ignore fields you do not know.
Deletes every contact with this contact's number, in every list, and clears the number, transcript, summary, captured data and free-text analysis of their calls (outcome, minutes and goal results stay in the counts). A do-not-call entry for the number stays as a suppression record without the number, so the number is still not called. Only for a key whose creator is the workspace owner (403 otherwise). 409 contacts.erase_call_recent while a call with the person runs or ended less than 10 minutes ago.
Required scopecontacts:write
Parameters
Field
Type
Description
idrequired
string (uuid) · path
Response 200
Field
Type
Description
contactsrequired
integer
callsrequired
integer
Example request
curl -X POST "https://api.crang.ai/v1/contacts/<id>/erase" \
-H "Authorization: Bearer $CRANG_API_KEY"
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
Changes land in the draft only; callers keep talking to the published version until a publish. The exception is inboundPersonalization (off by default), which applies from the next inbound call: when on, a caller whose number the carrier fully verified gets the call variables of their matching contact. Send the revision from the last read (409 on a stale one).
A webhook is an HTTPS address of yours. Crang sends it a POST when something happens in the workspace. Add endpoints in Settings, Integrations, choose their events and copy the signing secret.
The request
Every event has the same body, sent as JSON with the headers Content-Type, User-Agent: Crang-Webhooks/1.0 and Crang-Signature. Only the fields of data differ.
Field
Type
Description
idrequired
string
Event id. The same on every retry and resend: drop duplicates by it.
typerequired
string
The event type.
createdAtrequired
string (date-time)
When the event was recorded.
datarequired
object
The fields of the event, listed below.
Verify the signature
Crang-Signature is t={unix seconds},v1={hex}, where v1 is the HMAC-SHA256 of {t}.{raw body} with your endpoint's signing secret (whsec_...). During a secret rotation there are two v1 values for 24 hours: accept any match.
Compute it on the raw body, compare in constant time and reject a t older than 5 minutes.
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(rawBody, header, secret) {
const parts = header.split(",").map((p) => p.split("="));
const t = parts.find(([k]) => k === "t")?.[1];
if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
return parts
.filter(([k]) => k === "v1")
.some(([, v]) => v?.length === expected.length && timingSafeEqual(Buffer.from(v), Buffer.from(expected)));
}
Delivery and retries
Answer with any 2xx within 10 seconds; only the status is read and redirects are not followed. Otherwise Crang retries 6 times, after 1 min, 5 min, 30 min, 2 h, 6 h, 15 h, about 24 hours in all, and then marks the delivery failed. An endpoint whose deliveries keep failing is turned off and the owners are emailed. Delivery is at least once.
While the workspace is suspended nothing is delivered, except the one tenant.suspended event.
Settings, Integrations shows the recent deliveries with their status, attempts and payload. You can resend one, or send a test event (webhook.test) to a single endpoint.
Events
Pick the events each endpoint receives. webhook.test goes only to the endpoint you test.
call.completed
A call was answered or reached voicemail, and its result is stored.
The MCP server lets an AI assistant work with your workspace as the API key allows, and nothing more. Every action is recorded in the audit log. It is Streamable HTTP, without sessions.
Authentication
Send the key as Authorization: Bearer <key>. The key needs the mcp scope plus the scopes of the tools you want to use. The assistant sees only the tools its key allows; any other is answered as not found. Requests count against the same rate limits as the REST API.
Connect an AI assistant
Add the server to the assistant's MCP configuration and replace YOUR_API_KEY with your key. Agent edits land in the draft; nothing goes live until publish_agent.
Read only. Lists calls, newest first, with outcome, goal result, agent, campaign, contact and duration. Filter by direction, agent, campaign, contact, phone number, outcome, goal result (success), time range (from/to, ISO date-time), length in seconds, transfers, cut-off calls (cutOff) or a phone/name search (q). Paginate with cursor.
True when an answered call ended without the agent closing it or handing it off: the other side hung up or the line dropped.
get_call
Read
Get a call
Read only. One call with its summary, full transcript (caller and agent turns), captured data and goal results.
Scopescalls:read
Arguments
Field
Type
Description
callIdrequired
string (uuid)
Contacts
list_contact_lists
Read
List contact lists
Read only. Contact lists with their status (importing, ready, failed), contact count and import report.
Scopescontacts:read
Arguments
No arguments.
get_contact_list
Read
Get a contact list
Read only. One contact list with its status and import report (imported, invalid, duplicate and do-not-call rows). Use it to follow an import.
Scopescontacts:read
Arguments
Field
Type
Description
listIdrequired
string (uuid)
list_contacts
Read
List contacts
Read only. The contacts of one list, newest first. Paginate with cursor.
Scopescontacts:read
Arguments
Field
Type
Description
listIdrequired
string (uuid)
cursor
string (uuid)
nextCursor of the previous page
limit
integer = 50
search_do_not_call
Read
Search the do-not-call list
Read only. Numbers the workspace never calls, newest first; query matches phone digits.
Scopescontacts:read
Arguments
Field
Type
Description
query
string
cursor
string (uuid)
nextCursor of the previous page
limit
integer = 50
import_contacts
Changes data
Import contacts
Changes data. Creates a new contact list from rows (objects of column name to value), with the same checks as a CSV import in the app: phone numbers are normalized, invalid and duplicate rows are skipped and do-not-call numbers suppressed. mapping names the column for each contact field and for each call variable; other columns are ignored. At most 5,000 rows and 100,000 values (rows × mapped columns) per call, and 30 call variables: for more rows, call it again (each call makes its own list). Only for people the workspace may lawfully call (lawfulBasis: true records that confirmation). Returns the list in importing; call get_contact_list for the report.
Scopescontacts:write
Arguments
Field
Type
Description
namerequired
string
rowsrequired
object<string, string | number | boolean | null>[]
mappingrequired
object
mapping.phonerequired
string
mapping.name
string
mapping.language
string
mapping.timezone
string
mapping.externalId
string
mapping.variables
object<string, string> = {}
lawfulBasisrequired
true
add_to_do_not_call
Changes data
Add numbers to do-not-call
Changes data. Adds phone numbers to the do-not-call list; campaigns skip them from now on. Any invalid number refuses the whole request (details.invalid).
Scopescontacts:write
Arguments
Field
Type
Description
phonesrequired
string[]
note
string
Campaigns
list_campaigns
Read
List campaigns
Read only. Outbound campaigns with status, progress by contact state and call stats.
Scopescampaigns:read
Arguments
No arguments.
get_campaign
Read
Get campaign status
Read only. One campaign: status, pause reason, settings, progress and calls in the last 24 hours.
Scopescampaigns:read
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
create_campaign
Changes data
Create a campaign
Changes data. Creates a draft outbound campaign (nothing is dialed until start_campaign). Settings default to weekday business hours in the workspace time zone.
Scopescampaigns:write
Arguments
Field
Type
Description
namerequired
string
agentIdrequired
string (uuid)
An agent with a published version
listIdsrequired
string (uuid)[]
Contact lists to call
phoneNumberIdsrequired
string (uuid)[]
Workspace numbers to call from
startsAt
string (date-time) | null
When dialing may start after start_campaign; null or left out: at once
settingsrequired
object
Dialing settings; anything left out keeps its current or default value
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
update_campaign
Changes data
Edit a campaign
Changes data. Edits a draft, scheduled or paused campaign; fields left out keep their value. Scheduled and paused campaigns keep their agent and lists.
Scopescampaigns:write
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
name
string
agentId
string (uuid)
An agent with a published version
listIds
string (uuid)[]
Contact lists to call
phoneNumberIds
string (uuid)[]
Workspace numbers to call from
startsAt
string (date-time) | null
When dialing may start after start_campaign; null or left out: at once
settings
object
Dialing settings; anything left out keeps its current or default value
Pause the campaign automatically when its recent calls look bad. Default false: the campaign only shows its metrics. The minute limit applies either way.
settings.protection.minuteLimit
integer | null
Most minutes this campaign may use (debited plus in progress); null or left out: no limit
settings.protection.warmup
boolean
Slow start: the first calls run a few at a time. Default false.
settings.protection.stops
object<string, integer | null>
Per indicator, the percent of the last finished calls at which the campaign pauses (answer_rate: pauses when under it); null turns that stop off. technical_failures is between 5 and 60 and cannot be null. Left out: the workspace default.
start_campaign
Goes live
Start a campaign
Changes data. Starts a draft campaign: real calls go out (now, or at startsAt) and use minutes. Needs a published agent, a phone number and contacts.
Scopescampaigns:run
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
pause_campaign
Changes data
Pause a campaign
Changes data. Pauses a running or scheduled campaign; calls in progress finish.
Scopescampaigns:run
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
resume_campaign
Goes live
Resume a campaign
Changes data. Resumes a paused campaign: dialing continues.
Scopescampaigns:run
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
cancel_campaign
Changes data
Cancel a campaign
Changes data, cannot be undone. Cancels a campaign for good; it never dials again.
Scopescampaigns:run
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
duplicate_campaign
Changes data
Duplicate a campaign
Changes data. A new draft with the same agent, numbers and settings: the same lists (all) or a new list of the contacts not reached yet (not_reached, named listName).
Scopescampaigns:write
Arguments
Field
Type
Description
campaignIdrequired
string (uuid)
contactsrequired
"all" | "not_reached"
listName
string
Agents
list_agents
Read
List agents
Read only. Agents with direction, voice, languages, phone numbers and status (draft only, published, unpublished changes), plus used and total agent slots.
Scopesagents:read
Arguments
No arguments.
get_agent
Read
Get an agent
Read only. One agent's draft: config (basics, rules with goals, workflow), knowledge documents and the revision every edit tool needs. Live calls use the latest published version until the draft is published.
Scopesagents:read
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
list_agent_versions
Read
List agent versions
Read only. Published versions of an agent, newest first, with who published and the note. rollback_agent takes a version id from here.
Scopesagents:read
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
list_voices
Read
List voices
Read only. Voices an agent can use, with languages, gender and accent; kind is catalog or custom (this workspace's own ready voices). basics.voiceId takes an id from here.
Scopesagents:read
Arguments
No arguments.
list_agent_templates
Read
List agent templates
Read only. The templates a new agent can start from: key, name, description and direction. create_agent takes a key from here.
Scopesagents:read
Arguments
No arguments.
list_custom_voices
Read
List the workspace's own voices
Read only. The workspace's own voices with status (processing, ready, failed, disabled), the agents using each, and how many more it may have.
Scopesagents:read
Arguments
No arguments.
create_agent
Changes data
Create an agent
Changes data. Creates a new agent in the workspace from a template (list_agent_templates), as a draft: nothing is live or answers calls until publish_agent. Uses one of the workspace's free agent slots and is refused when none is left; it never buys a slot.
Scopesagents:write
Arguments
Field
Type
Description
namerequired
string
templateKeyrequired
string
update_agent_basics
Draft only
Edit agent basics
Changes the draft only (live calls are unchanged until publish_agent). Replaces the agent's name and/or basics: voice, expressiveness (stability), speed, languages with their first message, call variables.
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
name
string
basics
object
basics.voiceIdrequired
string (uuid) | null
basics.stabilityrequired
number
basics.speedrequired
number
basics.languagesrequired
object[]
basics.languages[].coderequired
string
basics.languages[].firstMessagerequired
string
basics.callVariablesrequired
object[]
basics.callVariables[].namerequired
string
basics.callVariables[].examplerequired
string
update_agent_rules
Draft only
Edit agent rules
Changes the draft only. Replaces the agent's rules: purpose and tone, always/never say, transfers, end-call rules, data to capture, goals, call handling, voicemail message and additional instructions. Send the whole rules object from get_agent with your changes.
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
rulesrequired
object
rules.purposerequired
string
rules.tonerequired
string
rules.alwaysSayrequired
string[]
rules.neverSayrequired
string[]
rules.transfersrequired
object[]
rules.transfers[].torequired
"number"
rules.transfers[].destinationrequired
string
rules.transfers[].conditionrequired
string
rules.transfers[].transferTyperequired
"conference" | "blind"
rules.transfers[].hoursrequired
string
rules.transfers[].outsideHoursrequired
string
rules.transfers[].callerMessagerequired
string
rules.transfers[].summaryrequired
string
rules.transfers[].agentIdrequired
string (uuid)
rules.endCallRulesrequired
string[]
rules.dataToCapturerequired
object[]
rules.dataToCapture[].namerequired
string
rules.dataToCapture[].typerequired
"string" | "boolean" | "integer" | "number"
rules.dataToCapture[].descriptionrequired
string
rules.goalsrequired
object[]
rules.goals[].namerequired
string
rules.goals[].descriptionrequired
string
rules.goals[].value
object
rules.callHandlingrequired
object
rules.callHandling.languageDetectionrequired
boolean
rules.callHandling.voicemailDetectionrequired
boolean
rules.callHandling.keypadTonesrequired
boolean
rules.callHandling.skipTurnrequired
boolean
rules.voicemailMessagerequired
string
rules.additionalInstructionsrequired
string
update_agent_goals
Draft only
Edit agent goals
Changes the draft only. Replaces the agent's goals (rules.goals): what counts as a result of a call, each with "reached when" and an optional value to capture. Evaluated after every call.
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
goalsrequired
object[]
goals[].namerequired
string
goals[].descriptionrequired
string
goals[].value
object
goals[].value.typerequired
"text" | "number" | "date" | "yes_no"
goals[].value.namerequired
string
goals[].value.unit
string
update_agent_workflow
Draft only
Edit agent workflow
Changes the draft only. Replaces the agent's workflow (steps and the paths between them). Problems in the workflow are allowed in the draft but block publishing.
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
workflowrequired
object
workflow.stepsrequired
object[]
workflow.steps[].kindrequired
"start"
workflow.steps[].idrequired
string
workflow.steps[].labelrequired
string
workflow.steps[].positionrequired
object
workflow.steps[].pathsrequired
object[]
workflow.steps[].instructionsrequired
string
workflow.steps[].collectrequired
string[]
workflow.steps[].documentIdsrequired
string (uuid)[]
workflow.steps[].voiceIdrequired
string (uuid) | null
workflow.steps[].messagesrequired
object<string, string>
workflow.steps[].actionrequired
"save_data"
workflow.steps[].fieldrequired
string | ""
workflow.steps[].destinationrequired
string | ""
workflow.steps[].transferTyperequired
"conference" | "blind"
workflow.steps[].agentIdrequired
string (uuid) | null
workflow.steps[].messagerequired
string
attach_knowledge_document
Draft only
Attach a knowledge document
Changes the draft only. Lets the agent use a knowledge base document (ids from list_knowledge_documents).
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
documentIdrequired
string (uuid)
detach_knowledge_document
Draft only
Detach a knowledge document
Changes the draft only. The agent stops using one of its own knowledge base documents once published; the document stays in the workspace. Company documents cannot be detached (remove them in Settings).
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
documentIdrequired
string (uuid)
discard_agent_draft
Draft only
Discard the agent draft
Changes data, cannot be undone. Throws away every unpublished change: the draft becomes the live version again.
Scopesagents:write
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
publish_agent
Goes live
Publish an agent
Goes live. The draft becomes the next version and every new real call (inbound and campaigns) uses it at once. Needs a voice, a language with a first message and a workflow without problems. Confirm with the user first.
Scopesagents:publish
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
revisionrequired
integer
The agent's revision from get_agent. A stale one is refused: read the agent again.
note
string
rollback_agent
Goes live
Roll back an agent
Goes live. Publishes a copy of an earlier version (from list_agent_versions) as the next version; real calls use it at once. The draft is kept. Confirm with the user first.
Scopesagents:publish
Arguments
Field
Type
Description
agentIdrequired
string (uuid)
versionIdrequired
string (uuid)
note
string
assign_phone_number_agent
Goes live
Set the agent of a phone number
Goes live. The agent answers inbound calls on this number at once (agentId null: nobody answers). The agent needs a published version. Confirm with the user first.
Scopesagents:publish
Arguments
Field
Type
Description
phoneNumberIdrequired
string (uuid)
agentIdrequired
string (uuid) | null
Knowledge base
list_knowledge_documents
Read
List knowledge documents
Read only. The workspace knowledge base: documents with status (processing, ready, failed) and size.
Scopesknowledge:read
Arguments
No arguments.
add_knowledge_text
Goes live
Add a text document
Changes data, also on live calls. Adds a text document to the knowledge base. Once processed it joins every agent, the published versions included.
Scopesknowledge:writeagents:publish
Arguments
Field
Type
Description
namerequired
string
textrequired
string
add_knowledge_url
Goes live
Add a web page
Changes data, also on live calls. Adds the content of one public web page (https) to the knowledge base. Once processed it joins every agent, the published versions included.
Scopesknowledge:writeagents:publish
Arguments
Field
Type
Description
urlrequired
string (uri)
Phone numbers
list_phone_numbers
Read
List phone numbers
Read only. The workspace phone numbers with the agent that answers each one, open campaigns using it and inbound calls of the last 7 days.
Scopesnumbers:read
Arguments
No arguments.
Analytics
get_analytics
Read
Get analytics
Read only. Call results for a period in the workspace time zone: totals (calls, answer rate, goals reached, minutes, transfers, opt-outs) with the previous period (compare), calls over time, outcomes, call lengths, best hours to call, results by agent, campaign and number, and top captured values. custom needs from and to (local days). Set agent for one agent.
Read only. How often each goal was reached in a period: totals with the previous period's rate, by agent, campaign and number, over time, and captured values. Same period options as get_analytics; set agent for one agent.