Skip to content
Sendora Cloud
Create account
Engage

Surveys

NPS + multi-question surveys delivered in-app, by email, or as standalone share links. Auto-store responses to profile traits.

Features

  • **6 question types** — `text`, `rating`, `nps`, `multiple_choice`, `single_choice`, `boolean`. Max 20 questions per survey.
  • **Audience-targeted display** — pick a Customers audience. Trigger config also supports event match + URL match + 0-300s delay.
  • **Schedule window** — `startsAt` + `endsAt` for time-boxed campaigns. `isActive` flag for soft-pause.
  • **`survey.completed` event** fires on every full submission; `survey.started` on partial. Auto-flows you'd build yourself: Automation workflow triggered on `survey.completed` → `branch` step on answer value → `update_profile` step + `webhook` step for Slack.
  • **Response storage** in `survey_responses` with answers + entityId/userId + completion flag + metadata.
  • **Per-survey stats** — totalResponses / completedResponses / partialResponses. **Note: `averageNps` is a placeholder field returning null today; compute client-side from the responses payload.**
  • **SDK helpers** — Web `Surveys.showSurvey()` + `submitResponse()`; RN 0.18.4+ ships `surveys.fetchConfig()` + `surveys.submitResponse()`.
  • **Public `GET /surveys/:id/config` + `POST /surveys/responses`** — render anywhere your SDK can call (in-app, email landing page, link).

Common use cases

  • Replace Typeform for survey collection where the response should land in the same tenant as your audiences + messaging.
  • NPS where the detractor list is a query you'd Automate via the `survey.completed` event + Audience filter (not via a built-in classifier).
  • Post-purchase CSAT where the response writes a profile trait via a one-step Automation workflow (`update_profile` step keyed on the answer).

Surveys

Fetch active survey for the user

FREE

Returns surveys eligible to show the current user (audience match, frequency cap satisfied, not already responded).

const { surveys } = await sendora.surveys.fetch();
if (surveys.length > 0) showSurveyModal(surveys[0]);

Submit a response

FREE

POSTs answers + optional NPS score. Triggers `survey.responded` event into the analytics stream.

await sendora.surveys.submit(surveyId, {
  answers: { q1: "Excellent", q2: 9 },
  npsScore: 9,
});

Aggregated results

FREE

Per-question breakdown, NPS score, response count over time. Dashboard renders charts; same data via API for export.

# Per-survey responses + stats are org-scoped admin routes.
curl https://api.sendoracloud.com/api/v1/orgs/<ORG_UUID>/surveys/<SURVEY_UUID>/responses \
  -H "x-api-key: pk_prod_…"

curl https://api.sendoracloud.com/api/v1/orgs/<ORG_UUID>/surveys/<SURVEY_UUID>/stats \
  -H "x-api-key: pk_prod_…"

Related