Reports and statistics
Reports cover queue and agent statistics, abandoned calls, dashboards and storage quotas.
In the Key Admin this is the Reports and statistics switch. Read lets a key call the GET endpoints below. This feature is read only.
List abandoned queue calls
/domains/~/callqueuereport/abandonedReturns calls where the caller hung up while waiting in a queue.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"domain": "string",
"call-orig-call-id": "string",
"agent-term-uri": "string",
"agent-term-user": "1001",
"agent-term-domain": "string",
"agent-name-first-name": "Front Desk",
"agent-name-last-name": "Front Desk",
"callqueue": "string",
"...": "16 more fields"
}
]Response fields (24)
| Field | Type | Notes |
|---|---|---|
domain | string | The account the item belongs to. |
call-orig-call-id | string | ID of the call orig call. |
agent-term-uri | string | |
agent-term-user | string | |
agent-term-domain | string | |
agent-name-first-name | string | Name of the agent name first. |
agent-name-last-name | string | Name of the agent name last. |
callqueue | string | The call queue's ID. |
call-dialed-number | integer | Call dialed number. |
agent-talking-duration-seconds | integer | Agent talking duration, in seconds. |
agent-call-duration-seconds | integer | Agent call duration, in seconds. |
queue-duration-seconds | integer | Queue duration, in seconds. |
agent-holding-duration-seconds | integer | Agent holding duration, in seconds. |
disposition-duration-seconds | integer | Disposition duration, in seconds. |
agent-call-start-datetime | string | Agent call start (date and time). |
queue-call-start-datetime | string | Queue call start (date and time). |
queue-call-disconnect-datetime | string | Queue call disconnect (date and time). |
agent-call-disconnect-datetime | string | Agent call disconnect (date and time). |
agent-call-answer-datetime | string | Agent call answer (date and time). |
agent-call-disconnect-reason-text | string | |
queue-call-disconnect-reason-text | string | |
call-orig-from-name | string | Name of the call orig from. |
call-orig-from-user | integer | |
call-orig-from-uri | string |
Other responses: 400, 401, 404. See errors.
List abandoned calls for a queue
/domains/~/callqueuereport/abandoned/{callqueue}Returns abandoned calls for one call queue.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
callqueue required | path | string | The call queue's ID (its extension), like 2000. |
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/callqueuereport/abandoned/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"domain": "string",
"call-orig-call-id": "string",
"agent-term-uri": "string",
"agent-term-user": "1001",
"agent-term-domain": "string",
"agent-name-first-name": "Front Desk",
"agent-name-last-name": "Front Desk",
"callqueue": "string",
"...": "16 more fields"
}
]Response fields (24)
| Field | Type | Notes |
|---|---|---|
domain | string | The account the item belongs to. |
call-orig-call-id | string | ID of the call orig call. |
agent-term-uri | string | |
agent-term-user | string | |
agent-term-domain | string | |
agent-name-first-name | string | Name of the agent name first. |
agent-name-last-name | string | Name of the agent name last. |
callqueue | string | The call queue's ID. |
call-dialed-number | integer | Call dialed number. |
agent-talking-duration-seconds | integer | Agent talking duration, in seconds. |
agent-call-duration-seconds | integer | Agent call duration, in seconds. |
queue-duration-seconds | integer | Queue duration, in seconds. |
agent-holding-duration-seconds | integer | Agent holding duration, in seconds. |
disposition-duration-seconds | integer | Disposition duration, in seconds. |
agent-call-start-datetime | string | Agent call start (date and time). |
queue-call-start-datetime | string | Queue call start (date and time). |
queue-call-disconnect-datetime | string | Queue call disconnect (date and time). |
agent-call-disconnect-datetime | string | Agent call disconnect (date and time). |
agent-call-answer-datetime | string | Agent call answer (date and time). |
agent-call-disconnect-reason-text | string | |
queue-call-disconnect-reason-text | string | |
call-orig-from-name | string | Name of the call orig from. |
call-orig-from-user | integer | |
call-orig-from-uri | string |
Other responses: 400, 401, 404. See errors.
Count charts on a dashboard
/domains/~/charts/{dashboard_id}/countReturns how many charts there are on the account, as {"total": n}.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
dashboard_id required | path | number | The dashboard ID. |
type | query | string | Narrows the results to one type. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/count" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/count", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/count",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"total": 1
}Response fields (1)
| Field | Type | Notes |
|---|---|---|
total | integer | How many items matched. |
Other responses: 400, 401, 403, 404. See errors.
List charts on a dashboard
/domains/~/charts/{dashboard_id}/listReturns a short list of the charts on the account.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
dashboard_id required | path | number | The dashboard ID. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/list" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/list", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/charts/{dashboard_id}/list",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"id": 1,
"name": "Front Desk",
"type": "string",
"data_token": {
"access_token": "string",
"expires_in": 1,
"scope": "string",
"mask_chain": "string",
"token_type": "string",
"refresh_token": "string"
}
}
]Response fields (10)
| Field | Type | Notes |
|---|---|---|
id | integer | The item's ID. |
name | string | |
type | string | The kind of item. |
data_token | object | |
data_token.access_token | string | |
data_token.expires_in | integer | |
data_token.scope | string | |
data_token.mask_chain | null | |
data_token.token_type | string | |
data_token.refresh_token | string |
Other responses: 400, 401, 403, 404. See errors.
Get storage quotas
/domains/~/quotasReturns the storage limits for voicemail and recordings on the account: count, size, length and age.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/quotas" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/quotas", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/quotas",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"domain": "string",
"countLimit": "string",
"sizeLimit": "string",
"timeLimit": "string",
"ageLimit": "string"
}
]Response fields (5)
| Field | Type | Notes |
|---|---|---|
domain | string | The account the item belongs to. |
countLimit | string | |
sizeLimit | string | |
timeLimit | string | |
ageLimit | string |
Count storage quotas
/domains/~/quotas/countReturns how many storage quotas there are on the account, as {"total": n}.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/quotas/count" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/quotas/count", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/quotas/count",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"total": 1
}Response fields (1)
| Field | Type | Notes |
|---|---|---|
total | integer | How many items matched. |
Other responses: 400, 401, 403, 404. See errors.
Get call stats by number dialed
/domains/~/statistics/DNISReturns call totals grouped by the phone number callers dialed.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-total-count": 1,
"calls-answered-count": 1,
"calls-presented-count": 1,
"calls-presented-adjusted-count": 1,
"calls-voicemailed-count": 1,
"calls-forwarded-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"...": "13 more fields"
}Response fields (21)
| Field | Type | Notes |
|---|---|---|
calls-total-count | integer | Number of calls total. |
calls-answered-count | integer | Number of calls answered. |
calls-presented-count | integer | Number of calls presented. |
calls-presented-adjusted-count | integer | Number of calls presented adjusted. |
calls-voicemailed-count | integer | Number of calls voicemailed. |
calls-forwarded-count | integer | Number of calls forwarded. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-callback-requests-count | integer | Number of calls callback requests. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-service-level-percent | number | |
calls-presented-percent | number | |
calls-abandoned-count | integer | Number of calls abandoned. |
calls-abandoned-adjusted-count | integer | Number of calls abandoned adjusted. |
calls-abandoned-rate | number | |
calls-abandoned-adjusted-rate | number | |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
calls-queueing-avg-duration-seconds | number | Calls queueing avg duration, in seconds. |
sms-conversations-count | integer | Number of sms conversations. |
sms-handling-avg-duration-seconds | number | Sms handling avg duration, in seconds. |
Other responses: 400, 401, 404. See errors.
Get a queue's stats by number dialed
/domains/~/statistics/DNIS/callqueues/{callqueue}Returns call totals for one queue, grouped by the number callers dialed.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
callqueue required | path | string | The call queue's ID (its extension), like 2000. |
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/DNIS/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-total-count": 1,
"calls-answered-count": 1,
"calls-presented-count": 1,
"calls-presented-adjusted-count": 1,
"calls-voicemailed-count": 1,
"calls-forwarded-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"...": "13 more fields"
}Response fields (21)
| Field | Type | Notes |
|---|---|---|
calls-total-count | integer | Number of calls total. |
calls-answered-count | integer | Number of calls answered. |
calls-presented-count | integer | Number of calls presented. |
calls-presented-adjusted-count | integer | Number of calls presented adjusted. |
calls-voicemailed-count | integer | Number of calls voicemailed. |
calls-forwarded-count | integer | Number of calls forwarded. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-callback-requests-count | integer | Number of calls callback requests. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-service-level-percent | number | |
calls-presented-percent | number | |
calls-abandoned-count | integer | Number of calls abandoned. |
calls-abandoned-adjusted-count | integer | Number of calls abandoned adjusted. |
calls-abandoned-rate | number | |
calls-abandoned-adjusted-rate | number | |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
calls-queueing-avg-duration-seconds | number | Calls queueing avg duration, in seconds. |
sms-conversations-count | integer | Number of sms conversations. |
sms-handling-avg-duration-seconds | number | Sms handling avg duration, in seconds. |
Other responses: 400, 401, 404. See errors.
Get agent statistics
/domains/~/statistics/agentReturns call handling totals for every queue agent in a date range.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
department | query | string | The department name. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-answered-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"calls-after-call-work-avg-duration-seconds": 1,
"calls-holding-avg-duration-seconds": 1.0,
"calls-handling-avg-duration-minutes": 1.0,
"outbound-calls-attempted-count": 1,
"outbound-calls-answered-count": 1,
"...": "9 more fields"
}Response fields (17)
| Field | Type | Notes |
|---|---|---|
calls-answered-count | integer | Number of calls answered. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
outbound-calls-attempted-count | integer | Number of outbound calls attempted. |
outbound-calls-answered-count | integer | Number of outbound calls answered. |
outbound-calls-duration-minutes | number | Outbound calls duration, in minutes. |
outbound-calls-avg-duration-minutes | number | Outbound calls avg duration, in minutes. |
inbound-calls-presented-count | integer | Number of inbound calls presented. |
inbound-calls-answered-count | integer | Number of inbound calls answered. |
inbound-calls-duration-minutes | number | Inbound calls duration, in minutes. |
inbound-calls-avg-duration-minutes | number | Inbound calls avg duration, in minutes. |
name | string | |
calls-talking-duration-minutes | number | Calls talking duration, in minutes. |
calls-unanswered-count | integer | Number of calls unanswered. |
Other responses: 400, 401, 404. See errors.
Get agent statistics for a queue
/domains/~/statistics/agent/callqueues/{callqueue}Returns call handling totals for the agents of one queue.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
callqueue required | path | string | The call queue's ID (its extension), like 2000. |
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
department | query | string | The department name. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-answered-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"calls-after-call-work-avg-duration-seconds": 1,
"calls-holding-avg-duration-seconds": 1.0,
"calls-handling-avg-duration-minutes": 1.0,
"outbound-calls-attempted-count": 1,
"outbound-calls-answered-count": 1,
"...": "9 more fields"
}Response fields (17)
| Field | Type | Notes |
|---|---|---|
calls-answered-count | integer | Number of calls answered. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
outbound-calls-attempted-count | integer | Number of outbound calls attempted. |
outbound-calls-answered-count | integer | Number of outbound calls answered. |
outbound-calls-duration-minutes | number | Outbound calls duration, in minutes. |
outbound-calls-avg-duration-minutes | number | Outbound calls avg duration, in minutes. |
inbound-calls-presented-count | integer | Number of inbound calls presented. |
inbound-calls-answered-count | integer | Number of inbound calls answered. |
inbound-calls-duration-minutes | number | Inbound calls duration, in minutes. |
inbound-calls-avg-duration-minutes | number | Inbound calls avg duration, in minutes. |
name | string | |
calls-talking-duration-minutes | number | Calls talking duration, in minutes. |
calls-unanswered-count | integer | Number of calls unanswered. |
Other responses: 400, 401, 404. See errors.
Get statistics for one agent
/domains/~/statistics/agent/{agent}Returns call handling totals for a single agent.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
agent required | path | string | The agent's ID: their extension, an @ and your account ID, like 1001@yourfirm.noodlevoice. |
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/1001@yourfirm.noodlevoice?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/1001@yourfirm.noodlevoice?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agent/1001@yourfirm.noodlevoice?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-answered-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"calls-after-call-work-avg-duration-seconds": 1,
"calls-holding-avg-duration-seconds": 1.0,
"calls-handling-avg-duration-minutes": 1.0,
"outbound-calls-attempted-count": 1,
"outbound-calls-answered-count": 1,
"...": "9 more fields"
}Response fields (17)
| Field | Type | Notes |
|---|---|---|
calls-answered-count | integer | Number of calls answered. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
outbound-calls-attempted-count | integer | Number of outbound calls attempted. |
outbound-calls-answered-count | integer | Number of outbound calls answered. |
outbound-calls-duration-minutes | number | Outbound calls duration, in minutes. |
outbound-calls-avg-duration-minutes | number | Outbound calls avg duration, in minutes. |
inbound-calls-presented-count | integer | Number of inbound calls presented. |
inbound-calls-answered-count | integer | Number of inbound calls answered. |
inbound-calls-duration-minutes | number | Inbound calls duration, in minutes. |
inbound-calls-avg-duration-minutes | number | Inbound calls avg duration, in minutes. |
name | string | |
calls-talking-duration-minutes | number | Calls talking duration, in minutes. |
calls-unanswered-count | integer | Number of calls unanswered. |
Other responses: 400, 401, 404. See errors.
Get the agent activity log
/domains/~/statistics/agentLogReturns when agents logged in, logged out and changed status.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
department | query | string | The department name. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agentLog?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agentLog?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/agentLog?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"status-login-duration-minutes": 1.0,
"status-available-duration-minutes": 1.0,
"status-unavailable-duration-minutes": 1.0,
"status-lunch-duration-minutes": 1.0,
"status-break-duration-minutes": 1.0,
"status-meeting-duration-minutes": 1.0,
"status-other-duration-minutes": 1.0,
"status-web-duration-minutes": 1.0,
"...": "8 more fields"
}Response fields (16)
| Field | Type | Notes |
|---|---|---|
status-login-duration-minutes | number | Status login duration, in minutes. |
status-available-duration-minutes | number | Status available duration, in minutes. |
status-unavailable-duration-minutes | number | Status unavailable duration, in minutes. |
status-lunch-duration-minutes | number | Status lunch duration, in minutes. |
status-break-duration-minutes | number | Status break duration, in minutes. |
status-meeting-duration-minutes | number | Status meeting duration, in minutes. |
status-other-duration-minutes | number | Status other duration, in minutes. |
status-web-duration-minutes | number | Status web duration, in minutes. |
status-custom1-duration-minutes | number | Status custom1 duration, in minutes. |
status-custom2-duration-minutes | number | Status custom2 duration, in minutes. |
status-custom3-duration-minutes | number | Status custom3 duration, in minutes. |
status-custom4-duration-minutes | number | Status custom4 duration, in minutes. |
status-custom5-duration-minutes | number | Status custom5 duration, in minutes. |
status-custom6-duration-minutes | number | Status custom6 duration, in minutes. |
status-custom7-duration-minutes | number | Status custom7 duration, in minutes. |
status-custom8-duration-minutes | number | Status custom8 duration, in minutes. |
Other responses: 400, 401, 404. See errors.
Get combined queue statistics
/domains/~/statistics/callqueues/aggregateReturns totals across all call queues: calls offered, answered, abandoned, wait times.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
queue_list | query | string | Comma separated list of queue IDs to include. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/aggregate?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/aggregate?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/aggregate?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-total-count": 1,
"calls-answered-count": 1,
"calls-presented-count": 1,
"calls-presented-adjusted-count": 1,
"calls-voicemailed-count": 1,
"calls-forwarded-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"...": "13 more fields"
}Response fields (21)
| Field | Type | Notes |
|---|---|---|
calls-total-count | integer | Number of calls total. |
calls-answered-count | integer | Number of calls answered. |
calls-presented-count | integer | Number of calls presented. |
calls-presented-adjusted-count | integer | Number of calls presented adjusted. |
calls-voicemailed-count | integer | Number of calls voicemailed. |
calls-forwarded-count | integer | Number of calls forwarded. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-callback-requests-count | integer | Number of calls callback requests. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-service-level-percent | number | |
calls-presented-percent | number | |
calls-abandoned-count | integer | Number of calls abandoned. |
calls-abandoned-adjusted-count | integer | Number of calls abandoned adjusted. |
calls-abandoned-rate | number | |
calls-abandoned-adjusted-rate | number | |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
calls-queueing-avg-duration-seconds | number | Calls queueing avg duration, in seconds. |
sms-conversations-count | integer | Number of sms conversations. |
sms-handling-avg-duration-seconds | number | Sms handling avg duration, in seconds. |
Other responses: 400, 401, 404. See errors.
Get statistics per queue
/domains/~/statistics/callqueues/per-queueReturns the same totals broken out for each call queue.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
queue_list | query | string | Comma separated list of queue IDs to include. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/per-queue?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/per-queue?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/per-queue?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-total-count": 1,
"calls-answered-count": 1,
"calls-presented-count": 1,
"calls-presented-adjusted-count": 1,
"calls-voicemailed-count": 1,
"calls-forwarded-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"...": "14 more fields"
}Response fields (22)
| Field | Type | Notes |
|---|---|---|
calls-total-count | integer | Number of calls total. |
calls-answered-count | integer | Number of calls answered. |
calls-presented-count | integer | Number of calls presented. |
calls-presented-adjusted-count | integer | Number of calls presented adjusted. |
calls-voicemailed-count | integer | Number of calls voicemailed. |
calls-forwarded-count | integer | Number of calls forwarded. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-callback-requests-count | integer | Number of calls callback requests. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-service-level-percent | number | |
calls-presented-percent | number | |
calls-abandoned-count | integer | Number of calls abandoned. |
calls-abandoned-adjusted-count | integer | Number of calls abandoned adjusted. |
calls-abandoned-rate | number | |
calls-abandoned-adjusted-rate | number | |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
calls-queueing-avg-duration-seconds | number | Calls queueing avg duration, in seconds. |
sms-conversations-count | integer | Number of sms conversations. |
sms-handling-avg-duration-seconds | number | Sms handling avg duration, in seconds. |
name | string |
Other responses: 400, 401, 404. See errors.
Get statistics for one queue
/domains/~/statistics/callqueues/{callqueue}Returns one call queue by its ID.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
callqueue required | path | string | The call queue's ID (its extension), like 2000. |
datetime-start required | query | string (rfc3339) | Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone. |
datetime-end required | query | string (rfc3339) | End of the date range, like 2026-10-31 23:59:59. |
fields | query | string | Comma separated list of fields to include. Leave it out to get every field. |
remove_zeros | query | string | Set to yes to leave out rows where every number is zero. |
queue_list | query | string | Comma separated list of queue IDs to include. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/statistics/callqueues/2000?datetime-start=2026-10-01%2000%3A00%3A00&datetime-end=2026-10-31%2023%3A59%3A59",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"calls-total-count": 1,
"calls-answered-count": 1,
"calls-presented-count": 1,
"calls-presented-adjusted-count": 1,
"calls-voicemailed-count": 1,
"calls-forwarded-count": 1,
"calls-talking-avg-duration-minutes": 1.0,
"calls-assisted-count": 1,
"...": "13 more fields"
}Response fields (21)
| Field | Type | Notes |
|---|---|---|
calls-total-count | integer | Number of calls total. |
calls-answered-count | integer | Number of calls answered. |
calls-presented-count | integer | Number of calls presented. |
calls-presented-adjusted-count | integer | Number of calls presented adjusted. |
calls-voicemailed-count | integer | Number of calls voicemailed. |
calls-forwarded-count | integer | Number of calls forwarded. |
calls-talking-avg-duration-minutes | number | Calls talking avg duration, in minutes. |
calls-assisted-count | integer | Number of calls assisted. |
calls-after-call-work-avg-duration-seconds | integer | Calls after call work avg duration, in seconds. |
calls-callback-requests-count | integer | Number of calls callback requests. |
calls-holding-avg-duration-seconds | number | Calls holding avg duration, in seconds. |
calls-service-level-percent | number | |
calls-presented-percent | number | |
calls-abandoned-count | integer | Number of calls abandoned. |
calls-abandoned-adjusted-count | integer | Number of calls abandoned adjusted. |
calls-abandoned-rate | number | |
calls-abandoned-adjusted-rate | number | |
calls-handling-avg-duration-minutes | number | Calls handling avg duration, in minutes. |
calls-queueing-avg-duration-seconds | number | Calls queueing avg duration, in seconds. |
sms-conversations-count | integer | Number of sms conversations. |
sms-handling-avg-duration-seconds | number | Sms handling avg duration, in seconds. |
Other responses: 400, 401, 404. See errors.
Count dashboards for a user
/domains/~/users/{user}/dashboards/countReturns how many dashboards there are for one user, as {"total": n}.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
owner_id | query | number | Only return dashboards owned by this user. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/count" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/count", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/count",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"total": 1
}Response fields (1)
| Field | Type | Notes |
|---|---|---|
total | integer | How many items matched. |
Other responses: 400, 401, 403, 404. See errors.
List a user's dashboards
/domains/~/users/{user}/dashboards/listReturns a short list of the dashboards for one user.
Read Key Admin switch: Reports and statistics, Read. Read only keys also work.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
owner_id | query | number | Only return dashboards owned by this user. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/list" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/list", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/dashboards/list",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"id": 1,
"name": "Front Desk",
"domain": "string",
"favorite": true,
"owner_id": "string",
"owner_type": 1
}
]Response fields (6)
| Field | Type | Notes |
|---|---|---|
id | integer | The item's ID. |
name | string | |
domain | string | The account the item belongs to. |
favorite | boolean | |
owner_id | string | |
owner_type | integer |
Other responses: 400, 401, 403, 404. See errors.