Analytics Queries
The Query API lets you fetch analytics data for your websites with flexible date ranges, filters, and aggregations.
Endpoints
List Websites
Get all websites you have access to:
GET /v1/query/websitesResponse:
{
"success": true,
"websites": [
{
"id": "web_123",
"name": "My Website",
"domain": "example.com",
"isPublic": false,
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"total": 1
}Get Query Types
Discover available query types and their configurations. This endpoint is public and doesn't require authentication.
GET /v1/query/types?include_meta=trueSet include_meta=true to get descriptions, output fields, and visualization hints.
Response:
{
"success": true,
"types": ["summary", "pages", "traffic", "browser_name", "..."],
"configs": {
"summary": {
"allowedFilters": ["country", "device_type", "browser_name"],
"customizable": true,
"defaultLimit": 100,
"meta": {
"description": "Overall website metrics and KPIs",
"outputFields": ["pageviews", "visitors", "sessions", "..."]
}
}
}
}Execute Query
Query analytics data with full parameter control:
POST /v1/query?website_id={id}Query Parameters:
*One of website_id, link_id, or schedule_id is required.
Request Body:
{
"parameters": ["summary", "pages", "browser_name"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 100,
"page": 1,
"filters": [
{
"field": "country",
"op": "in",
"value": ["US", "CA"]
}
],
"granularity": "daily"
}Request Body Fields:
Date Presets
Instead of specifying startDate and endDate, use a preset for common date ranges:
Example with preset:
{
"parameters": ["summary", "pages"],
"preset": "last_30d",
"limit": 10
}Parameters with Custom Date Ranges
Each parameter can have its own date range:
{
"parameters": [
"summary",
{
"name": "pages",
"start_date": "2024-01-01",
"end_date": "2024-01-15",
"id": "pages-first-half"
}
],
"startDate": "2024-01-01",
"endDate": "2024-01-31"
}Response Format
{
"success": true,
"queryId": "my-query-123",
"data": [
{
"parameter": "summary",
"success": true,
"data": [
{
"date": "2024-01-01",
"pageviews": 1250,
"visitors": 890,
"sessions": 1100
}
]
},
{
"parameter": "pages",
"success": true,
"data": [
{
"path": "/",
"pageviews": 450,
"visitors": 320
}
]
}
],
"meta": {
"parameters": ["summary", "pages"],
"total_parameters": 2,
"page": 1,
"limit": 100,
"filters_applied": 2
}
}Batch Queries
Execute multiple queries in a single request by sending an array:
[
{
"id": "query-1",
"parameters": ["summary", "pages"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 100
},
{
"id": "query-2",
"parameters": ["browser_name", "os_name"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 50
}
]Batch Response:
{
"success": true,
"batch": true,
"results": [
{
"queryId": "query-1",
"data": [...],
"meta": {...}
},
{
"queryId": "query-2",
"data": [...],
"meta": {...}
}
]
}Filter Operations
Common Filter Fields
Granularity
Control time-based aggregation:
{
"parameters": ["summary"],
"startDate": "2024-01-01",
"endDate": "2024-01-07",
"granularity": "hourly"
}Pagination
Use page and limit for large result sets:
{
"parameters": ["pages"],
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 50,
"page": 2
}Page numbering starts at 1.
How is this guide?