curl --request POST \
--url https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"previews": true,
"query": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"search": "<string>",
"filters": [
{
"field": "<string>",
"value": "<unknown>"
}
],
"groupBy": "<string>",
"page": 10000
}
}
'import requests
url = "https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore"
payload = {
"previews": True,
"query": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"search": "<string>",
"filters": [
{
"field": "<string>",
"value": "<unknown>"
}
],
"groupBy": "<string>",
"page": 10000
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
previews: true,
query: {
from: '2023-11-07T05:31:56Z',
to: '2023-11-07T05:31:56Z',
search: '<string>',
filters: [{field: '<string>', value: '<unknown>'}],
groupBy: '<string>',
page: 10000
}
})
};
fetch('https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore', 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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore",
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([
'previews' => true,
'query' => [
'from' => '2023-11-07T05:31:56Z',
'to' => '2023-11-07T05:31:56Z',
'search' => '<string>',
'filters' => [
[
'field' => '<string>',
'value' => '<unknown>'
]
],
'groupBy' => '<string>',
'page' => 10000
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore"
payload := strings.NewReader("{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}"
response = http.request(request)
puts response.read_body{
"rows": [
{}
],
"totalRows": 1,
"totalEvents": 1,
"series": [
{
"date": "<string>",
"group": "<string>",
"count": 1
}
],
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z"
}{
"error": "validation_error",
"message": "Check the date range and filters."
}{
"error": "unauthorized",
"message": "Authentication required."
}{
"error": "forbidden",
"message": "You do not have permission to do this."
}{
"error": "not_found",
"message": "Site not found."
}{
"error": "internal_error",
"message": "Internal server error."
}{
"error": "analytics_query_failed"
}Explore analytics records
Query the raw records of one dataset (searches, questions, ai-requests, page-views) in a time range, with filters and an optional group, 20 rows per page. Send Accept: text/csv to download up to 10,000 rows as CSV. The range must be inside the plan’s history (7 days on Free, 90 on Pro). Any member. Returns personal data, so an API key needs Write access (other keys get 403 write_access_required).
curl --request POST \
--url https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"previews": true,
"query": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"search": "<string>",
"filters": [
{
"field": "<string>",
"value": "<unknown>"
}
],
"groupBy": "<string>",
"page": 10000
}
}
'import requests
url = "https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore"
payload = {
"previews": True,
"query": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"search": "<string>",
"filters": [
{
"field": "<string>",
"value": "<unknown>"
}
],
"groupBy": "<string>",
"page": 10000
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
previews: true,
query: {
from: '2023-11-07T05:31:56Z',
to: '2023-11-07T05:31:56Z',
search: '<string>',
filters: [{field: '<string>', value: '<unknown>'}],
groupBy: '<string>',
page: 10000
}
})
};
fetch('https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore', 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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore",
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([
'previews' => true,
'query' => [
'from' => '2023-11-07T05:31:56Z',
'to' => '2023-11-07T05:31:56Z',
'search' => '<string>',
'filters' => [
[
'field' => '<string>',
'value' => '<unknown>'
]
],
'groupBy' => '<string>',
'page' => 10000
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore"
payload := strings.NewReader("{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://context7.com/api/v2/teamspaces/{teamspaceId}/sites/{siteId}/analytics/explore")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"previews\": true,\n \"query\": {\n \"from\": \"2023-11-07T05:31:56Z\",\n \"to\": \"2023-11-07T05:31:56Z\",\n \"search\": \"<string>\",\n \"filters\": [\n {\n \"field\": \"<string>\",\n \"value\": \"<unknown>\"\n }\n ],\n \"groupBy\": \"<string>\",\n \"page\": 10000\n }\n}"
response = http.request(request)
puts response.read_body{
"rows": [
{}
],
"totalRows": 1,
"totalEvents": 1,
"series": [
{
"date": "<string>",
"group": "<string>",
"count": 1
}
],
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z"
}{
"error": "validation_error",
"message": "Check the date range and filters."
}{
"error": "unauthorized",
"message": "Authentication required."
}{
"error": "forbidden",
"message": "You do not have permission to do this."
}{
"error": "not_found",
"message": "Site not found."
}{
"error": "internal_error",
"message": "Internal server error."
}{
"error": "analytics_query_failed"
}Authorizations
Get your API key at context7.com/dashboard. Treat your API key like a password and store it securely. Every key can read the management API (/v2/teamspaces/*), except personal data: member and invitation emails, library requesters, visitor questions, Docs7 reader searches, conversations, feedback and feature requests, and the GitHub account behind a build. To read those or make changes there, the key must be created with Write access ticked; other keys get 403 write_access_required.
Path Parameters
Teamspace id.
Docs7 site id.
Body
Was this page helpful?