Docs

Filters

Every analytics endpoint, the MCP analysis tools and the dashboard URL use one filter. On REST GET endpoints it is the query string; in MCP tools and POST bodies it is a JSON object with the same snake_case keys.

curl -H "Authorization: Bearer $X3_SECRET_KEY" \
  "https://api.3x.example/v1/projects/my-site/analytics/overview?preset=30d&channel=linkedin&has=quiz_submitted&min_relevance=30"
{ "filter": { "preset": "30d", "channel": "linkedin", "has": ["quiz_submitted"], "min_relevance": 30 } }

Semantics

  • Days are calendar days in the project time zone, inclusive on both ends. Session metrics bucket by session start, pageview metrics by pageview start.
  • All conditions are combined with AND; values match exactly (no prefix or substring match).
  • Test traffic (?x3_test=1, preset test parameters such as cm_test) is excluded unless include_test=true.
  • Lists accept repeated parameters or commas: has=cta&has=video equals has=cta,video.
  • Booleans accept true, false, 1, 0.
  • An unknown parameter is a 422 – typos never silently widen a report.

Date range

KeyValues
from, toYYYY-MM-DD; from wins over preset; to defaults to today
presettoday, yesterday, 7d, 14d, 30d (default), 90d, 365d, this_month, last_month, all (last 731 days)

Pages

KeyMeaning
pageCanonical path such as /pricing (query strings and trailing slashes are normalized away)
page_groupA page group key from the project's tracking config
page_modeFor session metrics: any (a pageview on the page, default), entry (entered there), exit (left there)
variantPage variant of the entry pageview (A/B tests: the URL parameter named in the tracking config's variantParam)

Campaigns and acquisition

KeyMeaning
channelDerived channel: google_ads, google_organic, bing, search_other, meta, linkedin, tiktok, social_other, email, ai_assistant, referral, direct, other – see Attribution and channels
utm_source, utm_medium, utm_campaign, utm_content, utm_term, utm_idFirst-touch UTM values of the session (exact)
ref_hostEntry referrer host, e.g. www.google.com
click_idany, none, or a specific key: gclid, gbraid, wbraid, fbclid, li_fat_id, ttclid, msclkid
trafficpaid = an ad click id or a paid utm_medium (cpc, paid, ppc, …); organic = neither

Visitor and technology

KeyValues
devicedesktop, mobile, tablet, unknown
browserchrome, safari, firefox, edge, samsung, opera, other
oswindows, macos, ios, android, linux, chromeos, other
screenxs, sm, md, lg, xl – only known for sessions with consent
countryISO code, uppercase (DE)
langTwo-letter page language from <html lang>
consenttrue = the session granted consent
stitchHow the session was continued: new, memory, storage, hash – see Cookieless sessions

Behaviour and outcomes

KeyMeaning
hasBehaviour flags, all must hold: quiz_started, quiz_submitted, quiz_viewed, quiz_contact, booked, whatsapp, cta, video, video_completed, calculator, form_submit, identified, confirmed_conversion, bounced
goalSessions that reached all of these goal keys (max 10)
eventSessions with at least one of each of these event names (max 10)
convertedtrue = reached a conversion goal, false = none
min_relevance, max_relevanceRelevance score bounds 0–100 – see Relevance score
relevance_tierTier key of the project's relevance config, e.g. hot
include_testInclude test traffic

Ads

KeyMeaning
ad_platformgoogle_ads, meta_ads, linkedin_ads, tiktok_ads
ad_account_id, ad_campaign_id, ad_adset_id, ad_idSessions matched to this ad entity (Matching)
ad_matchmatched / unmatched – sessions with or without an ad-entity match

Breakdown dimensions

GET …/analytics/breakdown?dimension=… groups by one of: channel, the six UTM keys, ref_host, entry_page, entry_group, exit_page, exit_group, entry_host, variant, device, browser, os, country, lang, screen, stitch, attr_from, click_id, converted, quiz_answers, consent, relevance_tier, goal, ad_platform, ad_campaign, ad_adset, ad, day, week, month, hour_of_day, weekday.

Rates in responses are fractions between 0 and 1, durations are seconds, money is in the project currency.