Skip to content

Survey rollup: response funnel, per-question distributions, CSAT/NPS aggregates

GET
/v1/campaigns/{campaign_id}/survey-rollup
curl --request GET \
--url https://api.vocapable.com/v1/campaigns/example/survey-rollup \
--header 'Authorization: Bearer <token>'
campaign_id
required
Campaign Id
string
created_at
Any of:
string

Filter on created_at. Comma-separated values are OR.

created_at.gte
Any of:
string

Filter on created_at with the gte operator.

created_at.lte
Any of:
string

Filter on created_at with the lte operator.

created_at.gt
Any of:
string

Filter on created_at with the gt operator.

created_at.lt
Any of:
string

Filter on created_at with the lt operator.

created_at.in
Any of:
string

Filter on created_at with the in operator.

Successful Response

Media typeapplication/json
SurveyRollup
object
campaign_id
required
Campaign Id
string
agent_version_id
Any of:
string
window
required
SurveyRollupWindow

The window actually aggregated - the request’s, clamped to the campaign’s lifetime.

object
from
required
From
string format: date-time
to
required
To
string format: date-time
funnel
required
SurveyFunnel

Contacts, not attempts.

response_rate is completed surveys over contacts dialed and completion_rate is completed over started (docs/04-api.md §2 step 8c), so the three funnel counts above them are per-contact too - a contact dialed three times is one dialed contact, and the funnel stays monotone.

object
targeted
required
Targeted
integer
dialed
required
Dialed
integer
answered
required
Answered
integer
survey_started
required
Survey Started
integer
survey_complete
required
Survey Complete
integer
survey_partial
required
Survey Partial
integer
survey_refused
required
Survey Refused
integer
response_rate
required
Response Rate
number
completion_rate
required
Completion Rate
number
questions
Questions
Array<object>
SurveyQuestionRollup

One scored question of the pinned version.

scale is the complete enum csat|nps|ordinal|boolean and points is the separate choice count - the count is never folded into the scale name (CANON fact 63). An objective carrying no scoring block is unscored and never appears here, though its answers still count toward the funnel’s completion states.

object
objective_id
required
Objective Id
string
prompt
Any of:
string
scale
required
SurveyScale

Scoring scales for survey objectives (CANON fact 63).

The number of points is a separate points field, never part of the scale name; a question with no scoring block at all is simply unscored.

string
Allowed values: csat nps ordinal boolean
points
required
Points
integer
answered
required
Answered
integer
distribution
Distribution
object
key
additional properties
integer
mean
Any of:
number
top_2_box_rate
Any of:
number
promoters
Any of:
integer
passives
Any of:
integer
detractors
Any of:
integer
aggregate
required
SurveyAggregate

The scale-native aggregates plus the normalized score.

object
csat
Any of:
number
nps
Any of:
number
weighted_score
Any of:
number
scored_responses
required
Scored Responses
integer
Example
{
"questions": [
{
"scale": "csat"
}
]
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}