Insights hub
The Insights hub is the landing grid at/insights that groups every analytics surface in the dashboard into one navigable tile set — the answer to “where do I go to look at the numbers?” when you open the sidebar’s Insights entry.
Each row below is a hub tile, and every tile links its read guide in the Section map — the map is the whole story of the hub.
What the hub surfaces
Three families of reads share the grid, in the order an analysis usually walks them:- Agent-comparison charts. Agent comparison ranks your AI agents side by side — containment, resolution, escalation, cost, attributed revenue, margin — with a percentile band against the org population per metric. Read it first: it answers “which variant won.”
- Cohort views. Retention and Funnels & Retention group contacts by their entry event (a campaign send, a first conversation) and count returns over weeks. Read it second: it answers “did the win hold after entry.”
- Funnel + attribution. Conversion Goals, Attribution, and the Marketing mix model allocate conversion credit across channels under five models — first-touch, last-touch, linear, time-decay, U-shaped. Read it third: it answers “where the credit belongs.”
The tile model
Every section card answers four questions before you click:- Name and one-line description — the surface’s headline metric and scope, with an icon.
- Native vs Cross-link badge. Native tiles route under
/insights/<name>; a Cross-link badge means the tile hands off to a surface that lives in a sibling tree (the omnichannel wallboard, the voice tree, the quality hub) — the badge’s hover hint reads “Lives in another section of the dashboard.” - Coming soon badge. Occasionally a tile ships pre-launch as a teaser: the route exists and is navigable, the underlying endpoint ships later. Read-intent tiles lose the badge when their endpoint goes live.
- Role-gating. A handful of tiles only render for an allow-listed seat (see RBAC visibility). The filter is the same normalised org role the sidebar uses, and the destination page re-checks it server-side — the tile hide is presentation-only, never an authorisation boundary.
RBAC visibility
Three gating families live on the hub:- Finance cluster — Channel Costs, LLM spend, Sustainability, Agent ROI, and Agent comparison render only for owner/admin/developer/billing seats. A viewer or agent sees none of these tiles, and the destination page 403s them regardless — the grid simply avoids showing a surface a role can’t read.
- CDP-family cluster — Retention, Funnels & Retention, Account Scores, and Auto-drafted knowledge render only for owner/admin/developer, mirroring the read gate over the PII-bearing customer-event stream.
- Quality cluster — Quality Management renders to owner/admin, Performance Leaderboard to owner/admin/supervisor, and QA Evaluations also to
agent(an agent sees only their own evaluations page).
How to navigate
In the dashboard, open the sidebar’s Insights entry — the hub is its landing page. Direct URLs work the same:/insights renders the grid, and any tile href (/insights/<route> for native tiles, the absolute path for Cross-link tiles) is bookmarkable.
The hub headers two live stat rows above the tiles — a 24-hour API-count / latency / messages / agents row and the flagged-transactions strip — and one cross-link row below. Use the sidebar only when you want the grid again; every tile name doubles as its direct route segment for scripting or sharing links.
Build a comparison view across two variants
The most common read on the hub is a two-variant comparison — two AI agents, two campaigns, two channels. Run it on the tile that owns the comparison class:- Fix the window first. Percentiles and cohorts recompute per window, so pick before you read — 30 days for a deployment decision, 7 days when reacting to this week’s change.
- Pick the two agents or channels. On Agent comparison the picker filters by name or id and shows each agent’s conversation count; on Attribution the channel split comes back in one report (email, SMS, push, RCS).
- Read the metric columns, then the band badge. containment/resolution/escalation, then cost and margin on agents; credit and credit-share on channels. Each cell carries a percentile rank against the org population, direction-aware — “top quartile” on escalation means low escalation.
- Check volume before acting. A top-quartile badge on four conversations is provisional; the picker prints the count next to each agent name, and attribution prints conversion counts per channel.
- Sort to the decision. Sort agents by margin to see which variant pays; sort channels by credit-share to see which one carries the funnel.
linear levels the field, last_touch finds the closer — by re-running the report with the model toggled. Detail steps per surface are in the linked guides: Agent comparison and Multi-touch attribution.
Export a snapshot
Three export shapes exist, one per purpose:- Ad hoc snapshot (CSV/PDF). The Reports tile generates a report in-page — Message Delivery, Channel Performance, Cost Analysis, Contact Growth, Campaign ROI — with CSV and PDF download buttons in the viewer toolbar. Use this when a stakeholder asks for “the numbers” once.
- Scheduled snapshot. The Scheduled Reports tile emails the same reports on a cadence to a recipient list. Use this when the stakeholder asks every week; create on schedule, run
Send nowto preview. - API snapshot (JSON). Every surface’s compute endpoint returns the same view over the Insights API — e.g.
GET /api/v1/insights/agent-comparison?agentIds=...&from=...&to=...for the comparison table. Script this when your analytics team pulls into a BI tool; the CDP BI-tool connectors guide covers Tableau, Power BI, Looker, Superset, and Metabase. Copyable curl + SDK escape-hatch blocks for each endpoint are in Worked API samples below.
Worked API samples
Everything on the hub is scriptable: the same reads the dashboard tiles render are returned over the public API, so a BI tool or scheduled job can drive the exact numbers a tile shows without opening the dashboard. Five calls cover the hub’s main reads end to end. The five below run through the generic SDK escape hatch —orbit.request in Node and client.request in Python — because the Insights read surface sits below the typed SDK resources. Auth, retries, and the standard { data, meta } envelope are identical to the typed helpers.
Every Insights and Analytics call shares one per-tenant budget of 60 requests / minute; your API key needs the
analytics:read scope, and queries run against a read replica so reporting never contends with your live send path. On a 429, honour Retry-After and back off. Writes that create scheduled or ad hoc reports are owner/admin-gated — the scope alone does not author a new scheduled report.Compare two agents
Ranks agents on containment / resolution / escalation / cost / attributed revenue / margin, and returns a percentile band against the org population per metric. Pass at least two agent ids; the window defaults to the last 30 days whenfrom / to are omitted.
Run a contact cohort funnel
Runs the ordered cohort funnel over your CDP event stream — pass 2–8 event names insteps and the response counts subjects who reached each step in sequence inside the per-step window_days. Owner / admin / developer with the contacts:read scope, same gate the Funnels & Retention tile in the dashboard carries.
step, index, reached, dropOffFromPrevious, dropOffRateFromPrevious, cumulativeConversionRate), so every member survives JSON parsing untouched:
Drill into funnel drop reasons
When the funnel’s second step drops, the carrier reason codes tell you why. Here{step} is one of sent, delivered, read, or queued, and the response is the top carrier rejection codes enriched with human-readable names — the same shape the Channels → Analytics guide walks through on the drop-reasons drill-down.
Generate an ad hoc report
Creates the report behind one of the Reports tile’s cards — message delivery, channel performance, cost analysis, contact growth, or campaign ROI — as an ad hoc snapshot that survives sign-out. The PUT replaces the caller’s saved report history and returns it; each entry needs the generated report’sid, name, type, generatedAt, and column keys a caller reads back later.
Loop with a scheduled report
The Scheduled Reports tile is the same call every cadence tick. Pick one of the five reporttypes — messaging_volume, deliverability, top_contacts, spend, or custom (which runs the saved query in filters.saved_query) — choose a daily, weekly, or monthly cadence, and Orbit emails the report to 1–50 recipients at 09:00 in the schedule’s timezone. Requires owner/admin; the list endpoint authorises over analytics:read alone.
next_send_at — in the standard envelope:
Section map
Role-specific views
Two worked examples of the same hub, one per seat:- A viewer or agent opens the grid and never sees the finance cluster (Channel Costs, LLM spend, Sustainability, Agent ROI, Agent comparison) or the CDP-family cluster — every tile they do see is one their role’s read route is entitled to, so the grid is always the full set of what they can open. An agent additionally sees QA Evaluations (their own evaluation scores, acknowledge/appeal workflow) but not the org-wide Quality Management rollup.
- An admin sees every tile on the grid including the finance and CDP families, because their seat passes the hub’s normalised-role filter and the destination page’s server-side guard in the same way.
Permissions — what a viewer can and cannot reach
Viewer (and agent) seats see every tile above except the finance cluster (Channel Costs, LLM spend, Sustainability, Agent ROI, Agent comparison) and the CDP-family cluster (Retention, Funnels, Account Scores, Auto-drafted knowledge) — those tiles simply do not render in the viewer’s grid. Even if a viewer pastes the route directly, the destination API returns403; the hide and the guard are the same allow-list. On the Quality cluster, an agent additionally sees QA Evaluations (own scores only) but not the org-wide Quality Management rollup, and supervisors reach the Performance Leaderboard. Read access to KPI Alerts, Usage anomalies, and every other tile is open to all members; write access to alert rules stays with owner/admin/developer.
KPI alerts — pick a trigger, choose the channel
KPI alerts keep the decision-loop result watched after you close the dashboard. The KPI Alerts tile is self-serve over five business metrics: CSAT, NPS, CES, LLM spend, and AI containment. Creating a rule is a five-field form:- Metric. Pick from the five.
- Trigger. Threshold — aggregate over a trailing window of
window_days(1–90, default 7) compared withlt/lte/gt/gteagainst a fixed number; or Anomaly — z-score against a 28-day learned baseline with no threshold to tune. - Threshold and window (threshold rules). Enter the comparator and the number in the metric’s native unit — percent for CSAT/containment, points for NPS, score scale for CES, USD for spend. Anomaly rules skip this; evaluation is daily against the baseline.
- Enabled toggle. Save; a scheduler sweep evaluates all opted-in tenants continuously, so rules fire without a manual Evaluate-now.
- Read the feed. The Fired-alerts feed lists the last 50 notifications with a View-metric deep link into the breached surface.
Run the decision loop
The hub is thirty pages, but an operator runs them as one loop:- Compare two variants on Agent comparison — the operator-level walkthrough above.
- Confirm durability per campaign on Cohort retention — a comparison win only counts if the entry cohort stayed better after week one.
- Assign credit on Funnels and Attribution — the model choice decides which channel earns the budget.
- Pin the result with a KPI alert on the metric that decided the rollout — containment, margin, or conversion rate.
Troubleshooting
Two failure modes recur on the attribution and funnel reads:- Attribution returns nothing, or everything lands in
unattributed_conversions. The join keys every conversion to touchpoints viaCOALESCE(contact_id, anonymous_id, user_id)inside the lookback. A conversion with zero in-window touchpoints surfaces as unattributed, not dropped — if the share is large, touchpoints are not arriving with a stitchable id (event tracking is droppingcontact_id/anonymous_idon your sends), or the traffic is genuinely outside your sending channels. Widen the lookback before changing the tracking plan: attribution joins onlylookback_daysdays of touches per conversion (1–365, default 30). - Funnel and attribution totals disagree. The funnel query and the attribution query use different time scopes by design: the funnel counts events in its own window, attribution joins conversions against a per-conversion lookback. Pick the lookback deliberately and treat the label as part of the read — the same run under
last_touchwith 14 days is a “closer” report; the same window underfirst_touchwith 90 days is an “introductions” report. When two stakeholders quote different numbers, first align on model + lookback, not on which surface is “right.”
Fraud alerts strip
Below the stat row, the hub renders the flagged-transactions strip — the top open fraud alerts raised on this account’s spend traffic. Each alert deep-links to its evidence; the strip collapses entirely when the fraud-shield queue is empty rather than rendering an empty container. For alert triage, verdicts, and the how-it-scans model, see the Compliance fraud shield guide.See also
- Dashboard Home walkthrough — the triage surface pointing into this hub
- Insights dashboards — the analysis surface this hub aggregates
- Insights → Logs viewer — the wider, filterable form of the activity feed
- CDP BI-tool connectors — the pull path when your analytics team reads the same CDP data from Tableau, Power BI, Looker, Superset, or Metabase instead of the dashboard