API reference
Analytics
Pull executions, key-page funnels, geography and A/B results into your own panel or reports.
On this page
Every analytics endpoint is read-only and needs analytics:read. from, to and date are ISO-8601 timestamps in UTC, e.g. 2026-09-01T00:00:00.000Z. For a stats widget, pair analytics:read with services:read so it can resolve service names.
Get an overview
Everything the dashboard's analytics page shows: totals, executors, countries and referrers, per-service, per-provider and per-revenue performance, and a time series — for the last range days.
Query parameters
rangestringTime range in days for analytics data. Options: 7, 14, 30, 90, 365 — capped by the plan (403 LIMIT_EXCEEDED
analytics_range).One of7143090365Default"30"
Response fieldsinside data
totalsobjectShowHide 8 child attributes
total_keysnumberTotal number of keys
total_generated_keysnumberTotal generated keys
total_used_keysnumberTotal used keys
expired_keysnumberTotal expired keys
total_flowsnumberTotal flow starts
active_revenuesnumberCurrently active revenues
total_script_executionsnumberTotal script executions
total_active_scriptsnumberTotal active scripts
byExecutorarray of objectsShowHide 3 child attributes
datestringDate bucket label
executorstringExecutor name
countnumberExecution count
byCountryarray of objectsShowHide 2 child attributes
countrystringCountry code or name
countnumberFlow count for the country
byReferrerarray of objectsShowHide 2 child attributes
referrerstringTraffic referrer
countnumberFlow count for the referrer
byServicearray of objectsShowHide 4 child attributes
service_idinteger> 0Service UUID
service_namestringService display name
flow_startsnumberNumber of flow starts
checkpoints_passednumberNumber of checkpoints passed
byProviderarray of objectsShowHide 4 child attributes
provider_idinteger> 0Provider UUID
provider_namestringProvider display name
flow_startsnumberNumber of flow starts
checkpoints_passednumberNumber of checkpoints passed
byRevenuearray of objectsShowHide 3 child attributes
revenue_idinteger> 0Revenue UUID
revenue_namestringRevenue display name
checkpoints_passednumberNumber of checkpoints passed
timeSeriesarray of objectsShowHide 7 child attributes
datestringDate bucket label
clicksnumberNumber of clicks
checkpointsnumberNumber of checkpoints completed
keysnumberLegacy key count field
keys_generatednumberNumber of keys generated
keys_usednumberNumber of keys used
script_executionsnumberNumber of script executions
lockedarray of stringsBreakdowns withheld by the plan (basic analytics); they come back as empty arrays.
One ofbyExecutorbyCountrybyReferrerbyServicebyProviderbyRevenuemaxRangeDaysintegerLongest range the plan allows.
_cachedbooleanWhether the response was served from cache
_generatedAtdatetimeTimestamp when the analytics payload was generated
curl "https://api.santiauth.com/api/analytics/stats?range=30" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": {
"totals": {
"total_keys": 2500,
"total_generated_keys": 2400,
"total_used_keys": 1820,
"expired_keys": 115,
"total_flows": 6400,
"active_revenues": 8,
"total_script_executions": 0,
"total_active_scripts": 0
},
"byExecutor": [
{
"date": "2026-04-30",
"executor": "cloudflare-turnstile",
"count": 120
}
],
"byCountry": [
{
"country": "US",
"count": 840
}
],
"byReferrer": [
{
"referrer": "discord.gg",
"count": 220
}
],
"byService": [
{
"service_id": "660e8400-e29b-41d4-a716-446655440001",
"service_name": "Premium Access",
"flow_starts": 510,
"checkpoints_passed": 301
}
],
"byProvider": [
{
"provider_id": "770e8400-e29b-41d4-a716-446655440002",
"provider_name": "Discord Verification",
"flow_starts": 410,
"checkpoints_passed": 245
}
],
"byRevenue": [
{
"revenue_id": "880e8400-e29b-41d4-a716-446655440003",
"revenue_name": "Discord OAuth",
"checkpoints_passed": 188
}
],
"timeSeries": [
{
"date": "2026-04-30",
"clicks": 342,
"checkpoints": 198,
"keys": 0,
"keys_generated": 75,
"keys_used": 56,
"script_executions": 0
}
],
"_cached": false,
"_generatedAt": "2026-04-30T15:38:25.123Z"
}
}Get a time series
The same metrics over a custom window, bucketed by granularity. Optionally narrowed to one provider.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
provider_idinteger> 0Optional provider UUID to filter time-series analytics
fromstringrequiredStart of the analytics range in ISO-8601 format
tostringrequiredEnd of the analytics range in ISO-8601 format
granularitystringAggregation granularity for the time-series data
One ofhourlydailyDefault"daily"
Response fieldsinside data
periodstringTime bucket identifier
flowStartsnumberNumber of flow starts
flowCompletionsnumberNumber of flow completions
keysGeneratednumberNumber of keys generated
keysUsednumberNumber of keys used
curl "https://api.santiauth.com/api/analytics/time-series?service_id=1&from=2026-04-01T00%3A00%3A00.000Z&to=2026-04-30T23%3A59%3A59.999Z" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"period": "2026-04-30",
"flowStarts": 120,
"flowCompletions": 84,
"keysGenerated": 33,
"keysUsed": 21
}
]
}Get a checkpoint funnel
How many players reached and completed each checkpoint of a provider on one day — find the step where they drop off.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
provider_idintegerrequired> 0Provider UUID to retrieve conversion funnel data for
datestringrequiredTarget date in ISO-8601 format used to compute funnel metrics
Response fieldsinside data
stepIndexnumberFunnel step order index
stepNamestringFunnel step name
enterednumberUsers entering the step
completednumberUsers completing the step
droppednumberUsers dropping at the step
conversionRatenumberStep conversion rate percentage
curl "https://api.santiauth.com/api/analytics/funnel?service_id=1&provider_id=550e8400-e29b-41d4-a716-446655440000&date=2026-04-30T00%3A00%3A00.000Z" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"stepIndex": 1,
"stepName": "Discord verification",
"entered": 200,
"completed": 160,
"dropped": 40,
"conversionRate": 80
}
]
}Get geography
Key-page performance by country, for maps and regional reports.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
fromstringrequiredStart of the geo analytics range in ISO-8601 format
tostringrequiredEnd of the geo analytics range in ISO-8601 format
Response fieldsinside data
countrystringCountry code or name
flowStartsnumberNumber of flow starts
flowCompletionsnumberNumber of flow completions
curl "https://api.santiauth.com/api/analytics/geo?service_id=1&from=2026-04-01T00%3A00%3A00.000Z&to=2026-04-30T23%3A59%3A59.999Z" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"country": "US",
"flowStarts": 150,
"flowCompletions": 90
}
]
}Compare A/B variants
Totals per variant of a named experiment over a date range, side by side.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
experiment_namestringrequiredExperiment name to compare A/B variant performance for
fromstringrequiredStart of the A/B comparison range in ISO-8601 format
tostringrequiredEnd of the A/B comparison range in ISO-8601 format
Response fieldsinside data
variantstringExperiment variant name
flowStartsnumberNumber of flow starts
flowCompletionsnumberNumber of flow completions
keysGeneratednumberNumber of keys generated
conversionRatenumberVariant conversion rate percentage
curl "https://api.santiauth.com/api/analytics/ab-comparison?service_id=1&experiment_name=landing-page-copy-test&from=2026-04-01T00%3A00%3A00.000Z&to=2026-04-30T23%3A59%3A59.999Z" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"variant": "variant-a",
"flowStarts": 300,
"flowCompletions": 180,
"keysGenerated": 72,
"conversionRate": 60
}
]
}