Custom Insights Query
Beta: run an Insights query that you describe in the request body, without a saved report.
curl --request POST \
--url https://{regionAndDomain}.com/api/query/insights/query \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"metrics": [
{
"measurement": {
"type": "count",
"interval_aggregation": "standard"
},
"type": "event",
"events": [
{
"name": "<string>",
"event_type": "event",
"filters": [],
"filters_logical_operator": "AND"
}
],
"display_name": "<string>",
"group_key": "User"
}
],
"time": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": [
"<string>"
],
"list_item": {
"key_path": [
"<string>"
]
}
},
"values": [
"<string>"
],
"keep_only_matching": false
}
],
"breakdowns": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": [
"<string>"
],
"list_item": {
"key_path": [
"<string>"
]
}
},
"numeric_buckets": {
"min": 123,
"max": 123,
"bucket_size": 123,
"intervals": [
123
]
},
"string_groups": [
{
"values": [
"<string>"
],
"match": "equals",
"name": "<string>"
}
]
}
],
"time_comparison": {
"offset": {
"value": 123
}
},
"lift_comparison": {}
}
'import requests
url = "https://{regionAndDomain}.com/api/query/insights/query"
payload = {
"metrics": [
{
"measurement": {
"type": "count",
"interval_aggregation": "standard"
},
"type": "event",
"events": [
{
"name": "<string>",
"event_type": "event",
"filters": [],
"filters_logical_operator": "AND"
}
],
"display_name": "<string>",
"group_key": "User"
}
],
"time": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": ["<string>"],
"list_item": { "key_path": ["<string>"] }
},
"values": ["<string>"],
"keep_only_matching": False
}
],
"breakdowns": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": ["<string>"],
"list_item": { "key_path": ["<string>"] }
},
"numeric_buckets": {
"min": 123,
"max": 123,
"bucket_size": 123,
"intervals": [123]
},
"string_groups": [
{
"values": ["<string>"],
"match": "equals",
"name": "<string>"
}
]
}
],
"time_comparison": { "offset": { "value": 123 } },
"lift_comparison": {}
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metrics: [
{
measurement: {type: 'count', interval_aggregation: 'standard'},
type: 'event',
events: [
{
name: '<string>',
event_type: 'event',
filters: [],
filters_logical_operator: 'AND'
}
],
display_name: '<string>',
group_key: 'User'
}
],
time: {start: '<string>', end: '<string>'},
filters: [
{
type: 'property',
property: {
source: 'event',
name: '<string>',
path: ['<string>'],
list_item: {key_path: ['<string>']}
},
values: ['<string>'],
keep_only_matching: false
}
],
breakdowns: [
{
type: 'property',
property: {
source: 'event',
name: '<string>',
path: ['<string>'],
list_item: {key_path: ['<string>']}
},
numeric_buckets: {min: 123, max: 123, bucket_size: 123, intervals: [123]},
string_groups: [{values: ['<string>'], match: 'equals', name: '<string>'}]
}
],
time_comparison: {offset: {value: 123}},
lift_comparison: {}
})
};
fetch('https://{regionAndDomain}.com/api/query/insights/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{regionAndDomain}.com/api/query/insights/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metrics' => [
[
'measurement' => [
'type' => 'count',
'interval_aggregation' => 'standard'
],
'type' => 'event',
'events' => [
[
'name' => '<string>',
'event_type' => 'event',
'filters' => [
],
'filters_logical_operator' => 'AND'
]
],
'display_name' => '<string>',
'group_key' => 'User'
]
],
'time' => [
'start' => '<string>',
'end' => '<string>'
],
'filters' => [
[
'type' => 'property',
'property' => [
'source' => 'event',
'name' => '<string>',
'path' => [
'<string>'
],
'list_item' => [
'key_path' => [
'<string>'
]
]
],
'values' => [
'<string>'
],
'keep_only_matching' => false
]
],
'breakdowns' => [
[
'type' => 'property',
'property' => [
'source' => 'event',
'name' => '<string>',
'path' => [
'<string>'
],
'list_item' => [
'key_path' => [
'<string>'
]
]
],
'numeric_buckets' => [
'min' => 123,
'max' => 123,
'bucket_size' => 123,
'intervals' => [
123
]
],
'string_groups' => [
[
'values' => [
'<string>'
],
'match' => 'equals',
'name' => '<string>'
]
]
]
],
'time_comparison' => [
'offset' => [
'value' => 123
]
],
'lift_comparison' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{regionAndDomain}.com/api/query/insights/query"
payload := strings.NewReader("{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{regionAndDomain}.com/api/query/insights/query")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{regionAndDomain}.com/api/query/insights/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}"
response = http.request(request)
puts response.read_bodyAPI server URL
Send requests to the server URL for your project’s data residency:| Server | URL |
|---|---|
| Standard server | https://mixpanel.com/api/query/insights/query |
| EU Residency server | https://eu.mixpanel.com/api/query/insights/query |
| India Residency server | https://in.mixpanel.com/api/query/insights/query |
Authentication
Authenticate with a service account, sending its username and secret with HTTP basic authentication. Pass these query parameters:project_id: the ID of the project to query. Required.workspace_id: the ID of the data view to query. Include it if your project uses data views.
Version
Set theMixpanel-Version header to the API version your request is written for. A version is a release date, YYYY-MM-DD. A version that isn’t released yet adds a preview channel: YYYY-MM-DD.alpha or YYYY-MM-DD.beta.
During the beta, the only version is 2026-10-23.beta.
If you omit the header, the request uses the latest released version. While no version is released, it uses the oldest beta version.
An unknown, malformed, or retired version returns 400 Bad Request. The error message names the latest version.
Response format
TheAccept header selects the response format:
Accept | Response |
|---|---|
Omitted, application/json, application/*, or */* | JSON |
text/csv | CSV (Content-Type: text/csv) |
Request body
A request body has two required fields and four optional ones:| Field | What it holds |
|---|---|
metrics required | Up to 40 metrics to calculate: event, funnel, retention, cohort, or formula metrics. |
time required | The time range, and optionally the unit that splits it into a time series. |
filters optional | Up to 10 filters that apply to every metric. |
breakdowns optional | Up to three breakdowns by property value or cohort membership. |
time_comparison optional | An earlier period to run the same query over. |
lift_comparison optional | Reports each result as a change against a baseline. |
Example request
This request countsSign Up events per day over the last 30 days:
curl --request POST \
--url 'https://mixpanel.com/api/query/insights/query?project_id=YOUR_PROJECT_ID' \
--user 'YOUR_SERVICE_ACCOUNT_USERNAME:YOUR_SERVICE_ACCOUNT_SECRET' \
--header 'Content-Type: application/json' \
--header 'Mixpanel-Version: 2026-10-23.beta' \
--data '{
"metrics": [
{
"type": "event",
"events": [{"event_type": "event", "name": "Sign Up"}],
"measurement": {"type": "count", "calculation": "total_events"}
}
],
"time": {
"start": {"unit": "day", "value": 30, "align_to_whole_unit": true},
"unit": "day"
}
}'
Limits
A request can have up to 40 metrics, three breakdowns, and 10 filters.OpenAPI spec
The reference below is generated from an OpenAPI 3.1 spec, which you can download to generate a client or to give to an AI tool: insights.openapi.json.Authorizations
Service Account
Headers
The API version, as a release date (YYYY-MM-DD), optionally followed by a preview channel (.alpha or .beta). Omitted, the latest released version is used.
^\d{4}-\d{2}-\d{2}(?:\.(?:alpha|beta))?$Query Parameters
The ID of the project to query.
The ID of the workspace, if applicable.
Body
An Insights query: metrics calculated over a time range, with optional filters, breakdowns, and comparisons.
1 - 40 elements- EventMetric
- FunnelMetric
- RetentionMetric
- CohortMetric
- FormulaMetric
Show child attributes
Show child attributes
Show child attributes
Show child attributes
10Set type to property to filter on a property value, or cohort to filter on cohort membership.
- PropertyFilter
- CohortFilter
Show child attributes
Show child attributes
3Groups results by a property's values.
The optional bucketing follows the property's type: datetime_unit for
datetime, numeric_buckets for number, string_groups for string.
- PropertyBreakdown
- CohortBreakdown
Show child attributes
Show child attributes
An earlier window to run the same query over.
Show child attributes
Show child attributes
Reports each result as a change against a baseline rather than an absolute value.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://{regionAndDomain}.com/api/query/insights/query \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"metrics": [
{
"measurement": {
"type": "count",
"interval_aggregation": "standard"
},
"type": "event",
"events": [
{
"name": "<string>",
"event_type": "event",
"filters": [],
"filters_logical_operator": "AND"
}
],
"display_name": "<string>",
"group_key": "User"
}
],
"time": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": [
"<string>"
],
"list_item": {
"key_path": [
"<string>"
]
}
},
"values": [
"<string>"
],
"keep_only_matching": false
}
],
"breakdowns": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": [
"<string>"
],
"list_item": {
"key_path": [
"<string>"
]
}
},
"numeric_buckets": {
"min": 123,
"max": 123,
"bucket_size": 123,
"intervals": [
123
]
},
"string_groups": [
{
"values": [
"<string>"
],
"match": "equals",
"name": "<string>"
}
]
}
],
"time_comparison": {
"offset": {
"value": 123
}
},
"lift_comparison": {}
}
'import requests
url = "https://{regionAndDomain}.com/api/query/insights/query"
payload = {
"metrics": [
{
"measurement": {
"type": "count",
"interval_aggregation": "standard"
},
"type": "event",
"events": [
{
"name": "<string>",
"event_type": "event",
"filters": [],
"filters_logical_operator": "AND"
}
],
"display_name": "<string>",
"group_key": "User"
}
],
"time": {
"start": "<string>",
"end": "<string>"
},
"filters": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": ["<string>"],
"list_item": { "key_path": ["<string>"] }
},
"values": ["<string>"],
"keep_only_matching": False
}
],
"breakdowns": [
{
"type": "property",
"property": {
"source": "event",
"name": "<string>",
"path": ["<string>"],
"list_item": { "key_path": ["<string>"] }
},
"numeric_buckets": {
"min": 123,
"max": 123,
"bucket_size": 123,
"intervals": [123]
},
"string_groups": [
{
"values": ["<string>"],
"match": "equals",
"name": "<string>"
}
]
}
],
"time_comparison": { "offset": { "value": 123 } },
"lift_comparison": {}
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metrics: [
{
measurement: {type: 'count', interval_aggregation: 'standard'},
type: 'event',
events: [
{
name: '<string>',
event_type: 'event',
filters: [],
filters_logical_operator: 'AND'
}
],
display_name: '<string>',
group_key: 'User'
}
],
time: {start: '<string>', end: '<string>'},
filters: [
{
type: 'property',
property: {
source: 'event',
name: '<string>',
path: ['<string>'],
list_item: {key_path: ['<string>']}
},
values: ['<string>'],
keep_only_matching: false
}
],
breakdowns: [
{
type: 'property',
property: {
source: 'event',
name: '<string>',
path: ['<string>'],
list_item: {key_path: ['<string>']}
},
numeric_buckets: {min: 123, max: 123, bucket_size: 123, intervals: [123]},
string_groups: [{values: ['<string>'], match: 'equals', name: '<string>'}]
}
],
time_comparison: {offset: {value: 123}},
lift_comparison: {}
})
};
fetch('https://{regionAndDomain}.com/api/query/insights/query', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{regionAndDomain}.com/api/query/insights/query",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'metrics' => [
[
'measurement' => [
'type' => 'count',
'interval_aggregation' => 'standard'
],
'type' => 'event',
'events' => [
[
'name' => '<string>',
'event_type' => 'event',
'filters' => [
],
'filters_logical_operator' => 'AND'
]
],
'display_name' => '<string>',
'group_key' => 'User'
]
],
'time' => [
'start' => '<string>',
'end' => '<string>'
],
'filters' => [
[
'type' => 'property',
'property' => [
'source' => 'event',
'name' => '<string>',
'path' => [
'<string>'
],
'list_item' => [
'key_path' => [
'<string>'
]
]
],
'values' => [
'<string>'
],
'keep_only_matching' => false
]
],
'breakdowns' => [
[
'type' => 'property',
'property' => [
'source' => 'event',
'name' => '<string>',
'path' => [
'<string>'
],
'list_item' => [
'key_path' => [
'<string>'
]
]
],
'numeric_buckets' => [
'min' => 123,
'max' => 123,
'bucket_size' => 123,
'intervals' => [
123
]
],
'string_groups' => [
[
'values' => [
'<string>'
],
'match' => 'equals',
'name' => '<string>'
]
]
]
],
'time_comparison' => [
'offset' => [
'value' => 123
]
],
'lift_comparison' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{regionAndDomain}.com/api/query/insights/query"
payload := strings.NewReader("{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{regionAndDomain}.com/api/query/insights/query")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{regionAndDomain}.com/api/query/insights/query")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metrics\": [\n {\n \"measurement\": {\n \"type\": \"count\",\n \"interval_aggregation\": \"standard\"\n },\n \"type\": \"event\",\n \"events\": [\n {\n \"name\": \"<string>\",\n \"event_type\": \"event\",\n \"filters\": [],\n \"filters_logical_operator\": \"AND\"\n }\n ],\n \"display_name\": \"<string>\",\n \"group_key\": \"User\"\n }\n ],\n \"time\": {\n \"start\": \"<string>\",\n \"end\": \"<string>\"\n },\n \"filters\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"values\": [\n \"<string>\"\n ],\n \"keep_only_matching\": false\n }\n ],\n \"breakdowns\": [\n {\n \"type\": \"property\",\n \"property\": {\n \"source\": \"event\",\n \"name\": \"<string>\",\n \"path\": [\n \"<string>\"\n ],\n \"list_item\": {\n \"key_path\": [\n \"<string>\"\n ]\n }\n },\n \"numeric_buckets\": {\n \"min\": 123,\n \"max\": 123,\n \"bucket_size\": 123,\n \"intervals\": [\n 123\n ]\n },\n \"string_groups\": [\n {\n \"values\": [\n \"<string>\"\n ],\n \"match\": \"equals\",\n \"name\": \"<string>\"\n }\n ]\n }\n ],\n \"time_comparison\": {\n \"offset\": {\n \"value\": 123\n }\n },\n \"lift_comparison\": {}\n}"
response = http.request(request)
puts response.read_body