Organization API: Analytics
Live and historical tracking stats for the organization.
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.
Operations
Section titled Operations| 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 |
Org tracking conversions
Section titled Org tracking conversionsGET /api/v1/orgs/{org_slug}/tracking/conversions
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
org_slug |
path | string | yes |
start_date |
query | string (date) | yes |
end_date |
query | string (date) | yes |
Responses
Section titled Responses| 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 nowGET /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.
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
org_slug |
path | string | yes |
Responses
Section titled Responses| 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 mapGET /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.
Parameters
Section titled Parameters| 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. |
Responses
Section titled Responses| 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 enddateGET /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.
Parameters
Section titled Parameters| 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. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Org tracking script
Section titled Org tracking scriptGET /api/v1/orgs/{org_slug}/tracking/script
Parameters
Section titled Parameters| Name | In | Type | Required |
|---|---|---|---|
org_slug |
path | string | yes |
Responses
Section titled Responses| 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 inclusiveGET /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.
Parameters
Section titled Parameters| 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. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |
Org tracking today
Section titled Org tracking todayGET /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.
Parameters
Section titled Parameters| 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. |
Responses
Section titled Responses| Status | Meaning |
|---|---|
200 |
Success. |
422 |
The request is not valid. detail lists each problem. |