Realtime endpoints use GET and bearer auth: GET https://data.goodmetrics.io/{gmID}/events/realtime/{resource}.
Bearer-token realtime requests use the current live window automatically and do not require query parameters.
curl "https://data.goodmetrics.io/{gmID}/events/realtime/visitors" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/realtime/visitors`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/realtime/visitors", headers={"Authorization": f"Bearer {api_key}"},)
with urllib.request.urlopen(request) as response: print(json.load(response))import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
class GoodMetricsExample { public static void main(String[] args) throws Exception { var gmID = "{gmID}"; var apiKey = "YOUR_API_KEY"; var url = "https://data.goodmetrics.io/" + gmID + "/events/realtime/visitors";
var request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Authorization", "Bearer " + apiKey) .GET() .build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); }}using System;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var url = $"https://data.goodmetrics.io/{gmID}/events/realtime/visitors";
using var client = new HttpClient();using var request = new HttpRequestMessage(HttpMethod.Get, url);request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
using var response = await client.SendAsync(request);Console.WriteLine(await response.Content.ReadAsStringAsync());<?php$gmID = "{gmID}";$apiKey = "YOUR_API_KEY";$url = "https://data.goodmetrics.io/{$gmID}/events/realtime/visitors";
$context = stream_context_create([ "http" => [ "method" => "GET", "header" => "Authorization: Bearer {$apiKey}\r\n", ],]);
$response = file_get_contents($url, false, $context);echo $response;package main
import ( "fmt" "io" "net/http")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/realtime/visitors", nil, ) request.Header.Set("Authorization", "Bearer "+apiKey)
response, _ := http.DefaultClient.Do(request) defer response.Body.Close()
body, _ := io.ReadAll(response.Body) fmt.Println(string(body))}Endpoints
Section titled “Endpoints”| Endpoint | Description |
|---|---|
GET /{gmID}/events/realtime/visitors | Active visitors in the current realtime window. |
GET /{gmID}/events/realtime/visitors-per-minute | Visitor counts grouped by minute. |
GET /{gmID}/events/realtime/pages | Top active pages. |
GET /{gmID}/events/realtime/referrers | Top active referrers. |
GET /{gmID}/events/realtime/events | Recent custom events. |
GET /{gmID}/events/realtime/locations | Active visitor locations. |
GET /{gmID}/events/realtime/browsers | Active browser breakdown. |
GET /{gmID}/events/realtime/device-types | Active device type breakdown. |
Response
Section titled “Response”Realtime responses include a meta.start, meta.end, and endpoint-specific rows in data.
{ "meta": { "start": 1772476740000, "end": 1772476800000 }, "data": [ { "activeSessions": 14 } ]}