API Reference
Custom Queries
The Custom Query API lets you build queries with custom aggregations, filters, and groupings when the standard query types don't meet your needs.
Endpoint
POST /v1/query/custom?website_id={id}Request Format
{
"query": {
"table": "events",
"selects": [
{
"field": "path",
"aggregate": "count",
"alias": "pageviews"
},
{
"field": "anonymous_id",
"aggregate": "uniq",
"alias": "unique_visitors"
}
],
"filters": [
{
"field": "country",
"operator": "eq",
"value": "US"
}
],
"groupBy": ["path"]
},
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"timezone": "America/New_York",
"limit": 100
}Request Fields
Root Fields
Query Object
Select Object
Aggregate Functions
Filter Operators
Available Tables
Example Queries
Top Pages by Unique Visitors
{
"query": {
"table": "events",
"selects": [
{"field": "path", "aggregate": "count", "alias": "views"},
{"field": "anonymous_id", "aggregate": "uniq", "alias": "visitors"}
],
"groupBy": ["path"]
},
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 20
}Average Session Duration by Country
{
"query": {
"table": "sessions",
"selects": [
{"field": "duration", "aggregate": "avg", "alias": "avg_duration"},
{"field": "*", "aggregate": "count", "alias": "session_count"}
],
"groupBy": ["country"]
},
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"limit": 50
}Error Count by Browser
{
"query": {
"table": "errors",
"selects": [
{"field": "*", "aggregate": "count", "alias": "error_count"},
{"field": "message", "aggregate": "uniq", "alias": "unique_errors"}
],
"filters": [
{"field": "level", "operator": "eq", "value": "error"}
],
"groupBy": ["browser_name"]
},
"startDate": "2024-01-01",
"endDate": "2024-01-31"
}Response Format
{
"success": true,
"data": [
{
"path": "/",
"views": 1250,
"visitors": 890
},
{
"path": "/pricing",
"views": 450,
"visitors": 380
}
],
"meta": {
"rowCount": 2,
"executionTime": 45
}
}Validation Errors
Custom queries are validated against the schema. Common errors:
{
"success": false,
"error": "Invalid column \"invalid_field\" for table \"events\""
}Rate Limits
Custom queries have stricter rate limits due to their computational cost:
Use standard query types when possible for better performance and higher rate limits.
How is this guide?