curl --request GET \
--url https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics', 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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics",
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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics"
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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics")
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{
"series": [
{
"bucket": "2023-11-07T05:31:56Z",
"requests": 123,
"errors": 123,
"cpuP50Us": 123,
"cpuP99Us": 123
}
],
"totals": {
"requests": 123,
"errors": 123,
"errorRate": 123
},
"web": {
"series": [
{
"bucket": "2023-11-07T05:31:56Z",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"totals": {
"visitors": 123,
"pageViews": 123,
"bounces": 123,
"bounceRate": 123,
"viewsPerVisitor": 123,
"customEvents": 123
},
"activeVisitors": 123,
"breakdowns": {
"pages": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"hostnames": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"referrers": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"countries": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"devices": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"browsers": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"operatingSystems": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"events": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
]
},
"retentionDays": 90
},
"note": "<string>"
}Get
Web visitors, page views, bounce rate, custom events, live visitors, and top traffic dimensions, plus request, error, and CPU-time analytics. Collection starts only after the application initializes the browser SDK. Visitor identifiers are site-scoped and reset daily. SDK collection does not store IP addresses, cookies, query strings, fragments, or full referrer URLs. The window defaults to 24 hours.
curl --request GET \
--url https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics', 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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics",
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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics"
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://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.korve.dev/v1/orgs/{orgId}/projects/{projectId}/analytics")
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{
"series": [
{
"bucket": "2023-11-07T05:31:56Z",
"requests": 123,
"errors": 123,
"cpuP50Us": 123,
"cpuP99Us": 123
}
],
"totals": {
"requests": 123,
"errors": 123,
"errorRate": 123
},
"web": {
"series": [
{
"bucket": "2023-11-07T05:31:56Z",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"totals": {
"visitors": 123,
"pageViews": 123,
"bounces": 123,
"bounceRate": 123,
"viewsPerVisitor": 123,
"customEvents": 123
},
"activeVisitors": 123,
"breakdowns": {
"pages": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"hostnames": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"referrers": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"countries": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"devices": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"browsers": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"operatingSystems": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
],
"events": [
{
"value": "<string>",
"visitors": 123,
"pageViews": 123,
"customEvents": 123
}
]
},
"retentionDays": 90
},
"note": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The organization's id (UUID) or slug — either form is accepted.
The project's id (UUID) or slug — either form is accepted.
Query Parameters
Include traffic at or after this time (RFC 3339). Defaults to 24 hours before until.
Include traffic strictly before this time (RFC 3339). Defaults to now.
Bucket size: "hour" (default) or "day". Buckets are UTC.
hour, day Environment slug to scope this operation to. Defaults to "production". An environment that does not exist on the project answers 404. Analytics are per app: production answers for the project's app, custom environments for their own.
^[a-z][a-z0-9-]{0,38}$Only include rows whose path value exactly matches this value. Filters combine with AND.
1 - 1024Only include rows whose hostname value exactly matches this value. Filters combine with AND.
1 - 253Only include rows whose referrer value exactly matches this value. Filters combine with AND.
1 - 253Only include rows whose country value exactly matches this value. Filters combine with AND.
1 - 7^(?:[A-Z]{2}|Unknown)$Only include rows whose device value exactly matches this value. Filters combine with AND.
1 - 32Only include rows whose browser value exactly matches this value. Filters combine with AND.
1 - 64Only include rows whose os value exactly matches this value. Filters combine with AND.
1 - 64Only include rows whose event value exactly matches this value. Filters combine with AND.
1 - 64Maximum rows per breakdown panel. Defaults to 10; maximum 20.
1 <= x <= 20Response
Bucketed traffic series with window totals.
Ascending by bucket. Buckets the window saw no traffic for are omitted.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Cookie-free web engagement data. Daily site-scoped visitor identifiers are not linkable across days or sites. Metrics can be estimated at very high volume.
Show child attributes
Show child attributes
Present when there is context worth surfacing — for example the environment has no runtime yet.