Skip to content

Retrieve a campaign's results

GET
/campaigns/{id}/stats
import { createClient, createResources } from "@morevoice/sdk";
const mv = createResources({
client: createClient({ baseUrl: "https://api.morevoice.ai/v1", auth: process.env.MOREVOICE_API_KEY }),
});
const campaignResults = await mv.campaigns.stats("cmp_ojFwMD7YNTROjaTP0i3ZFb");
console.log(campaignResults);

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

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

A campaign ID (cmp_…).

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

A campaign’s results: contacts per status, attempts per result, dispositions and compliance skips.

object
attempts
required
object
average_ring_seconds
required

Average ringing time of the attempts.

number | null
by_result
required

Attempts per result (answered, no_answer, busy, voicemail, …).

object
key
additional properties
integer
>= -9007199254740991 <= 9007199254740991
talk_seconds
required

Total talk time.

integer
>= -9007199254740991 <= 9007199254740991
total
required

Dial attempts made.

integer
>= -9007199254740991 <= 9007199254740991
campaign_id
required

A campaign ID (prefix cmp_).

string
/^cmp_[0-9A-Za-z]+$/
contacts
required

Contact counts per status and the calls in progress.

object
by_status
required

Contacts per status.

object
callback
required
integer
>= -9007199254740991 <= 9007199254740991
cancelled
required
integer
>= -9007199254740991 <= 9007199254740991
dialing
required
integer
>= -9007199254740991 <= 9007199254740991
dnc
required
integer
>= -9007199254740991 <= 9007199254740991
done
required
integer
>= -9007199254740991 <= 9007199254740991
failed
required
integer
>= -9007199254740991 <= 9007199254740991
invalid
required
integer
>= -9007199254740991 <= 9007199254740991
pending
required
integer
>= -9007199254740991 <= 9007199254740991
scheduled
required
integer
>= -9007199254740991 <= 9007199254740991
skipped
required
integer
>= -9007199254740991 <= 9007199254740991
finished
required

Contacts that will not be dialled again (done, failed, do-not-call, skipped, invalid, cancelled).

integer
>= -9007199254740991 <= 9007199254740991
live
required

Calls in progress right now (this server’s dialer).

object
connected
required
integer
>= -9007199254740991 <= 9007199254740991
dialing
required
integer
>= -9007199254740991 <= 9007199254740991
ringing
required
integer
>= -9007199254740991 <= 9007199254740991
total
required

Contacts in the campaign.

integer
>= -9007199254740991 <= 9007199254740991
livemode
required

true in live mode, false in test mode.

boolean
object
required
string
Allowed value: campaign_stats
outcomes
required

Contacts per recorded disposition (interested, not-interested, …).

object
key
additional properties
integer
>= -9007199254740991 <= 9007199254740991
skip_reasons
required

Contacts the compliance checks or a user took out, per reason (dnc_import, registry, no_consent, …).

object
key
additional properties
integer
>= -9007199254740991 <= 9007199254740991
Example
{
"attempts": {
"average_ring_seconds": 11.4,
"by_result": {
"answered": 128,
"busy": 22,
"no_answer": 140,
"voicemail": 20
},
"talk_seconds": 9120,
"total": 310
},
"campaign_id": "cmp_2Yb7mCq9aPLk",
"contacts": {
"by_status": {
"callback": 3,
"cancelled": 0,
"dialing": 5,
"dnc": 9,
"done": 120,
"failed": 6,
"invalid": 1,
"pending": 812,
"scheduled": 40,
"skipped": 4
},
"finished": 140,
"live": {
"connected": 1,
"dialing": 2,
"ringing": 2
},
"total": 1000
},
"livemode": true,
"object": "campaign_stats",
"outcomes": {
"interested": 41,
"not-interested": 60
},
"skip_reasons": {
"dnc_import": 7,
"no_consent": 4,
"registry": 2
}
}

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.