Understand
Analytics
Event-stream analytics with funnels, retention, cohorts, saved boards, top-events, time-series, breakdowns by user trait — Mixpanel-shaped on a Postgres event stream.
Features
- **Funnel analysis** — `POST /analytics/funnels` to save, `GET .../funnels/:id/results` to compute. Per-step counts + cohort filter via `audienceId`. **Note:** results return step counts; there's no audience-export-per-step today (build via the audience module instead).
- **Retention endpoint** — `GET /analytics/retention` returns retention curves over N-day windows. **No heat-grid drill-down today.**
- **Path analysis** — `GET /analytics/paths` for event flow visualisation.
- **Group-by user trait** — `GET /analytics/events/breakdown-by-trait` joins events × Customers profiles to break any series by `plan` / `industry` / etc.
- **Multi-line time-series compare** — `GET /analytics/time-series/multi` for layering multiple events on one chart.
- **Top events + breakdown** — `GET /analytics/events/top` + `.../events/breakdown` for property-level slicing.
- **Saved Insights** — bookmark a chart configuration via `POST /analytics/insights`. **Boards (multi-chart canvas mixing funnels + retention + time-series) are NOT built today.**
- **Auto-discovered property + trait dropdowns** — `GET /analytics/events/properties` + `.../profiles/traits` — no schema-doc spelunking.
- **Cohort filter via `audienceId`** — bind any insight to a saved audience.
- **AI features (opt-in)** — conversational debug, lifecycle classifier, auto-trait extraction, anomaly detection. Ollama Cloud + BYOK.
- **Real-time event stream** for debugging — `GET /analytics/events/stream` returns events landing in <2s.
- **Events feed every other module** — same stream powers Audiences, Automation workflows, Support timeline, Attribution, AI chatbot context. One pipeline.
Common use cases
- Replace Mixpanel / Amplitude / PostHog for funnel + retention + paths + time-series analysis on events that ALSO drive your messaging.
- Activation funnel tuning where the cohort filter binds the funnel to a real-time audience (no warehouse round-trip).
- Multi-platform product analytics with one identity (anon → identified handled via device-takeover, not duplicate profiles).
Key concepts
- Event
- `{ orgId, projectId, module, eventType, timestamp, userId? | anonymousId, properties, context }`.
- Anonymous → identified
- SDK mints an `anonymousId` on first launch. `identify(userId)` merges the anonymous timeline into the identified user.
- Saved insight
- Pin a funnel / time-series / breakdown to a Board. Auto-rerun on the dashboard.
Track + query
Track an event
FREEUniversal `track()` for any user action. Auto-attaches device id + session id + current Auth user. Buffered + flushed in batches.
sendora.track("checkout_completed", {
amount: 49.99,
currency: "USD",
items: 3,
});Page / screen views
FREEConvenience method emitting `page_viewed` (web) or `screen_viewed` (mobile). Auto-fires on Next/React-Router nav when `autotrack` enabled.
sendora.page("Checkout", { plan: "growth" });Funnel queries
STARTER+Server-side aggregation: ordered events with optional time window. Returns conversion + drop-off per step.
curl -X POST https://api.sendoracloud.com/api/v1/orgs/<ORG_UUID>/analytics/funnels \
-H "x-api-key: pk_prod_…" \
-d '{
"steps": ["signup", "onboarding_completed", "first_action"],
"window": "7d"
}'Retention cohorts
STARTER+Cohort-by-week retention chart. First-event grouping → return-event match.
curl -X POST https://api.sendoracloud.com/api/v1/orgs/<ORG_UUID>/analytics/retention \
-H "x-api-key: pk_prod_…" \
-d '{ "firstEvent": "signup", "returnEvent": "session_started", "windowWeeks": 12 }'