zijra.Documentation
Developer

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.

Code exampleShell
curl "https://zijra.com/api/v2/websites/YOUR_WEBSITE_ID/analytics?start=2026-09-01&end=2026-09-30&currency=USD" \
  -H "Authorization: Bearer YOUR_SCOPED_TOKEN"
Preparing code…

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.

Code exampleShell
curl --get "https://zijra.com/api/v2/websites/YOUR_WEBSITE_ID/analytics" \
  -H "Authorization: Bearer YOUR_SCOPED_TOKEN" \
  --data-urlencode 'start=2026-09-01' \
  --data-urlencode 'end=2026-09-30' \
  --data-urlencode 'filters=[{"dimension":"Page","operator":"contains","value":"/pricing"},{"dimension":"Page","operator":"not_contains","value":"/private"}]'
Preparing code…

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.

Code exampleShell
curl --get "https://zijra.com/api/v2/websites/YOUR_WEBSITE_ID/funnel-report/YOUR_FUNNEL_UUID" \
  --header "Authorization: Bearer $ZIJRA_API_TOKEN" \
  --data-urlencode 'start=2026-09-01' \
  --data-urlencode 'end=2026-09-30' \
  --data-urlencode 'currency=USD' \
  --data-urlencode 'filters=[{"dimension":"Device","value":"mobile"}]'
Preparing code…

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.

Code exampleJSON
[{"dimension":"Channel","value":"Paid social","channelVersion":"classified"}]
Preparing code…

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 tokens

CLI

Code exampleShell
node scripts/zijra-cli.mjs --origin https://zijra.com --site YOUR_WEBSITE_ID get analytics --start 2026-09-01 --end 2026-09-30
Preparing code…

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.