Skip to main content

Surveys API

Survey campaign management and response collection Base path: /api/v1/surveys Endpoint count: 8

Public survey response (recipient-facing)

These two endpoints power the page a recipient lands on when they open a survey link. They are unauthenticated — the request carries no API key. Access is granted by the single-use token embedded in the link, so you never expose your API key to end users. The token is minted when you send a survey with POST /api/v1/surveys/{id}/send and is baked into the SMS, email, WhatsApp, RCS, or Viber message each recipient receives. Tokens are valid for 30 days. Most teams let recipients use the hosted page below; the JSON form of the submit endpoint is there for when you render your own response UI.
Do not send an X-API-Key header to these endpoints, and do not build the token yourself — always use the link returned by the send endpoint. Both endpoints are rate-limited to 10 requests per minute per IP.

Open the survey response page

GET /api/v1/public/surveys/{token}
token
string
required
The signed token from the survey link. An invalid or expired token returns a 404 page rather than revealing whether a survey exists.
Returns a self-contained HTML page with a 0–10 rating scale and, when the survey defines a follow-up prompt, a comment box. If the recipient has already answered, the page shows their recorded score instead of the form. The response is served with Cache-Control: private, no-store, so shared links are never cached.

Submit a survey response

POST /api/v1/public/surveys/{token}/submit
token
string
required
The signed token from the survey link.
score
integer
The rating, 010. Optional when a comment is provided.
comment
string
A free-text comment, up to 2000 characters. Optional when a score is provided.
Send at least one of score or comment; a request with neither is rejected. The endpoint accepts either a JSON body or a standard application/x-www-form-urlencoded form post, so the hosted page and your own integration share the same route. Submitting again with the same token is safe — the first answer is kept and never double-counted. Set Accept: application/json to receive a JSON envelope; otherwise the endpoint returns an HTML thank-you page for browser form posts.
Errors

List all survey templates

GET /api/v1/surveys/

Get a single survey template

GET /api/v1/surveys/{id}
id
string
required

Aggregate survey rollup — avg score, NPS score, response rate

GET /api/v1/surveys/{id}/results
id
string
required

Voice-of-Customer analytics over verbatim comments — sentiment, themes, drivers, NPS trend over time

GET /api/v1/surveys/{id}/voc
id
string
required

Create a survey template

POST /api/v1/surveys/
name
string
required
Human-readable name for this survey template (1–200 characters).
type
string (enum: nps|csat|ces)
Survey type; sets the scoring formula and prompt wording. Defaults to nps.
question
string
required
The question presented to recipients (1–500 characters).
channels
string (enum: sms|whatsapp|email|viber|rcs)[]
required
One to five delivery channels the survey can be sent through.
follow_up_prompt
string | null
Optional open-ended prompt asked after the score to capture a verbatim comment.

Send a survey to an audience (contact, list, or segment)

POST /api/v1/surveys/{id}/send
id
string
required

Update a survey template

PATCH /api/v1/surveys/{id}
id
string
required

Delete a survey template

DELETE /api/v1/surveys/{id}
id
string
required