API Reference
Key Admin
Calls and history

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

GET/domains/~/callqueuereport/abandoned

Returns 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

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (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)
FieldTypeNotes
domainstringThe account the item belongs to.
call-orig-call-idstringID of the call orig call.
agent-term-uristring
agent-term-userstring
agent-term-domainstring
agent-name-first-namestringName of the agent name first.
agent-name-last-namestringName of the agent name last.
callqueuestringThe call queue's ID.
call-dialed-numberintegerCall dialed number.
agent-talking-duration-secondsintegerAgent talking duration, in seconds.
agent-call-duration-secondsintegerAgent call duration, in seconds.
queue-duration-secondsintegerQueue duration, in seconds.
agent-holding-duration-secondsintegerAgent holding duration, in seconds.
disposition-duration-secondsintegerDisposition duration, in seconds.
agent-call-start-datetimestringAgent call start (date and time).
queue-call-start-datetimestringQueue call start (date and time).
queue-call-disconnect-datetimestringQueue call disconnect (date and time).
agent-call-disconnect-datetimestringAgent call disconnect (date and time).
agent-call-answer-datetimestringAgent call answer (date and time).
agent-call-disconnect-reason-textstring
queue-call-disconnect-reason-textstring
call-orig-from-namestringName of the call orig from.
call-orig-from-userinteger
call-orig-from-uristring

Other responses: 400, 401, 404. See errors.

List abandoned calls for a queue

GET/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

NameInTypeNotes
callqueue requiredpathstringThe call queue's ID (its extension), like 2000.
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (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)
FieldTypeNotes
domainstringThe account the item belongs to.
call-orig-call-idstringID of the call orig call.
agent-term-uristring
agent-term-userstring
agent-term-domainstring
agent-name-first-namestringName of the agent name first.
agent-name-last-namestringName of the agent name last.
callqueuestringThe call queue's ID.
call-dialed-numberintegerCall dialed number.
agent-talking-duration-secondsintegerAgent talking duration, in seconds.
agent-call-duration-secondsintegerAgent call duration, in seconds.
queue-duration-secondsintegerQueue duration, in seconds.
agent-holding-duration-secondsintegerAgent holding duration, in seconds.
disposition-duration-secondsintegerDisposition duration, in seconds.
agent-call-start-datetimestringAgent call start (date and time).
queue-call-start-datetimestringQueue call start (date and time).
queue-call-disconnect-datetimestringQueue call disconnect (date and time).
agent-call-disconnect-datetimestringAgent call disconnect (date and time).
agent-call-answer-datetimestringAgent call answer (date and time).
agent-call-disconnect-reason-textstring
queue-call-disconnect-reason-textstring
call-orig-from-namestringName of the call orig from.
call-orig-from-userinteger
call-orig-from-uristring

Other responses: 400, 401, 404. See errors.

Count charts on a dashboard

GET/domains/~/charts/{dashboard_id}/count

Returns 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

NameInTypeNotes
dashboard_id requiredpathnumberThe dashboard ID.
typequerystringNarrows 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)
FieldTypeNotes
totalintegerHow many items matched.

Other responses: 400, 401, 403, 404. See errors.

List charts on a dashboard

GET/domains/~/charts/{dashboard_id}/list

Returns a short list of the charts on the account.

Read Key Admin switch: Reports and statistics, Read. Read only keys also work.

Parameters

NameInTypeNotes
dashboard_id requiredpathnumberThe 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)
FieldTypeNotes
idintegerThe item's ID.
namestring
typestringThe kind of item.
data_tokenobject
data_token.access_tokenstring
data_token.expires_ininteger
data_token.scopestring
data_token.mask_chainnull
data_token.token_typestring
data_token.refresh_tokenstring

Other responses: 400, 401, 403, 404. See errors.

Get storage quotas

GET/domains/~/quotas

Returns 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)
FieldTypeNotes
domainstringThe account the item belongs to.
countLimitstring
sizeLimitstring
timeLimitstring
ageLimitstring

Count storage quotas

GET/domains/~/quotas/count

Returns 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)
FieldTypeNotes
totalintegerHow many items matched.

Other responses: 400, 401, 403, 404. See errors.

Get call stats by number dialed

GET/domains/~/statistics/DNIS

Returns call totals grouped by the phone number callers dialed.

Read Key Admin switch: Reports and statistics, Read. Read only keys also work.

Parameters

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet 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)
FieldTypeNotes
calls-total-countintegerNumber of calls total.
calls-answered-countintegerNumber of calls answered.
calls-presented-countintegerNumber of calls presented.
calls-presented-adjusted-countintegerNumber of calls presented adjusted.
calls-voicemailed-countintegerNumber of calls voicemailed.
calls-forwarded-countintegerNumber of calls forwarded.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-callback-requests-countintegerNumber of calls callback requests.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-service-level-percentnumber
calls-presented-percentnumber
calls-abandoned-countintegerNumber of calls abandoned.
calls-abandoned-adjusted-countintegerNumber of calls abandoned adjusted.
calls-abandoned-ratenumber
calls-abandoned-adjusted-ratenumber
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
calls-queueing-avg-duration-secondsnumberCalls queueing avg duration, in seconds.
sms-conversations-countintegerNumber of sms conversations.
sms-handling-avg-duration-secondsnumberSms handling avg duration, in seconds.

Other responses: 400, 401, 404. See errors.

Get a queue's stats by number dialed

GET/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

NameInTypeNotes
callqueue requiredpathstringThe call queue's ID (its extension), like 2000.
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet 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)
FieldTypeNotes
calls-total-countintegerNumber of calls total.
calls-answered-countintegerNumber of calls answered.
calls-presented-countintegerNumber of calls presented.
calls-presented-adjusted-countintegerNumber of calls presented adjusted.
calls-voicemailed-countintegerNumber of calls voicemailed.
calls-forwarded-countintegerNumber of calls forwarded.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-callback-requests-countintegerNumber of calls callback requests.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-service-level-percentnumber
calls-presented-percentnumber
calls-abandoned-countintegerNumber of calls abandoned.
calls-abandoned-adjusted-countintegerNumber of calls abandoned adjusted.
calls-abandoned-ratenumber
calls-abandoned-adjusted-ratenumber
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
calls-queueing-avg-duration-secondsnumberCalls queueing avg duration, in seconds.
sms-conversations-countintegerNumber of sms conversations.
sms-handling-avg-duration-secondsnumberSms handling avg duration, in seconds.

Other responses: 400, 401, 404. See errors.

Get agent statistics

GET/domains/~/statistics/agent

Returns 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

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
departmentquerystringThe department name.
remove_zerosquerystringSet 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)
FieldTypeNotes
calls-answered-countintegerNumber of calls answered.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
outbound-calls-attempted-countintegerNumber of outbound calls attempted.
outbound-calls-answered-countintegerNumber of outbound calls answered.
outbound-calls-duration-minutesnumberOutbound calls duration, in minutes.
outbound-calls-avg-duration-minutesnumberOutbound calls avg duration, in minutes.
inbound-calls-presented-countintegerNumber of inbound calls presented.
inbound-calls-answered-countintegerNumber of inbound calls answered.
inbound-calls-duration-minutesnumberInbound calls duration, in minutes.
inbound-calls-avg-duration-minutesnumberInbound calls avg duration, in minutes.
namestring
calls-talking-duration-minutesnumberCalls talking duration, in minutes.
calls-unanswered-countintegerNumber of calls unanswered.

Other responses: 400, 401, 404. See errors.

Get agent statistics for a queue

GET/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

NameInTypeNotes
callqueue requiredpathstringThe call queue's ID (its extension), like 2000.
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet to yes to leave out rows where every number is zero.
departmentquerystringThe 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)
FieldTypeNotes
calls-answered-countintegerNumber of calls answered.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
outbound-calls-attempted-countintegerNumber of outbound calls attempted.
outbound-calls-answered-countintegerNumber of outbound calls answered.
outbound-calls-duration-minutesnumberOutbound calls duration, in minutes.
outbound-calls-avg-duration-minutesnumberOutbound calls avg duration, in minutes.
inbound-calls-presented-countintegerNumber of inbound calls presented.
inbound-calls-answered-countintegerNumber of inbound calls answered.
inbound-calls-duration-minutesnumberInbound calls duration, in minutes.
inbound-calls-avg-duration-minutesnumberInbound calls avg duration, in minutes.
namestring
calls-talking-duration-minutesnumberCalls talking duration, in minutes.
calls-unanswered-countintegerNumber of calls unanswered.

Other responses: 400, 401, 404. See errors.

Get statistics for one agent

GET/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

NameInTypeNotes
agent requiredpathstringThe agent's ID: their extension, an @ and your account ID, like 1001@yourfirm.noodlevoice.
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet 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)
FieldTypeNotes
calls-answered-countintegerNumber of calls answered.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
outbound-calls-attempted-countintegerNumber of outbound calls attempted.
outbound-calls-answered-countintegerNumber of outbound calls answered.
outbound-calls-duration-minutesnumberOutbound calls duration, in minutes.
outbound-calls-avg-duration-minutesnumberOutbound calls avg duration, in minutes.
inbound-calls-presented-countintegerNumber of inbound calls presented.
inbound-calls-answered-countintegerNumber of inbound calls answered.
inbound-calls-duration-minutesnumberInbound calls duration, in minutes.
inbound-calls-avg-duration-minutesnumberInbound calls avg duration, in minutes.
namestring
calls-talking-duration-minutesnumberCalls talking duration, in minutes.
calls-unanswered-countintegerNumber of calls unanswered.

Other responses: 400, 401, 404. See errors.

Get the agent activity log

GET/domains/~/statistics/agentLog

Returns when agents logged in, logged out and changed status.

Read Key Admin switch: Reports and statistics, Read. Read only keys also work.

Parameters

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet to yes to leave out rows where every number is zero.
departmentquerystringThe 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)
FieldTypeNotes
status-login-duration-minutesnumberStatus login duration, in minutes.
status-available-duration-minutesnumberStatus available duration, in minutes.
status-unavailable-duration-minutesnumberStatus unavailable duration, in minutes.
status-lunch-duration-minutesnumberStatus lunch duration, in minutes.
status-break-duration-minutesnumberStatus break duration, in minutes.
status-meeting-duration-minutesnumberStatus meeting duration, in minutes.
status-other-duration-minutesnumberStatus other duration, in minutes.
status-web-duration-minutesnumberStatus web duration, in minutes.
status-custom1-duration-minutesnumberStatus custom1 duration, in minutes.
status-custom2-duration-minutesnumberStatus custom2 duration, in minutes.
status-custom3-duration-minutesnumberStatus custom3 duration, in minutes.
status-custom4-duration-minutesnumberStatus custom4 duration, in minutes.
status-custom5-duration-minutesnumberStatus custom5 duration, in minutes.
status-custom6-duration-minutesnumberStatus custom6 duration, in minutes.
status-custom7-duration-minutesnumberStatus custom7 duration, in minutes.
status-custom8-duration-minutesnumberStatus custom8 duration, in minutes.

Other responses: 400, 401, 404. See errors.

Get combined queue statistics

GET/domains/~/statistics/callqueues/aggregate

Returns 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

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet to yes to leave out rows where every number is zero.
queue_listquerystringComma 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)
FieldTypeNotes
calls-total-countintegerNumber of calls total.
calls-answered-countintegerNumber of calls answered.
calls-presented-countintegerNumber of calls presented.
calls-presented-adjusted-countintegerNumber of calls presented adjusted.
calls-voicemailed-countintegerNumber of calls voicemailed.
calls-forwarded-countintegerNumber of calls forwarded.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-callback-requests-countintegerNumber of calls callback requests.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-service-level-percentnumber
calls-presented-percentnumber
calls-abandoned-countintegerNumber of calls abandoned.
calls-abandoned-adjusted-countintegerNumber of calls abandoned adjusted.
calls-abandoned-ratenumber
calls-abandoned-adjusted-ratenumber
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
calls-queueing-avg-duration-secondsnumberCalls queueing avg duration, in seconds.
sms-conversations-countintegerNumber of sms conversations.
sms-handling-avg-duration-secondsnumberSms handling avg duration, in seconds.

Other responses: 400, 401, 404. See errors.

Get statistics per queue

GET/domains/~/statistics/callqueues/per-queue

Returns the same totals broken out for each call queue.

Read Key Admin switch: Reports and statistics, Read. Read only keys also work.

Parameters

NameInTypeNotes
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet to yes to leave out rows where every number is zero.
queue_listquerystringComma 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)
FieldTypeNotes
calls-total-countintegerNumber of calls total.
calls-answered-countintegerNumber of calls answered.
calls-presented-countintegerNumber of calls presented.
calls-presented-adjusted-countintegerNumber of calls presented adjusted.
calls-voicemailed-countintegerNumber of calls voicemailed.
calls-forwarded-countintegerNumber of calls forwarded.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-callback-requests-countintegerNumber of calls callback requests.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-service-level-percentnumber
calls-presented-percentnumber
calls-abandoned-countintegerNumber of calls abandoned.
calls-abandoned-adjusted-countintegerNumber of calls abandoned adjusted.
calls-abandoned-ratenumber
calls-abandoned-adjusted-ratenumber
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
calls-queueing-avg-duration-secondsnumberCalls queueing avg duration, in seconds.
sms-conversations-countintegerNumber of sms conversations.
sms-handling-avg-duration-secondsnumberSms handling avg duration, in seconds.
namestring

Other responses: 400, 401, 404. See errors.

Get statistics for one queue

GET/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

NameInTypeNotes
callqueue requiredpathstringThe call queue's ID (its extension), like 2000.
datetime-start requiredquerystring (rfc3339)Start of the date range, like 2026-10-01 00:00:00. Times are in the account's time zone.
datetime-end requiredquerystring (rfc3339)End of the date range, like 2026-10-31 23:59:59.
fieldsquerystringComma separated list of fields to include. Leave it out to get every field.
remove_zerosquerystringSet to yes to leave out rows where every number is zero.
queue_listquerystringComma 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)
FieldTypeNotes
calls-total-countintegerNumber of calls total.
calls-answered-countintegerNumber of calls answered.
calls-presented-countintegerNumber of calls presented.
calls-presented-adjusted-countintegerNumber of calls presented adjusted.
calls-voicemailed-countintegerNumber of calls voicemailed.
calls-forwarded-countintegerNumber of calls forwarded.
calls-talking-avg-duration-minutesnumberCalls talking avg duration, in minutes.
calls-assisted-countintegerNumber of calls assisted.
calls-after-call-work-avg-duration-secondsintegerCalls after call work avg duration, in seconds.
calls-callback-requests-countintegerNumber of calls callback requests.
calls-holding-avg-duration-secondsnumberCalls holding avg duration, in seconds.
calls-service-level-percentnumber
calls-presented-percentnumber
calls-abandoned-countintegerNumber of calls abandoned.
calls-abandoned-adjusted-countintegerNumber of calls abandoned adjusted.
calls-abandoned-ratenumber
calls-abandoned-adjusted-ratenumber
calls-handling-avg-duration-minutesnumberCalls handling avg duration, in minutes.
calls-queueing-avg-duration-secondsnumberCalls queueing avg duration, in seconds.
sms-conversations-countintegerNumber of sms conversations.
sms-handling-avg-duration-secondsnumberSms handling avg duration, in seconds.

Other responses: 400, 401, 404. See errors.

Count dashboards for a user

GET/domains/~/users/{user}/dashboards/count

Returns 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

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
owner_idquerynumberOnly 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)
FieldTypeNotes
totalintegerHow many items matched.

Other responses: 400, 401, 403, 404. See errors.

List a user's dashboards

GET/domains/~/users/{user}/dashboards/list

Returns a short list of the dashboards for one user.

Read Key Admin switch: Reports and statistics, Read. Read only keys also work.

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
owner_idquerynumberOnly 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)
FieldTypeNotes
idintegerThe item's ID.
namestring
domainstringThe account the item belongs to.
favoriteboolean
owner_idstring
owner_typeinteger

Other responses: 400, 401, 403, 404. See errors.