Skip to content

Retrieve a flow's analytics

GET
/flows/{id}/analytics
import MoreVoice from "@morevoice/sdk";
const mv = new MoreVoice(); // MOREVOICE_API_KEY from the environment
const flowAnalytics = await mv.flows.retrieveAnalytics("flow_7Hk2Lm9Qp");
console.log(flowAnalytics);

How this key’s mode’s calls went through the flow (the latest 5000 in the range): visits, calls, drop-off, caller turns and errors per node, how often each transition was taken, how calls ended, and IVR KPIs for IVR flows. Filter by from / to (start time) and a published version.

Try it in the API playground with a test-mode key.

id
required
string
<= 200 characters /^flow_[0-9A-Za-z]+$/

A flow ID (flow_…).

from
string format: date-time

Calls that started at or after this time (ISO 8601).

Example
2026-11-03T09:14:22.000Z
to
string format: date-time

Calls that started at or before this time (ISO 8601).

Example
2026-11-03T09:14:22.000Z
version
string
/^[1-9][0-9]{0,6}$/

Only calls that ran this published version.

MoreVoice-Version
string
/^\d{4}-\d{2}-\d{2}$/

The API version to use for this request. Defaults to the version the API key is pinned to.

Example
2026-11-01

OK

Media typeapplication/json

How calls went through a flow: visits, drop-off and errors per node, conversion per transition, how calls ended.

object
calls
required

Calls that ran the flow in the range (at most the latest 5000).

integer
>= -9007199254740991 <= 9007199254740991
ends
required
Array<object>
object
calls
required
integer
>= -9007199254740991 <= 9007199254740991
reason
required
string
flow_id
required

A flow ID (prefix flow_).

string
/^flow_[0-9A-Za-z]+$/
from
required
string | null
ivr
required
Any of:
object
abandon_rate
required
number
avg_ivr_ms
required
number
by_menu
required
Array<object>
object
abandoned
required
integer
>= -9007199254740991 <= 9007199254740991
avg_ms
required
number
entered
required
integer
>= -9007199254740991 <= 9007199254740991
invalid
required
integer
>= -9007199254740991 <= 9007199254740991
no_input
required
integer
>= -9007199254740991 <= 9007199254740991
node_key
required
string
calls
required
integer
>= -9007199254740991 <= 9007199254740991
containment
required
number
dtmf_share
required
number
exits
required
Array<object>
object
calls
required
integer
>= -9007199254740991 <= 9007199254740991
kind
required
string
invalid_rate
required
number
no_input_rate
required
number
speech_share
required
number
livemode
required

true in live mode, false in test mode.

boolean
nodes
required
Array<object>
object
avg_turns
required

Caller turns per visit.

number
calls
required

Calls that entered it.

integer
>= -9007199254740991 <= 9007199254740991
drop_off
required

Calls that ended here without reaching a closing node (end, transfer, …).

integer
>= -9007199254740991 <= 9007199254740991
errors
required
integer
>= -9007199254740991 <= 9007199254740991
node_key
required
string
node_type
required

The node’s v1 type (internal: a type outside the public subset).

string
Allowed values: start say question ai_agent kb_answer api post_api integration post_integration set_variable decision dtmf_menu hours transfer end internal
visits
required

Times the node was entered.

integer
>= -9007199254740991 <= 9007199254740991
object
required
string
Allowed value: flow_analytics
to
required
string | null
transitions
required
Array<object>
object
node_key
required
string | null
rate
required

Taken / exits of its node, 0–1.

number
taken
required
integer
>= -9007199254740991 <= 9007199254740991
transition_key
required
string | null
version
required
Any of:
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"calls": 120,
"ends": [
{
"calls": 98,
"reason": "flow-ended"
},
{
"calls": 22,
"reason": "customer-hangup"
}
],
"flow_id": "flow_7Kp1Ns4Vy6Ab9Dg2Hj5Lm8",
"from": "2026-11-01T00:00:00.000Z",
"ivr": null,
"livemode": true,
"nodes": [
{
"avg_turns": 0.2,
"calls": 120,
"drop_off": 4,
"errors": 0,
"node_key": "start",
"node_type": "start",
"visits": 120
},
{
"avg_turns": 1.4,
"calls": 116,
"drop_off": 9,
"errors": 0,
"node_key": "ask_id",
"node_type": "question",
"visits": 131
}
],
"object": "flow_analytics",
"to": null,
"transitions": [
{
"node_key": "start",
"rate": 0.967,
"taken": 116,
"transition_key": "t_next"
}
],
"version": null
}

The request is invalid: a parameter is missing, malformed or unknown, or the version header is unknown.

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "parameter_missing",
"doc_url": "https://docs.morevoice.ai/api/errors#parameter-missing",
"message": "Missing required parameter: to.",
"param": "to",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "invalid_request_error"
}
}
X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.

No valid API key was sent.

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "invalid_api_key",
"doc_url": "https://docs.morevoice.ai/api/errors#invalid-api-key",
"message": "Invalid API key.",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "authentication_error"
}
}
X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.

The key may not do this (a missing scope, a plan limit, or a compliance block).

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "missing_scope",
"doc_url": "https://docs.morevoice.ai/api/errors#missing-scope",
"message": "This API key lacks the calls:write scope.",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "permission_error"
}
}
X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.

No object with this ID exists in this organisation and mode.

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "resource_missing",
"doc_url": "https://docs.morevoice.ai/api/errors#resource-missing",
"message": "No such object: 'call_4Gk2'.",
"param": "id",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "not_found"
}
}
X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.

Too many requests, or no call capacity right now. Retry after the Retry-After delay.

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "rate_limited",
"doc_url": "https://docs.morevoice.ai/api/errors#rate-limited",
"message": "Too many requests. Retry after 1 second.",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "rate_limit_error"
}
}
Retry-After
integer

Seconds to wait before retrying.

X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.

Something went wrong on MoreVoice’s side. Retry with the same Idempotency-Key.

Media typeapplication/json

Every /v1 error.

object
error
required
object
code
required

A stable, machine-readable code from the error-code catalogue.

string
details

Structured context, e.g. required_scope or the compliance verdict.

object
key
additional properties
doc_url
required

A link to the documentation of this code.

string
message
required

A human-readable explanation. Do not parse it.

string
param

The request parameter the error relates to, e.g. to or metadata[order_id].

string
request_id
required

The X-Request-Id of this request. Quote it when you contact support.

string
type
required

The category of the error.

string
Allowed values: invalid_request_error authentication_error permission_error not_found conflict rate_limit_error compliance_error idempotency_error api_error
Example
{
"error": {
"code": "internal_error",
"doc_url": "https://docs.morevoice.ai/api/errors#internal-error",
"message": "Something went wrong on MoreVoice's side.",
"request_id": "req_7Hk2LmN9pQ4rS6tV8wX0yZ",
"type": "api_error"
}
}
X-Request-Id
string

The request’s ID (req_…). Quote it when you contact support.