These examples use https://data.goodmetrics.io, {gmID}, and YOUR_API_KEY.
Realtime visitors
Section titled “Realtime visitors”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))}Audience countries
Section titled “Audience countries”Request a paginated country breakdown for one date range.
curl "https://data.goodmetrics.io/{gmID}/events/audience/countries?start=1771872000&end=1772476799&page=1&limit=10&sort_by=uniqueVisitors&dir=desc" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "page": "1", "limit": "10", "sort_by": "uniqueVisitors", "dir": "desc"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/audience/countries?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "page": "1", "limit": "10", "sort_by": "uniqueVisitors", "dir": "desc"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/audience/countries?{params}", 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/audience/countries?start=1771872000&end=1772476799&page=1&limit=10&sort_by=uniqueVisitors&dir=desc";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["page"] = "1", ["limit"] = "10", ["sort_by"] = "uniqueVisitors", ["dir"] = "desc"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/audience/countries?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "page" => "1", "limit" => "10", "sort_by" => "uniqueVisitors", "dir" => "desc"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/audience/countries?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("page", "1") params.Set("limit", "10") params.Set("sort_by", "uniqueVisitors") params.Set("dir", "desc")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/audience/countries?"+params.Encode(), 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))}Filtered page request
Section titled “Filtered page request”Filter reports to pages containing /pricing.
curl "https://data.goodmetrics.io/{gmID}/events/pages/all-pages?start=1771872000&end=1772476799&page_contains=%2Fpricing&sort_by=pageViews&dir=desc" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "page_contains": "/pricing", "sort_by": "pageViews", "dir": "desc"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/pages/all-pages?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "page_contains": "/pricing", "sort_by": "pageViews", "dir": "desc"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/pages/all-pages?{params}", 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/pages/all-pages?start=1771872000&end=1772476799&page_contains=%2Fpricing&sort_by=pageViews&dir=desc";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["page_contains"] = "/pricing", ["sort_by"] = "pageViews", ["dir"] = "desc"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/pages/all-pages?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "page_contains" => "/pricing", "sort_by" => "pageViews", "dir" => "desc"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/pages/all-pages?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("page_contains", "/pricing") params.Set("sort_by", "pageViews") params.Set("dir", "desc")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/pages/all-pages?"+params.Encode(), 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))}Chart overview
Section titled “Chart overview”Request a daily unique visitor chart.
curl "https://data.goodmetrics.io/{gmID}/events/charts/overview?start=1771872000&end=1772476799&type=unique_visitors&interval=day" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "type": "unique_visitors", "interval": "day"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/charts/overview?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "type": "unique_visitors", "interval": "day"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/charts/overview?{params}", 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/charts/overview?start=1771872000&end=1772476799&type=unique_visitors&interval=day";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["type"] = "unique_visitors", ["interval"] = "day"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/charts/overview?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "type" => "unique_visitors", "interval" => "day"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/charts/overview?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("type", "unique_visitors") params.Set("interval", "day")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/charts/overview?"+params.Encode(), 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))}Custom event completions
Section titled “Custom event completions”Request top events for the signup event.
curl "https://data.goodmetrics.io/{gmID}/events/custom/top-events?start=1771872000&end=1772476799&event_type_is=signup&page=1&limit=10&sort_by=eventCompletions&dir=desc" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "event_type_is": "signup", "page": "1", "limit": "10", "sort_by": "eventCompletions", "dir": "desc"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/custom/top-events?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "event_type_is": "signup", "page": "1", "limit": "10", "sort_by": "eventCompletions", "dir": "desc"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/custom/top-events?{params}", 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/custom/top-events?start=1771872000&end=1772476799&event_type_is=signup&page=1&limit=10&sort_by=eventCompletions&dir=desc";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["event_type_is"] = "signup", ["page"] = "1", ["limit"] = "10", ["sort_by"] = "eventCompletions", ["dir"] = "desc"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/custom/top-events?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "event_type_is" => "signup", "page" => "1", "limit" => "10", "sort_by" => "eventCompletions", "dir" => "desc"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/custom/top-events?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("event_type_is", "signup") params.Set("page", "1") params.Set("limit", "10") params.Set("sort_by", "eventCompletions") params.Set("dir", "desc")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/custom/top-events?"+params.Encode(), 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))}Compare two ranges
Section titled “Compare two ranges”Add compare_start and compare_end to supported reporting requests.
curl "https://data.goodmetrics.io/{gmID}/events/audience/countries?start=1771872000&end=1772476799&compare_start=1771267200&compare_end=1771871999" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "compare_start": "1771267200", "compare_end": "1771871999"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/audience/countries?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "compare_start": "1771267200", "compare_end": "1771871999"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/audience/countries?{params}", 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/audience/countries?start=1771872000&end=1772476799&compare_start=1771267200&compare_end=1771871999";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["compare_start"] = "1771267200", ["compare_end"] = "1771871999"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/audience/countries?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "compare_start" => "1771267200", "compare_end" => "1771871999"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/audience/countries?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("compare_start", "1771267200") params.Set("compare_end", "1771871999")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/audience/countries?"+params.Encode(), 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))}Responses include data.primary, data.secondary, and data.change.
Continue with a cursor
Section titled “Continue with a cursor”Read meta.cursor from the first table response, then request another page.
curl "https://data.goodmetrics.io/{gmID}/events/audience/countries?start=1771872000&end=1772476799&page=2&limit=10&cursor=cursor-from-first-response" \ -H "Authorization: Bearer YOUR_API_KEY"const gmID = '{gmID}';const apiKey = 'YOUR_API_KEY';const params = new URLSearchParams({ "start": "1771872000", "end": "1772476799", "page": "2", "limit": "10", "cursor": "cursor-from-first-response"});
const response = await fetch(`https://data.goodmetrics.io/${gmID}/events/audience/countries?${params}`, { headers: { Authorization: `Bearer ${apiKey}` }});
console.log(await response.json());import jsonimport urllib.parseimport urllib.request
gm_id = "{gmID}"api_key = "YOUR_API_KEY"params = urllib.parse.urlencode({ "start": "1771872000", "end": "1772476799", "page": "2", "limit": "10", "cursor": "cursor-from-first-response"})
request = urllib.request.Request( f"https://data.goodmetrics.io/{gm_id}/events/audience/countries?{params}", 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/audience/countries?start=1771872000&end=1772476799&page=2&limit=10&cursor=cursor-from-first-response";
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.Collections.Generic;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;
var gmID = "{gmID}";var apiKey = "YOUR_API_KEY";var query = new Dictionary<string, string>{ ["start"] = "1771872000", ["end"] = "1772476799", ["page"] = "2", ["limit"] = "10", ["cursor"] = "cursor-from-first-response"};var queryString = string.Join("&", query.Select(parameter => $"{Uri.EscapeDataString(parameter.Key)}={Uri.EscapeDataString(parameter.Value)}"));
var url = $"https://data.goodmetrics.io/{gmID}/events/audience/countries?{queryString}";
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";$params = http_build_query([ "start" => "1771872000", "end" => "1772476799", "page" => "2", "limit" => "10", "cursor" => "cursor-from-first-response"]);
$url = "https://data.goodmetrics.io/{$gmID}/events/audience/countries?{$params}";
$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" "net/url")
func main() { gmID := "{gmID}" apiKey := "YOUR_API_KEY"
params := url.Values{} params.Set("start", "1771872000") params.Set("end", "1772476799") params.Set("page", "2") params.Set("limit", "10") params.Set("cursor", "cursor-from-first-response")
request, _ := http.NewRequest( "GET", "https://data.goodmetrics.io/"+gmID+"/events/audience/countries?"+params.Encode(), 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))}