Le descrizioni degli endpoint e dei campi restano in inglese, esattamente come le pubblica l'API. È una scelta voluta: qui legge ciò che vedrà anche nelle risposte.
GET /v1/me/agent-stats#
Per-agent call stats. Day-bucketed call counts per agent over a window (defaults to month-to-date).
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
from |
query |
string |
|
Window start (RFC3339). |
to |
query |
string |
|
Window end (RFC3339). |
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/agent-stats" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un AgentStatsResponse.
Esempio di risposta
{
"agents": [],
"days": [],
"total_calls": 1200
}
GET /v1/me/ai-reports#
List AI operations reports. One page of your generated reports, newest period keys first, WITHOUT the report bodies, fetch a period for the full metrics.
**Paging.** Pass the next_cursor from the previous response back as ?cursor=. **An empty next_cursor is the only signal that you have seen everything.**
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
limit |
query |
integer |
|
Rows per page, 1 to 60 (default 12). |
cursor |
query |
string |
|
The next_cursor from the previous page. Omit for the first page. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
limit is not a positive whole number (bad_request), or the cursor was not issued by this listing (invalid_cursor). |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/ai-reports" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un AiReportsResponse.
Esempio di risposta
{
"items": [
{
"cadence": "monthly",
"period": "2026-07",
"status": "sent",
"tenant": "acme",
"truncated": false
}
],
"next_cursor": ""
}
GET /v1/me/ai-reports/config#
AI operations report settings. Your periodic AI operations report configuration: whether the scheduler is armed, the cadence (monthly or quarterly, Europe/Athens calendar periods), and the email recipients of the XLSX digest. Never configured reads as disabled with the monthly default.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/ai-reports/config" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un AiReportConfigResponse.
Esempio di risposta
{
"cadence": "monthly",
"enabled": true,
"recipients": [
"quality@acme.example"
]
}
PUT /v1/me/ai-reports/config#
Set the AI operations report settings. Replaces the whole configuration block. An enabled config makes the scheduler generate each completed period once: per-agent quality metrics (graded volume, hallucination and grounded-answer rates, negative-feedback rate, chat takeover rate, the resolved-without-takeover ratio with its 40 percent target, containment, first-call resolution) plus the period's evaluation-run summary, delivered as an XLSX email to the recipients and as a report.ai_operations event through your subscriptions. An empty recipient list keeps the stored report and the event and skips the email.
updated_at is read-only: it is accepted here and ignored, so you can read the block, change a field and send the same object straight back. Any other unrecognized field is refused (422).
Corpo della richiesta
application/json Schema: AiReportConfigRequest
| Campo |
Tipo |
Obbligatorio |
Descrizione |
cadence |
string |
|
|
enabled |
boolean |
Sì |
|
recipients |
array of string |
|
|
updated_at |
string |
|
|
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
Off-vocabulary cadence, too many recipients, or a recipient that is not an email address (invalid_ai_report_config). |
401 |
Missing or invalid API key. |
422 |
The body is not valid JSON for this shape (invalid_request). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X PUT "https://api.voiceland.ai/v1/me/ai-reports/config" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cadence": "monthly",
"enabled": true,
"recipients": [
"quality@acme.example"
]
}'
Una risposta riuscita restituisce un AiReportConfigResponse.
Esempio di risposta
{
"cadence": "monthly",
"enabled": true,
"recipients": [
"quality@acme.example"
]
}
POST /v1/me/ai-reports/generate#
Generate an AI operations report now. Generates (or REGENERATES - the period row is replaced, never duplicated) one period on demand, without waiting for the scheduler. Delivery is included by default: the XLSX email to your configured recipients and the report.ai_operations event; pass "deliver": false to compute and store only. An empty body reports the last completed period of your configured cadence.
**This call is rate limited per HOUR**, not per minute: it runs synchronously and reads the whole period (calls, graded turns, feedback and per-agent evaluation runs) before it answers, and it emails a workbook unless you pass "deliver": false. A refusal is 429 report_rate_limit with retry-after; your allowance is on every response as x-ratelimit-limit and comes from your plan. Scheduled reports do not consume it.
Corpo della richiesta
application/json Schema: AiReportGenerateRequest
| Campo |
Tipo |
Obbligatorio |
Descrizione |
deliver |
boolean |
|
|
period |
string |
|
|
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
The period is not YYYY-MM or YYYY-Qn (invalid_period). |
401 |
Missing or invalid API key. |
422 |
The body is not valid JSON for this shape (invalid_request). |
429 |
Too many report generations for your plan's hourly allowance (report_rate_limit). Generation is synchronous and reads the whole period, so it is limited per hour rather than per minute. Wait retry-after seconds; the allowance itself is on every response as x-ratelimit-limit. Scheduled reports are unaffected - the limit is on on-demand generation only. |
4XX |
Request error (validation, not-found, etc.). |
503 |
No report generator is wired on this deployment (report_generator_unavailable). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X POST "https://api.voiceland.ai/v1/me/ai-reports/generate" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"period": "2026-07"
}'
Una risposta riuscita restituisce un AiReportWire.
Esempio di risposta
{
"cadence": "monthly",
"period": "2026-07",
"report": {
"target": {
"met": true,
"threshold": 0.4,
"value": 0.62
}
},
"status": "sent",
"tenant": "acme",
"trigger": "manual",
"truncated": false
}
GET /v1/me/ai-reports/{period}#
Get an AI operations report. One period's report in full: the account block and one block per agent (calls, containment, first-call resolution, graded volume with hallucination and grounded-answer rates, feedback negative rate, chat takeover rate and the resolved-without-takeover ratio against its 40 percent target, and the period's evaluation-run summary). truncated: true means some input hit its fetch budget and every number is a lower bound.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
period |
path |
string |
Sì |
YYYY-MM (month) or YYYY-Qn (quarter), Europe/Athens calendar. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
The period is not YYYY-MM or YYYY-Qn (invalid_period). |
401 |
Missing or invalid API key. |
404 |
No report was generated for that period (report_not_found). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/ai-reports/{period}" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un AiReportWire.
Esempio di risposta
{
"cadence": "monthly",
"period": "2026-07",
"report": {
"target": {
"met": true,
"threshold": 0.4,
"value": 0.62
}
},
"status": "sent",
"tenant": "acme",
"truncated": false
}
GET /v1/me/ai-reports/{period}/xlsx#
Download an AI operations report. The same two-sheet workbook the scheduler emails (Summary: the period, the account metrics and the metric definitions; Agents: one row per agent with every reported column), rendered on demand from the stored report. A period whose report has not finished generating has no body to render and answers 409.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
period |
path |
string |
Sì |
YYYY-MM (month) or YYYY-Qn (quarter), Europe/Athens calendar. |
Risposte
| Codice |
Descrizione |
200 |
The report as an XLSX workbook. |
400 |
The period is not YYYY-MM or YYYY-Qn (invalid_period). |
401 |
Missing or invalid API key. |
404 |
No report was generated for that period (report_not_found). |
409 |
The period's report has no stored body yet (report_body_unavailable). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/ai-reports/{period}/xlsx" \
-H "Authorization: Bearer VL_API_KEY"
GET /v1/me/api-keys#
List API keys. Your API keys (metadata only, never the secret).
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/api-keys" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"items": [
{
"label": "production",
"prefix": "vsk_live_"
}
]
}
POST /v1/me/api-keys#
Mint an API key. Creates a full tenant API key. Plaintext is returned once, store it securely.
Corpo della richiesta
application/json
Risposte
| Codice |
Descrizione |
201 |
Created. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X POST "https://api.voiceland.ai/v1/me/api-keys" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "production"
}'
Esempio di risposta
{
"plaintext": "vsk_live_…",
"prefix": "vsk_live_"
}
DELETE /v1/me/api-keys/{hash}#
Revoke an API key. Revokes an API key by its hash. You cannot revoke the key you are authenticating with.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
hash |
path |
string |
Sì |
Key hash from the list. |
Risposte
| Codice |
Descrizione |
204 |
Revoked. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X DELETE "https://api.voiceland.ai/v1/me/api-keys/{hash}" \
-H "Authorization: Bearer VL_API_KEY"
GET /v1/me/billing#
Billing usage. Talk-minutes for the current month against your plan's included minutes, plus up to 12 months of history.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/billing" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"current": {
"extra_minutes": 572,
"included_minutes": 2500,
"minutes_used": 3072
}
}
GET /v1/me/business-hours#
Opening hours. Your project's opening-hours calendar: the days and windows during which a visitor who asks to talk to a person can be put through to one. open_now is the calendar's verdict at the moment of the read and local_time is that moment in the calendar's own timezone. An unset or disabled calendar is always open.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/business-hours" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un BusinessHoursResponse.
Esempio di risposta
{
"days": [
{
"day": "mon",
"ranges": [
{
"end": "17:00",
"start": "09:00"
}
]
}
],
"enabled": true,
"holidays": [
"2026-12-25"
],
"local_time": "2026-08-07 11:20",
"open_now": true,
"timezone": "Europe/Athens"
}
PUT /v1/me/business-hours#
Set the opening hours. Replaces the whole calendar. While it is enabled, a request to talk to a person that arrives outside the listed windows is DECLINED rather than queued: the visitor is told straight away that the desk is shut and the assistant carries on with the conversation, instead of waiting in a line nobody is going to answer. A conversation a colleague has ALREADY taken over is never interrupted by closing time.
A weekday you do not list is closed. holidays are whole closed days in the calendar's own timezone and beat the weekly pattern. Times are HH:MM on a 24 hour clock, the end is exclusive, and a window that would run past midnight is two windows, one on each day. Disable the calendar ("enabled": false) to go back to being reachable at any hour.
open_now and local_time are read-only: they are accepted here and ignored, so you can read the calendar, change a window and send the same object straight back. Any other unrecognized field is refused (422).
Corpo della richiesta
application/json Schema: BusinessHoursRequest
| Campo |
Tipo |
Obbligatorio |
Descrizione |
days |
array of BusinessHoursDayWire |
|
|
enabled |
boolean |
Sì |
|
holidays |
array of string |
|
|
local_time |
string |
|
|
open_now |
boolean |
|
|
timezone |
string |
|
|
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
An unknown weekday, a malformed or overlapping window, a closed day that is not YYYY-MM-DD, an unknown timezone, or an enabled calendar with no open window at all (invalid_business_hours). |
401 |
Missing or invalid API key. |
422 |
The body is not valid JSON for this shape (invalid_request). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X PUT "https://api.voiceland.ai/v1/me/business-hours" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"days": [
{
"day": "mon",
"ranges": [
{
"end": "17:00",
"start": "09:00"
}
]
},
{
"day": "tue",
"ranges": [
{
"end": "17:00",
"start": "09:00"
}
]
}
],
"enabled": true,
"holidays": [
"2026-12-25"
],
"timezone": "Europe/Athens"
}'
Una risposta riuscita restituisce un BusinessHoursResponse.
Esempio di risposta
{
"days": [
{
"day": "mon",
"ranges": [
{
"end": "17:00",
"start": "09:00"
}
]
}
],
"enabled": true,
"holidays": [
"2026-12-25"
],
"local_time": "2026-08-07 11:20",
"open_now": true,
"timezone": "Europe/Athens"
}
GET /v1/me/conversations/emerging-topics#
Recurring themes your topic list does not cover. Discovery view: conversation topics that matched none of your configured topics, grouped by similarity, ranked by how many of them ended negatively. unassigned is how many analysed conversations produced only unmatched labels, the size of the gap. method says how the grouping was done (embeddings or lexical).
This view NEVER changes your configuration. Adding a topic is your action, on the agent.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
from |
query |
string |
|
Window start (RFC3339). Defaults to 7 days before to. |
to |
query |
string |
|
Window end (RFC3339). Defaults to now. |
agent |
query |
string |
|
Restrict to one agent by name. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
from or to is not RFC3339, or from is not before to (invalid_from / invalid_to / invalid_window). |
401 |
Missing or invalid API key. |
402 |
Your plan does not include conversation analytics (feature_not_entitled). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/conversations/emerging-topics" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un EmergingTopicsResponse.
Esempio di risposta
{
"analyzed": 412,
"clusters": [
{
"calls": 21,
"label": "delivery delay",
"members": [
"delivery delay",
"late delivery"
],
"negative_calls": 14
}
],
"method": "lexical",
"tenant": "acme",
"truncated": false,
"unassigned": 63
}
GET /v1/me/conversations/negative-sentiment#
Conversations that ended badly and escalated. The quality-review queue: conversations whose caller sentiment was negative at the END and that escalated (a human takeover was requested, or the call was transferred), worst ending first. analyzed is how many conversations in the window carried a sentiment reading, so a small queue can be read against its denominator. Sentiment is produced by the post-call analysis and is absent on conversations analysed before you enabled it.
Each item carries recording_purged_at (RFC3339) once your plan's recording retention has deleted the call's audio, recording_url is then absent for good and the recording stream answers 404 recording_purged, so do not offer playback on such a row.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
from |
query |
string |
|
Window start (RFC3339). Defaults to 7 days before to. |
to |
query |
string |
|
Window end (RFC3339). Defaults to now. |
agent |
query |
string |
|
Restrict to one agent by name. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
from or to is not RFC3339, or from is not before to (invalid_from / invalid_to / invalid_window). |
401 |
Missing or invalid API key. |
402 |
Your plan does not include conversation analytics (feature_not_entitled). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/conversations/negative-sentiment" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un NegativeSentimentResponse.
Esempio di risposta
{
"analyzed": 412,
"count": 9,
"items": [
{
"agent": "front-desk",
"call_id": "vl-acme-01H",
"escalation": "takeover",
"sentiment_end": "negative",
"sentiment_end_score": -0.7,
"sentiment_start": "neutral",
"sentiment_trajectory": "declining",
"topics": [
"billing"
]
},
{
"agent": "front-desk",
"call_id": "vl-acme-01F",
"escalation": "transfer",
"recording_purged_at": "2026-08-01T03:00:00Z",
"sentiment_end": "negative",
"sentiment_end_score": -0.5,
"sentiment_start": "negative",
"sentiment_trajectory": "flat",
"topics": [
"billing"
]
}
],
"tenant": "acme",
"truncated": false
}
GET /v1/me/dashboards#
Dashboard catalog. Pre-built Grafana dashboards you can import, with an import command per dashboard.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/dashboards" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"dashboards": []
}
GET /v1/me/end-user-policy#
Recognised-visitor policy. Whether visitors who are already signed in on your own site are recognised by the assistant, what it is allowed to remember about them between conversations, how long a profile is kept, and whether what somebody asked before is allowed to influence the order of their search results.
All four are off until you turn them on. has_sso_signing_key stands in for the signing secret, which is never returned by any endpoint. memory_max_items is the platform's own bound on how much the assistant may recall about one person, a short, readable list, not a conversation archive.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
402 |
Recognised visitors are not included in this plan (feature_not_entitled), or the account has no subscription (no_subscription). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/end-user-policy" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un EndUserPolicyResponse.
Esempio di risposta
{
"enabled": true,
"has_sso_signing_key": true,
"memory_enabled": true,
"memory_max_items": 12,
"personalized_ranking": true,
"retention_days": 90,
"sso_issuer": "https://example.com",
"sso_max_age_seconds": 60
}
PUT /v1/me/end-user-policy#
Set the recognised-visitor policy. Replaces the whole policy.
To recognise a visitor, your own site signs a short-lived token for the person who is already logged in there and hands it to the widget; we verify it against sso_signing_key, check that it names you as its audience and that it has not been presented before, and derive an opaque per-person key from the subject id inside it. We never take an email address or a phone number as the identity, and the key we store cannot be turned back into your user id by anyone who reads the row.
memory_enabled is a SEPARATE decision from enabled: recognising somebody and carrying what they said last time into this conversation are different promises to make to them. personalized_ranking is a third, and it only ever changes the ORDER of search results, never which results a visitor can see.
retention_days is how long a profile survives its last sighting; there is no keep-forever option. sso_signing_key is write-only, send it to set or rotate it, leave it out to keep the one you have, so you can read this policy, change one switch and send the whole object straight back.
Corpo della richiesta
application/json Schema: EndUserPolicyRequest
| Campo |
Tipo |
Obbligatorio |
Descrizione |
enabled |
boolean |
Sì |
|
has_sso_signing_key |
boolean |
|
|
memory_enabled |
boolean |
Sì |
|
memory_max_items |
integer |
|
|
personalized_ranking |
boolean |
Sì |
|
retention_days |
integer |
|
|
sso_issuer |
string |
|
|
sso_max_age_seconds |
integer |
|
|
sso_signing_key |
string |
|
|
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
Enabled without an issuer or a signing key, or a retention outside 1-730 days (invalid_end_user_policy). |
401 |
Missing or invalid API key. |
402 |
Recognised visitors are not included in this plan (feature_not_entitled), or the account has no subscription (no_subscription). |
422 |
The body is not valid JSON for this shape (invalid_request). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X PUT "https://api.voiceland.ai/v1/me/end-user-policy" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"memory_enabled": true,
"personalized_ranking": false,
"retention_days": 90,
"sso_issuer": "https://example.com",
"sso_signing_key": "the shared secret your site signs with"
}'
Una risposta riuscita restituisce un EndUserPolicyResponse.
Esempio di risposta
{
"enabled": true,
"has_sso_signing_key": true,
"memory_enabled": true,
"memory_max_items": 12,
"personalized_ranking": false,
"retention_days": 90,
"sso_issuer": "https://example.com",
"sso_max_age_seconds": 60
}
GET /v1/me/end-users#
Recognised visitors. One page of the people your assistant currently recognises, in key order. Each entry carries the whole of what the assistant may recall about that person, if the memory list is empty, it knows nothing beyond the name and language their sign-in supplied.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
limit |
query |
integer |
|
Rows per page, 1-100 (default 25). |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
limit is not a non-negative integer (invalid_limit). |
401 |
Missing or invalid API key. |
402 |
Recognised visitors are not included in this plan (feature_not_entitled), or the account has no subscription (no_subscription). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/end-users" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un EndUserListResponse.
Esempio di risposta
{
"count": 1,
"items": [
{
"display_name": "Maria",
"locale": "el",
"memory": [
{
"key": "asked about",
"kind": "topic",
"recorded_at": "2026-08-01T10:00:00Z",
"value": "warranty"
}
],
"profile_key": "9f2c…",
"sessions": 3
}
]
}
DELETE /v1/me/end-users/{key}#
Erase a recognised visitor. Removes the profile and everything the assistant remembered about that person, immediately. Wire this to your own "forget me" button.
When there was nothing to erase it still answers 200 with zero counts: the counts tell you what actually went, and asking twice is not an error, because the point of the endpoint is the guarantee that nothing is held afterwards.
**A legal hold is the one thing that refuses it (409 legal_hold), and a refusal erases nothing at all.** A hold preserves evidence for a legal process, so it outranks an erasure request. It can cover the whole project, or only the individual calls this person took part in; either way the profile, its memory items and its call links are left exactly as they were, so there is no partial erase to reconcile afterwards. The message says which of the two refused and names the held calls. Release the hold and the identical request succeeds. The operator's subject-rights route refuses the same person with the same status, the same code and the same wording, so there is no second door that erases what this one preserved.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
key |
path |
string |
Sì |
The opaque profile key, 64 lowercase hex characters. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
The key is not 64 lowercase hex characters (invalid_profile_key). |
401 |
Missing or invalid API key. |
402 |
Recognised visitors are not included in this plan (feature_not_entitled), or the account has no subscription (no_subscription). |
409 |
A legal hold covers this person's data (legal_hold). **Nothing was deleted**: not the profile, not its memory, not its call links. Either the whole project is held, or specific calls this person took part in are; the message says which and names the held calls. Release the hold, or handle the request outside the API. The same request succeeds once the hold is gone. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X DELETE "https://api.voiceland.ai/v1/me/end-users/{key}" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un EndUserEraseResponse.
Esempio di risposta
{
"call_links_deleted": 2,
"memory_items_deleted": 4,
"profile_key": "9f2c…",
"profiles_deleted": 1
}
GET /v1/me/end-users/{key}#
One recognised visitor. Everything held about one person: what their sign-in told us, and the complete list of things the assistant may recall about them. This is the answer to "what does your assistant remember about me", there is nothing else, and each remembered item names the conversation it was learned in.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
key |
path |
string |
Sì |
The opaque profile key, 64 lowercase hex characters. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
The key is not 64 lowercase hex characters (invalid_profile_key). |
401 |
Missing or invalid API key. |
402 |
Recognised visitors are not included in this plan (feature_not_entitled), or the account has no subscription (no_subscription). |
404 |
No profile with that key (profile_not_found). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/end-users/{key}" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un EndUserProfileWire.
Esempio di risposta
{
"display_name": "Maria",
"locale": "el",
"memory": [
{
"key": "contact",
"kind": "preference",
"recorded_at": "2026-08-01T10:00:00Z",
"source_call_id": "widget-…",
"value": "prefers email"
}
],
"profile_key": "9f2c…",
"sessions": 3
}
GET /v1/me/kpis#
KPIs. Containment, escalation, first-call resolution, cost percentiles, and goal completion over a window.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
from |
query |
string |
|
Window start (RFC3339); default trailing 24h. |
to |
query |
string |
|
Window end (RFC3339). |
agent |
query |
string |
|
Optional single agent. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/kpis" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un KpisResponse.
Esempio di risposta
{
"containment": {
"rate": 0.82
},
"cost": {
"per_call_avg_usd": 0.06
}
}
GET /v1/me/metrics-keys#
List metrics keys. Your scrape tokens (metadata only).
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/metrics-keys" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"items": []
}
POST /v1/me/metrics-keys#
Mint a metrics key. Creates a scrape-only token (vsk_metrics_…) for your observability stack. Plaintext returned once.
Corpo della richiesta
application/json
Risposte
| Codice |
Descrizione |
201 |
Created. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X POST "https://api.voiceland.ai/v1/me/metrics-keys" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "prod-prometheus"
}'
Esempio di risposta
{
"plaintext": "vsk_metrics_…",
"prefix": "vsk_metrics_"
}
DELETE /v1/me/metrics-keys/{hash}#
Revoke a metrics key. Revokes a scrape token by its hash.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
hash |
path |
string |
Sì |
Key hash from the list. |
Risposte
| Codice |
Descrizione |
204 |
Revoked. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X DELETE "https://api.voiceland.ai/v1/me/metrics-keys/{hash}" \
-H "Authorization: Bearer VL_API_KEY"
GET /v1/me/privacy#
Transcript privacy. Whether what a caller said is kept word for word, or replaced with placeholders, and at which point.
store_verbatim keeps the conversation exactly as it happened. pseudonymize_at_rest replaces names, numbers and other personal details with placeholders on the way into the record, so the stored conversation never contains them. pseudonymize_for_analytics keeps the record word for word and replaces those details only where conversations feed quality tooling.
applies_to_stored_calls and reversible describe the policy that is currently set, so you never have to guess how far a change reaches. Read them before you change anything: a policy that rewrites on the way in cannot reach back over conversations you already have, and cannot be undone for the ones it wrote.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/privacy" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un PrivacyPolicyResponse.
Esempio di risposta
{
"applies_to_stored_calls": false,
"policies": [
"store_verbatim",
"pseudonymize_at_rest",
"pseudonymize_for_analytics"
],
"reversible": true,
"transcript_policy": "store_verbatim"
}
PUT /v1/me/privacy#
Set the transcript privacy policy. Sets the policy. Send transcript_policy as one of the three values policies lists; an empty value means store_verbatim, which is the default and what every project does until it says otherwise.
WHAT THE CHANGE REACHES, which is the part worth reading twice. pseudonymize_at_rest applies to conversations that happen AFTER you set it: it rewrites the text on the way into the record, so it cannot go back over conversations you already have, and there is no key that turns a placeholder back into what the person actually said - for those conversations the change is permanent. pseudonymize_for_analytics works the other way round: the record keeps the real words and the placeholders are applied each time a conversation is read for quality work, so it covers your whole history the moment you set it and switching it off brings the original view straight back.
policies, applies_to_stored_calls and reversible are read-only: they are accepted here and ignored, so you can read the policy and send the same object back. Any other unrecognized field is refused (422).
Corpo della richiesta
application/json Schema: PrivacyPolicyRequest
| Campo |
Tipo |
Obbligatorio |
Descrizione |
applies_to_stored_calls |
boolean |
|
|
policies |
array of string |
|
|
reversible |
boolean |
|
|
transcript_policy |
string |
Sì |
|
Risposte
| Codice |
Descrizione |
200 |
Success. |
400 |
transcript_policy is not one of the three accepted values (invalid_privacy). |
401 |
Missing or invalid API key. |
422 |
The body is not valid JSON for this shape (invalid_request). |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl -X PUT "https://api.voiceland.ai/v1/me/privacy" \
-H "Authorization: Bearer VL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transcript_policy": "pseudonymize_at_rest"
}'
Una risposta riuscita restituisce un PrivacyPolicyResponse.
Esempio di risposta
{
"applies_to_stored_calls": false,
"policies": [
"store_verbatim",
"pseudonymize_at_rest",
"pseudonymize_for_analytics"
],
"reversible": false,
"transcript_policy": "pseudonymize_at_rest"
}
GET /v1/me/prometheus#
Prometheus discovery. Returns your metrics scrape URL + a ready-to-paste scrape config and example queries.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/prometheus" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"auth_scheme": "bearer",
"url": "https://api.voiceland.ai/v1/metrics"
}
GET /v1/me/wallet#
Minutes wallet. Prepaid minutes pool, shared by voice calls and web-widget chat sessions: included seconds remaining this month, purchased seconds, total remaining, and blocked (true when new calls and chat sessions are refused with 402 minutes_exhausted). Voice bills a 30-second minimum then per second; a chat session bills the same rounding of its connect-to-last-message span, scaled by the plan's chat rate. A sub-tenant sees its parent account's pool.
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/wallet" \
-H "Authorization: Bearer VL_API_KEY"
Una risposta riuscita restituisce un WalletStatus.
Esempio di risposta
{
"blocked": false,
"has_package": true,
"included_seconds_remaining": 24600,
"pool_owner": "acme",
"purchased_seconds": 1800,
"remaining_seconds": 26400,
"tenant": "acme",
"tier": "root"
}
GET /v1/me/wallet/ledger#
Minutes ledger. Append-only minutes ledger, newest first. Each row snapshots the package id and per-minute rate in force at the time of the transaction; debit_call rows are voice calls, debit_chat rows are web-widget chat sessions and also carry the chat rate applied.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
limit |
query |
integer |
|
Max rows (1-500, default 100). |
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/me/wallet/ledger" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"items": [
{
"amount_cents": 0,
"kind": "debit_call",
"package_id": "starter",
"rate_cents_per_min": 22,
"seconds": -95
}
]
}
GET /v1/usage#
Cost usage. Per-month cost aggregate. Pass ?month=YYYY-MM for a single month.
Parametri
| Nome |
Posizione |
Tipo |
Obbligatorio |
Descrizione |
month |
query |
string |
|
YYYY-MM; omit for the full series. |
Risposte
| Codice |
Descrizione |
200 |
Success. |
401 |
Missing or invalid API key. |
4XX |
Request error (validation, not-found, etc.). |
5XX |
Server or upstream error. |
Esempio di richiesta
curl "https://api.voiceland.ai/v1/usage" \
-H "Authorization: Bearer VL_API_KEY"
Esempio di risposta
{
"call_count": 2211,
"total_usd": 431.77,
"year_month": "2026-07"
}
Schemi#
AgentStat#
AgentStatsResponse#
AiReportConfigRequest#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
cadence |
string |
|
|
enabled |
boolean |
Sì |
|
recipients |
array of string |
|
|
updated_at |
string |
|
|
AiReportConfigResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
cadence |
string |
Sì |
|
enabled |
boolean |
Sì |
|
recipients |
array of string |
Sì |
|
updated_at |
string (date-time) |
|
|
AiReportGenerateRequest#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
deliver |
boolean |
|
|
period |
string |
|
|
AiReportWire#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
cadence |
string |
Sì |
|
created_at |
string (date-time) |
Sì |
|
email_status_code |
integer |
|
|
error |
string |
|
|
from |
string (date-time) |
Sì |
|
period |
string |
Sì |
|
recipients |
array of string |
|
|
report |
ReportData |
|
|
status |
string |
Sì |
|
tenant |
string |
Sì |
|
to |
string (date-time) |
Sì |
|
trigger |
string |
|
|
truncated |
boolean |
Sì |
|
updated_at |
string (date-time) |
|
|
AiReportsResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
items |
array of AiReportWire |
Sì |
|
next_cursor |
string |
Sì |
|
BusinessHoursDayWire#
BusinessHoursRangeWire#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
end |
string |
Sì |
|
start |
string |
Sì |
|
BusinessHoursRequest#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
days |
array of BusinessHoursDayWire |
|
|
enabled |
boolean |
Sì |
|
holidays |
array of string |
|
|
local_time |
string |
|
|
open_now |
boolean |
|
|
timezone |
string |
|
|
BusinessHoursResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
days |
array of BusinessHoursDayWire |
Sì |
|
enabled |
boolean |
Sì |
|
holidays |
array of string |
Sì |
|
local_time |
string |
Sì |
|
open_now |
boolean |
Sì |
|
timezone |
string |
Sì |
|
ChatKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
definition |
string |
Sì |
|
human_takeover_rate |
number |
Sì |
|
resolved_without_takeover |
integer |
Sì |
|
resolved_without_takeover_ratio |
number |
Sì |
|
sessions |
integer |
Sì |
|
takeover_requested |
integer |
Sì |
|
Cluster#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
calls |
integer |
Sì |
|
label |
string |
Sì |
|
members |
array of string |
Sì |
|
negative_calls |
integer |
Sì |
|
sample_call_ids |
array of string |
|
|
ContainmentKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
contained |
integer |
Sì |
|
rate |
number |
Sì |
|
total |
integer |
Sì |
|
CostKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
per_call_avg_usd |
number |
Sì |
|
per_call_p50_usd |
number |
Sì |
|
per_call_p95_usd |
number |
Sì |
|
total_usd |
number |
Sì |
|
DayCount#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
calls |
integer |
Sì |
|
date |
string |
Sì |
|
EmergingTopicsResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
agent |
string |
|
|
analyzed |
integer |
Sì |
|
clusters |
array of Cluster |
Sì |
|
definition |
string |
Sì |
|
from |
string (date-time) |
Sì |
|
method |
string |
Sì |
|
tenant |
string |
Sì |
|
to |
string (date-time) |
Sì |
|
truncated |
boolean |
Sì |
|
unassigned |
integer |
Sì |
|
EndUserEraseResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
call_links_deleted |
integer |
Sì |
|
memory_items_deleted |
integer |
Sì |
|
profile_key |
string |
Sì |
|
profiles_deleted |
integer |
Sì |
|
EndUserListResponse#
EndUserMemoryWire#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
key |
string |
|
|
kind |
string |
Sì |
|
recorded_at |
string |
Sì |
|
source_call_id |
string |
|
|
value |
string |
Sì |
|
EndUserPolicyRequest#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
enabled |
boolean |
Sì |
|
has_sso_signing_key |
boolean |
|
|
memory_enabled |
boolean |
Sì |
|
memory_max_items |
integer |
|
|
personalized_ranking |
boolean |
Sì |
|
retention_days |
integer |
|
|
sso_issuer |
string |
|
|
sso_max_age_seconds |
integer |
|
|
sso_signing_key |
string |
|
|
EndUserPolicyResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
enabled |
boolean |
Sì |
|
has_sso_signing_key |
boolean |
Sì |
|
memory_enabled |
boolean |
Sì |
|
memory_max_items |
integer |
Sì |
|
personalized_ranking |
boolean |
Sì |
|
retention_days |
integer |
Sì |
|
sso_issuer |
string |
Sì |
|
sso_max_age_seconds |
integer |
Sì |
|
EndUserProfileWire#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
attributes |
map of string |
|
|
display_name |
string |
|
|
expires_at |
string |
|
|
first_seen_at |
string |
|
|
issuer |
string |
|
|
last_seen_at |
string |
|
|
locale |
string |
|
|
memory |
array of EndUserMemoryWire |
Sì |
|
profile_key |
string |
Sì |
|
sessions |
integer |
Sì |
|
Error#
Error envelope returned for non-2xx responses.
| Campo |
Tipo |
Obbligatorio |
Descrizione |
error |
object |
Sì |
|
EscalationKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
by_cause |
map of integer |
Sì |
|
count |
integer |
Sì |
|
definition |
string |
Sì |
|
rate |
number |
Sì |
|
EvalSummary#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
errored_runs |
integer |
Sì |
|
failed_runs |
integer |
Sì |
|
last_run_id |
string |
|
|
last_run_pass_rate |
number |
|
|
last_run_status |
string |
|
|
passed_runs |
integer |
Sì |
|
runs |
integer |
Sì |
|
truncated |
boolean |
|
|
FcrKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
callers_with_repeat_in_7d |
integer |
Sì |
|
rate |
number |
Sì |
|
unique_callers |
integer |
Sì |
|
window_days |
integer |
Sì |
|
FeedbackKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
definition |
string |
Sì |
|
negative |
integer |
Sì |
|
negative_rate |
number |
Sì |
|
rated |
integer |
Sì |
|
GoalKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
completed |
integer |
Sì |
|
definition |
string |
Sì |
|
rate |
number |
Sì |
|
total |
integer |
Sì |
|
IntentKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
calls_with_intents |
integer |
Sì |
|
classified_turns |
integer |
Sì |
|
coverage_rate |
number |
Sì |
|
definition |
string |
Sì |
|
items |
array of IntentRateRow |
Sì |
|
unknown_turns |
integer |
Sì |
|
IntentRateRow#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
calls |
integer |
Sì |
|
contained |
integer |
Sì |
|
containment_rate |
number |
Sì |
|
intent |
string |
Sì |
|
negative |
integer |
Sì |
|
negative_rate |
number |
Sì |
|
rated |
integer |
Sì |
|
turns |
integer |
Sì |
|
KpisResponse#
MetricsBlock#
NegativeConversation#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
agent |
string |
Sì |
|
call_id |
string |
Sì |
|
ended_at |
string (date-time) |
|
|
escalation |
string |
Sì |
|
hangup_cause |
string |
|
|
recording_purged_at |
string |
|
|
recording_url |
string |
|
|
sentiment_end |
string |
Sì |
|
sentiment_end_score |
number |
Sì |
|
sentiment_start |
string |
Sì |
|
sentiment_trajectory |
string |
Sì |
|
started_at |
string (date-time) |
Sì |
|
talk_seconds |
number |
|
|
topics |
array of string |
|
|
NegativeSentimentResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
agent |
string |
|
|
analyzed |
integer |
Sì |
|
count |
integer |
Sì |
|
definition |
string |
Sì |
|
from |
string (date-time) |
Sì |
|
items |
array of NegativeConversation |
Sì |
|
tenant |
string |
Sì |
|
to |
string (date-time) |
Sì |
|
truncated |
boolean |
Sì |
|
PrivacyPolicyRequest#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
applies_to_stored_calls |
boolean |
|
|
policies |
array of string |
|
|
reversible |
boolean |
|
|
transcript_policy |
string |
Sì |
|
PrivacyPolicyResponse#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
applies_to_stored_calls |
boolean |
Sì |
|
policies |
array of string |
Sì |
|
reversible |
boolean |
Sì |
|
transcript_policy |
string |
Sì |
|
QualityKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
definition |
string |
Sì |
|
graded_turns |
integer |
Sì |
|
grounded |
integer |
Sì |
|
grounded_answer_rate |
number |
Sì |
|
hallucinated |
integer |
Sì |
|
hallucination_rate |
number |
Sì |
|
RateCount#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
count |
integer |
Sì |
|
rate |
number |
Sì |
|
total |
integer |
Sì |
|
ReportData#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
account |
MetricsBlock |
Sì |
|
agents |
array of MetricsBlock |
Sì |
|
cadence |
string |
Sì |
|
from |
string (date-time) |
Sì |
|
generated_at |
string (date-time) |
Sì |
|
period |
string |
Sì |
|
target |
Target |
Sì |
|
tenant |
string |
Sì |
|
timezone |
string |
Sì |
|
to |
string (date-time) |
Sì |
|
truncated |
boolean |
Sì |
|
SentimentKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
analyzed |
integer |
Sì |
|
declining |
integer |
Sì |
|
declining_rate |
number |
Sì |
|
definition |
string |
Sì |
|
escalated_negative |
integer |
Sì |
|
escalated_negative_rate |
number |
Sì |
|
improving |
integer |
Sì |
|
improving_rate |
number |
Sì |
|
negative |
integer |
Sì |
|
negative_rate |
number |
Sì |
|
neutral |
integer |
Sì |
|
positive |
integer |
Sì |
|
start_negative |
integer |
Sì |
|
steady |
integer |
Sì |
|
Target#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
chat_sessions |
integer |
Sì |
|
definition |
string |
Sì |
|
met |
boolean |
Sì |
|
name |
string |
Sì |
|
threshold |
number |
Sì |
|
value |
number |
Sì |
|
TopicCount#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
analyzed |
integer |
Sì |
|
calls |
integer |
Sì |
|
negative |
integer |
Sì |
|
negative_rate |
number |
Sì |
|
share |
number |
Sì |
|
topic |
string |
Sì |
|
TopicKPI#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
assigned |
integer |
Sì |
|
definition |
string |
Sì |
|
topics |
array of TopicCount |
Sì |
|
unassigned |
integer |
Sì |
|
WalletStatus#
| Campo |
Tipo |
Obbligatorio |
Descrizione |
blocked |
boolean |
Sì |
|
currency |
string |
Sì |
|
cycle_renews_at |
string (date-time) |
|
|
cycle_seconds_remaining |
integer |
Sì |
|
fee_interval |
string |
|
|
fee_status |
string |
|
|
fee_suspended |
boolean |
|
|
has_package |
boolean |
Sì |
|
included_minutes |
integer |
Sì |
|
included_seconds_remaining |
integer |
Sì |
|
included_seconds_total |
integer |
Sì |
|
included_seconds_used |
integer |
Sì |
|
is_project |
boolean |
Sì |
|
next_fee_at |
string (date-time) |
|
|
overage_rate_cents_per_min |
integer |
Sì |
|
package_id |
string |
|
|
package_name |
string |
|
|
parent_pool_available |
boolean |
Sì |
|
pending_interval |
string |
|
|
pending_package_id |
string |
|
|
pending_package_name |
string |
|
|
plan_id |
string |
|
|
plan_minutes_per_month |
integer |
|
|
plan_overage_allowed |
boolean |
Sì |
|
plan_status |
string |
|
|
pool_owner |
string |
Sì |
|
prepaid_credit_cents |
integer |
|
|
prepaid_run |
boolean |
|
|
prepaid_until |
string (date-time) |
|
|
project_seconds |
integer |
Sì |
|
purchased_seconds |
integer |
Sì |
|
remaining_seconds |
integer |
Sì |
|
tenant |
string |
Sì |
|
tier |
string |
Sì |
|
use_parent_pool |
boolean |
Sì |
|