curl --request GET \
--url https://panel.metricanic.com/api/v1/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://panel.metricanic.com/api/v1/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://panel.metricanic.com/api/v1/events', 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://panel.metricanic.com/api/v1/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://panel.metricanic.com/api/v1/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://panel.metricanic.com/api/v1/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"meta": {
"limit": 100,
"hasMore": false,
"nextCursor": null
},
"rows": [
{
"id": "0197f3a2-b4c5-7000-8000-000000000001",
"clickTime": 1751362800000,
"visitId": "0197f3a2-b4c5-7000-8000-00000000000a",
"externalId": "src-click-8842",
"campaignId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"trafficSourceId": "6f9d2b4e-8a1c-4d3e-9f5a-7b2c4d6e8f0a",
"rotatorId": "9b8c7d6e-5f4a-4b3c-8d1e-0f9a8b7c6d5e",
"rotatorPathId": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"type": "visit",
"eventTime": 1751362800000,
"deltaMs": 0,
"requestIp": "203.0.113.42",
"requestUa": "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36",
"requestReferer": "https://ads.example.com/feed",
"idx": null,
"payout": null,
"cost": null,
"value": null,
"affectsCost": null,
"affectsRevenue": null,
"postbackStatus": null,
"postbackBody": null,
"postbackError": null,
"postbackTry": null,
"postbackDuration": null,
"postbackUrl": null,
"postbackSuccess": null
},
{
"id": "0197f3a2-b4c5-7000-8000-000000000002",
"clickTime": 1751362800000,
"visitId": "0197f3a2-b4c5-7000-8000-00000000000a",
"externalId": "src-click-8842",
"campaignId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"trafficSourceId": "6f9d2b4e-8a1c-4d3e-9f5a-7b2c4d6e8f0a",
"rotatorId": "9b8c7d6e-5f4a-4b3c-8d1e-0f9a8b7c6d5e",
"rotatorPathId": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"type": "event",
"eventTime": 1751363115000,
"deltaMs": 315000,
"idx": 1,
"payout": 4.5,
"value": 4.5,
"affectsRevenue": true,
"requestIp": null,
"requestUa": null,
"requestReferer": null,
"cost": null,
"affectsCost": null,
"postbackStatus": null,
"postbackBody": null,
"postbackError": null,
"postbackTry": null,
"postbackDuration": null,
"postbackUrl": null,
"postbackSuccess": null
}
]
}
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}List events
Returns visits, landing page clicks, custom events and outgoing postback attempts from your workspace, newest first by occurrence time. For the next page, pass data.meta.nextCursor as cursor while hasMore is true, even after an empty page. Keep dates, filters and page size unchanged between pages.
curl --request GET \
--url https://panel.metricanic.com/api/v1/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://panel.metricanic.com/api/v1/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://panel.metricanic.com/api/v1/events', 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://panel.metricanic.com/api/v1/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://panel.metricanic.com/api/v1/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://panel.metricanic.com/api/v1/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://panel.metricanic.com/api/v1/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"ok": true,
"data": {
"meta": {
"limit": 100,
"hasMore": false,
"nextCursor": null
},
"rows": [
{
"id": "0197f3a2-b4c5-7000-8000-000000000001",
"clickTime": 1751362800000,
"visitId": "0197f3a2-b4c5-7000-8000-00000000000a",
"externalId": "src-click-8842",
"campaignId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"trafficSourceId": "6f9d2b4e-8a1c-4d3e-9f5a-7b2c4d6e8f0a",
"rotatorId": "9b8c7d6e-5f4a-4b3c-8d1e-0f9a8b7c6d5e",
"rotatorPathId": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"type": "visit",
"eventTime": 1751362800000,
"deltaMs": 0,
"requestIp": "203.0.113.42",
"requestUa": "Mozilla/5.0 (Linux; Android 14) AppleWebKit/537.36",
"requestReferer": "https://ads.example.com/feed",
"idx": null,
"payout": null,
"cost": null,
"value": null,
"affectsCost": null,
"affectsRevenue": null,
"postbackStatus": null,
"postbackBody": null,
"postbackError": null,
"postbackTry": null,
"postbackDuration": null,
"postbackUrl": null,
"postbackSuccess": null
},
{
"id": "0197f3a2-b4c5-7000-8000-000000000002",
"clickTime": 1751362800000,
"visitId": "0197f3a2-b4c5-7000-8000-00000000000a",
"externalId": "src-click-8842",
"campaignId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"trafficSourceId": "6f9d2b4e-8a1c-4d3e-9f5a-7b2c4d6e8f0a",
"rotatorId": "9b8c7d6e-5f4a-4b3c-8d1e-0f9a8b7c6d5e",
"rotatorPathId": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
"type": "event",
"eventTime": 1751363115000,
"deltaMs": 315000,
"idx": 1,
"payout": 4.5,
"value": 4.5,
"affectsRevenue": true,
"requestIp": null,
"requestUa": null,
"requestReferer": null,
"cost": null,
"affectsCost": null,
"postbackStatus": null,
"postbackBody": null,
"postbackError": null,
"postbackTry": null,
"postbackDuration": null,
"postbackUrl": null,
"postbackSuccess": null
}
]
}
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}{
"ok": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"requestId": "<string>"
}Authorizations
Workspace-scoped token sent in the Authorization header as Bearer . Access depends on the credential's allowed operations, read or write scope, and workspace subscription. Use an API key issued in the tracker for Public API v1. MCP uses separate OAuth credentials.
Query Parameters
Comma-separated campaign ids to filter by.
Comma-separated traffic source ids to filter by.
Comma-separated rotator ids to filter by.
Comma-separated rotator path ids to filter by.
Comma-separated request sender IP addresses to filter by.
Comma-separated request User-Agent values to filter by (exact match).
Comma-separated request referrer URLs to filter by (exact match).
Inclusive start as YYYY-MM-DD in timezone, or an ISO timestamp parsed directly. A date-only end includes the full calendar day.
Inclusive end as YYYY-MM-DD in timezone, or an ISO timestamp parsed directly. A date-only end includes the full calendar day.
IANA timezone with whole-hour UTC offsets, such as UTC or a timezone offered in the report interface. Defaults to UTC.
Page size. Values outside 1 through 1000 or nonnumeric values fall back to 1000.
1 <= x <= 1000Optional explicit value scroll for cursor pagination (default behavior).
scroll Continuation token from data.meta.nextCursor. Expired, malformed or query-mismatched cursors return 400.
Comma-separated event indices 1 through 10. Invalid entries are ignored if another valid index remains. A list without any valid indices returns 400. Visits and landing clicks have no event index and do not match this filter.
1 <= x <= 10Omit to include all record types. An unrecognized value also includes all types.
visit, lpclick, event, postback