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
FREEReturns 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
FREEPOSTs 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
FREEPer-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_…"