Report API
Paid plans: read reports, dimensions, goals, event counts and funnels with a website-scoped token.
Choose minimal permissions
Developer settings issues named, expiring tokens with explicit scopes and website allowlists. Only a hash is stored; the secret appears once. Revoked or expired credentials lose access. Child tokens cannot expand a parent’s sites, permissions or expiry, and parent revocation also revokes children.
Versioned resources
The v2 API covers analytics, breakdowns, visitors, identities, server goals, payments, websites, goals, provider goals, measured goal and funnel reports, funnels, notes, alerts, team and tokens. Each resource checks its own read or write scope and fresh issuer membership.
API access requires Founder or another active paid plan. Free still includes dashboard reports, Stripe revenue attribution, 3 saved goals and 1 saved funnel. Individual visitor histories and journeys also require the appropriate private permission and consent. Existing credentials are checked against current plan access on every use; a token cannot bypass plan limits. Recorded legacy contracts retain their terms.
Paged resource lists use signed cursor pagination. Writes use stable idempotency keys or record IDs; tenant identifiers cannot be supplied to escape the selected website. Consented profiles are exposed only through their explicit private permission.
Filter an audience
Analytics and breakdown requests accept a filters JSON array with dimension, value and an optional operator: is, is_not, contains or not_contains. Omitting operator preserves exact equality. Filters combine with AND; substring matching is case sensitive and literal. The same 20-filter, 2,048-character and 8 KB limits apply to the API.
Use source for a detailed acquisition source, goalId for a completed browser goal UUID, and visitCount as JSON with operator eq, gte or lte and a value from 1 to 1,000,000. When specifying dates, provide both; leaving both out uses the website’s local default range of the last 30 days. In breakdowns, dimension chooses the returned table; API time series use daily grouping.
Read measured goals and funnels
Use goal-report and funnel-report with reports:read to get the same measured results as the dashboard. The goals and funnels resources list saved definitions. Append a saved definition UUID for one report, or request a bounded list with limit from 1 to 20 (default 10). Aggregate reports do not accept cursors.
Each response identifies the website, timezone, range, currency, payment mode and selection.
Read report units
- Funnel entered and completed values are counts. Conversion rate and step drop-off are percentages from 0 to 100.
- Average and median completion time use seconds. RevenueMinor uses exact integer minor units after refunds.
- Goal count is the number of occurrences. Sessions, unique visitors, daily trends and country/referrer totals use the complete selected audience.
Understand property coverage
Typed property values preserve strings, numbers, booleans and null. Reports show up to 20 keys and 10 values per key. propertySummary and each property’s totalValues, shownValues and truncated identify omitted results; totals and trends still include every matching event.
A visitor can appear in several property rows; their counts cannot be added into a unique visitor total. Responses larger than 4 MiB return a size error; choose a single UUID, reduce the report limit or shorten the range.
Filter classified channels
Send the filters query parameter as a JSON array. Add channelVersion: "classified" to a Channel filter to select categories such as Paid social or Referral. The dashboard adds this marker automatically. Unmarked Channel filters keep the original acquisition-source behavior, preserving existing saved segments and API clients; the separate source parameter also remains compatible.
The marker is accepted only on Channel filters. Older retained and imported source totals cannot reconstruct classified channels, so unsupported historical selections are excluded with a measurement notice.
Try a request
The authenticated playground uses an explicitly entered bearer credential with its own scoped permissions. It holds the secret only in page memory until you clear it or leave the page. Existing v1 report and payment routes remain compatible.
Open playground and tokensCLI
Set ZIJRA_API_TOKEN or ZIJRA_OAUTH_TOKEN securely in the process environment. Create/update bodies come from a reviewed JSON file; writes require --confirm.