REST API
Error tracking
The Errors report: distinct JavaScript error messages ranked by occurrence, a single error's detail, its chart, and its individual occurrences. Rows in the Events log carry an error_id — the same fingerprint id used here — so an error event links straight into this report.
An error is addressed by {error}, its deterministic fingerprint (a UUID derived from the site and the exact error message; the id field returned by the endpoints below). Fingerprint resolution is range-independent — a known fingerprint always resolves, even for a range with zero matching occurrences — but a fingerprint that has never belonged to the site returns 404 Not Found, so one team can never probe another's errors.
A site is addressed by {siteKey} (UUID or domain). All endpoints require Authorization: Bearer {token} and accept the shared range/from/to and filter query parameters described in Conventions.
List error names
GET /api/sites/{siteKey}/stats/errors
Distinct error messages ranked by occurrence count over the resolved range, with session counts. Scroll-paginated with the standard data/meta/links envelope — see Conventions.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
range |
string | No | Preset date range. |
from |
string | No | Custom range start, Y-m-d. |
to |
string | No | Custom range end, Y-m-d. |
per_page |
int | No | Page size, 1–100. Default 20. |
Filter dimensions are also accepted.
Response — each item in data:
| Field | Type | Description |
|---|---|---|
id |
string (uuid) | Deterministic fingerprint for this error message. Use with the endpoints below. |
message |
string | The error message. |
error_name |
string | The error's name/type (e.g. TypeError); Error when none was captured. |
occurrences |
int | Total occurrences in range. |
sessions |
int | Unique sessions that hit this error. |
Status: 200 OK.
curl "https://clickbase.so/api/sites/example.com/stats/errors?range=last_7_days" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch('https://clickbase.so/api/sites/example.com/stats/errors?range=last_7_days', {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
requests.get(
'https://clickbase.so/api/sites/example.com/stats/errors',
params={'range': 'last_7_days'},
headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'},
)
Get an error
GET /api/sites/{siteKey}/stats/errors/{error}
A single error group's summary over the resolved range/filters.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
error |
string (uuid) | Yes | Error fingerprint. A malformed, foreign, or unknown fingerprint returns 404. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
range |
string | No | Preset date range. |
from |
string | No | Custom range start, Y-m-d. |
to |
string | No | Custom range end, Y-m-d. |
Filter dimensions are also accepted. A recognized fingerprint outside the requested range/filters still returns 200 OK with occurrences/sessions at 0, not 404 — only an unknown fingerprint 404s.
Response — flat object:
| Field | Type | Description |
|---|---|---|
id |
string (uuid) | The requested fingerprint, echoed back. |
message |
string | The error message. |
error_name |
string | The error's name/type; Error when none was captured. |
occurrences |
int | Occurrences within the resolved range/filters. |
sessions |
int | Unique sessions that hit this error within the resolved range/filters. |
Status: 200 OK (404 for an unknown fingerprint).
curl "https://clickbase.so/api/sites/example.com/stats/errors/{error}?range=last_7_days" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch(`https://clickbase.so/api/sites/example.com/stats/errors/${error}?range=last_7_days`, {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
requests.get(
f'https://clickbase.so/api/sites/example.com/stats/errors/{error}',
params={'range': 'last_7_days'},
headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'},
)
Error timeseries
GET /api/sites/{siteKey}/stats/errors/{error}/timeseries
Per-bucket occurrence counts for one error — the "Errors over time" chart on the error's detail page.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
error |
string (uuid) | Yes | Error fingerprint. An unknown fingerprint returns 404. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
range |
string | No | Preset date range. |
from |
string | No | Custom range start, Y-m-d. |
to |
string | No | Custom range end, Y-m-d. |
Filter dimensions are also accepted.
Response — flat object:
| Field | Type | Description |
|---|---|---|
labels |
string[] (ISO 8601) | Bucket start timestamps. |
types |
string[] | Always ["error"]. |
series |
object | { "error": int[] } — occurrence counts, index-aligned with labels. |
group |
string | Resolved bucket size: hour, day, week, or month. |
Status: 200 OK (404 for an unknown fingerprint).
curl "https://clickbase.so/api/sites/example.com/stats/errors/{error}/timeseries?range=last_7_days" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch(`https://clickbase.so/api/sites/example.com/stats/errors/${error}/timeseries?range=last_7_days`, {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
requests.get(
f'https://clickbase.so/api/sites/example.com/stats/errors/{error}/timeseries',
params={'range': 'last_7_days'},
headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'},
)
List error events
GET /api/sites/{siteKey}/stats/errors/{error}/events
Individual occurrences of one error, newest first, with the full stack detail. Scroll-paginated with the standard data/meta/links envelope.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
error |
string (uuid) | Yes | Error fingerprint. An unknown fingerprint returns 404. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
range |
string | No | Preset date range. |
from |
string | No | Custom range start, Y-m-d. |
to |
string | No | Custom range end, Y-m-d. |
per_page |
int | No | Page size, 1–100. Default 20. |
Filter dimensions are also accepted.
Response — each item in data:
| Field | Type | Description |
|---|---|---|
event_name |
string | The error's name/type; Error when none was captured. |
timestamp |
string (ISO 8601) | When the error was recorded. |
path |
string | Page path. |
url |
string | Full page URL. |
title |
string | Page title. |
hostname |
string | Page hostname. |
user_id |
string | Identified user id; empty for an anonymous visitor. |
visitor_id |
string (uuid) | Anonymous visitor id. |
display_name |
string | Generated display nickname for the visitor/user. |
avatar_url |
string | Generated avatar URL for the visitor/user. |
country |
string | Visitor's country. |
device |
string | Device type. |
browser |
string | Browser name. |
os |
string | Operating system. |
message |
string | The error message. |
stack |
string | Captured stack trace. |
file_name |
string | Source file the error was thrown from. |
line_number |
string | Source line number. |
column_number |
string | Source column number. |
Status: 200 OK (404 for an unknown fingerprint).
curl "https://clickbase.so/api/sites/example.com/stats/errors/{error}/events?range=last_7_days" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch(`https://clickbase.so/api/sites/example.com/stats/errors/${error}/events?range=last_7_days`, {
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
});
requests.get(
f'https://clickbase.so/api/sites/example.com/stats/errors/{error}/events',
params={'range': 'last_7_days'},
headers={'Authorization': f'Bearer {token}', 'Accept': 'application/json'},
)