Skip to content
Coritan Docs

Organization API: Analytics

Live and historical tracking stats for the organization.

View as Markdown

Live and historical tracking stats for the organization.

Base URL: https://api.coritan.com/api/v1. Paths below are complete.

To try these requests in the browser, open the interactive Organization API reference.

Method Path Summary
GET /api/v1/orgs/{org_slug}/tracking/conversions Org tracking conversions
GET /api/v1/orgs/{org_slug}/tracking/live The visitors on the organization's storefront right now
GET /api/v1/orgs/{org_slug}/tracking/live-view The organization's visitors right now, for a live view with a map
GET /api/v1/orgs/{org_slug}/tracking/pages This organization's pages by views, from startdate to enddate
GET /api/v1/orgs/{org_slug}/tracking/script Org tracking script
GET /api/v1/orgs/{org_slug}/tracking/stats One row for each period between startdate and enddate, both inclusive
GET /api/v1/orgs/{org_slug}/tracking/today Org tracking today

GET /api/v1/orgs/{org_slug}/tracking/conversions

Name In Type Required
org_slug path string yes
start_date query string (date) yes
end_date query string (date) yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

The visitors on the organization's storefront right now

Section titled The visitors on the organization's storefront right now

GET /api/v1/orgs/{org_slug}/tracking/live

The visitors on the organization's storefront right now.

A visitor is live while any tab of their visit is open, visible or hidden, and for 5 minutes after their last tab stops reporting (it closed, or the browser suspended or discarded it). A visible tab reports every 30 seconds and a hidden tab about once a minute. A phone suspends a background tab soon after it is hidden, so its visitor drops off 5 minutes after that. The page must load the tracking script to be counted. Bots are left out, and a visitor with two live sessions counts once, by the latest. The answer is read from the stored sessions, so every API node gives the same one.

total_active, authenticated_active and guest_active count the live visitors. sessions lists up to 100 of them, newest activity first, and active_pages lists the pages they are on, as {hostname, page, viewers} with the most viewed first. A session's current_page_title and user_email are not stored and answer null.

Name In Type Required
org_slug path string yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

The organization's visitors right now, for a live view with a map

Section titled The organization's visitors right now, for a live view with a map

GET /api/v1/orgs/{org_slug}/tracking/live-view

The organization's visitors right now, for a live view with a map.

A visitor is live while any tab of their visit is open, visible or hidden, and for minutes (5 unless set) after their last tab stops reporting (it closed, or the browser suspended or discarded it). A visible tab reports every 30 seconds and a hidden tab about once a minute. A phone suspends a background tab soon after it is hidden, so its visitor drops off once the window runs out. The page must load the tracking script to be counted. The answer is read from the stored sessions, so every API node gives the same one. A visitor with two live sessions counts once, by the latest. Bots are left out.

active counts every live visitor. visitors lists up to 10,000 of them, newest activity first, and totals counts those by country, city, page, source and device, the ten largest of each.

Each visitor has an opaque id (stable for its session), its current page and landing_page, pages seen, device, browser, os, source (its UTM source, else the referring site, else direct), channel ({key, label}: the marketing channel of that visit, such as Paid Search or Direct), medium, campaign, whether it is a signed-in customer, started_at, last_activity_at and location: country_code, region, city and latitude and longitude from the city database, to a tenth of a degree, or null where the address has none. No address, email or user id is answered.

Name In Type Required Description
org_slug path string yes
minutes query integer no How many minutes a visitor still counts as live after their last tab stops reporting (1–30, 5 unless set). Default: 5.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

This organization's pages by views, from startdate to enddate

Section titled This organization's pages by views, from startdate to enddate

GET /api/v1/orgs/{org_slug}/tracking/pages

This organization's pages by views, from start_date to end_date.

One row per hostname and path, most viewed first. Rows with the same views sort by hostname and then path, so no row shows on two pages. total counts every row in the window, and page and per_page echo the paging.

Name In Type Required Description
org_slug path string yes
start_date query string (date) yes
end_date query string (date) yes
page query integer no The page to answer, from 1. Default: 1.
per_page query integer no Rows on a page, at most 100. Default: 50.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

GET /api/v1/orgs/{org_slug}/tracking/script

Name In Type Required
org_slug path string yes
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

One row for each period between startdate and enddate, both inclusive

Section titled One row for each period between startdate and enddate, both inclusive

GET /api/v1/orgs/{org_slug}/tracking/stats

One row for each period between start_date and end_date, both inclusive.

granularity is hourly, daily (the default), weekly or monthly. The rows come from the aggregates, which cut days, weeks and months at midnight UTC, and only periods with visits have a row.

With tz, an IANA time zone name such as America/New_York, a day starts at that zone's midnight, daylight saving time included, so a day can last 23 or 25 hours. start_date and end_date are then dates in that zone, each row's period is one of them, and the answer adds timezone, the zone it used. UTC answers as no tz does. For any other zone the rows come from the visits themselves, which we keep for 90 days, so the zone needs granularity=daily and a start_date no more than 90 days back; the error names the earliest date. Weeks and months cannot be cut in a zone, and are a 422 that names tz. In a zone, conversion_count counts the visitors who became customers that day. A name this server does not know is also a 422 that names tz.

Example: GET /tracking/stats?start_date=2026-10-09&end_date=2026-10-09&tz=America/New_York counts a visit at 02:30 UTC on 10 October in 9 October.

Name In Type Required Description
org_slug path string yes
start_date query string (date) yes
end_date query string (date) yes
granularity query string no Default: daily.
tz query string or null no An IANA time zone name, for example America/New_York. Leave it out for UTC. A day then starts at that zone's midnight, daylight saving time included. The answer names the zone in timezone. Only granularity=daily takes a zone other than UTC, and start_date must fall in the last 90 days, because a day in a zone is counted from the visits themselves, which we keep that long. Either limit broken is a 422 that names tz.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.

GET /api/v1/orgs/{org_slug}/tracking/today

This organization's visits since the day began, with the visitors, page views and bounce rate.

The day begins at midnight UTC. With tz, an IANA time zone name such as America/New_York, it begins at that zone's midnight, daylight saving time included, and the answer adds timezone, the zone it used. A name this server does not know is a 422 that names tz.

Example: GET /tracking/today?tz=America/New_York at 02:30 UTC on 10 October counts since 04:00 UTC on 9 October, the start of New York's 9 October.

Name In Type Required Description
org_slug path string yes
tz query string or null no An IANA time zone name, for example America/New_York. Leave it out for UTC. A day then starts at that zone's midnight, daylight saving time included. The answer names the zone in timezone.
Status Meaning
200 Success.
422 The request is not valid. detail lists each problem.