cURL
curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users', 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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users",
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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users"
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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users")
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{
"from": 123,
"to": 123,
"users": [
{
"credits": 123,
"n_error": 123,
"n_running": 123,
"n_success": 123,
"n_timeout": 123,
"n_warning": 123,
"usd": 123,
"user_email": "<string>",
"user_id": 123,
"user_name": "<string>",
"user_photo_url": "<string>"
}
],
"next_page_token": "<string>"
}Analytics
User Analytics
Per-user run counts and project-attributed spend aggregates for a project.
GET
/
orgs
/
{org_id}
/
projects
/
{project_id}
/
analytics
/
users
cURL
curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users', 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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users",
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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users"
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.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/projects/{project_id}/analytics/users")
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{
"from": 123,
"to": 123,
"users": [
{
"credits": 123,
"n_error": 123,
"n_running": 123,
"n_success": 123,
"n_timeout": 123,
"n_warning": 123,
"usd": 123,
"user_email": "<string>",
"user_id": 123,
"user_name": "<string>",
"user_photo_url": "<string>"
}
],
"next_page_token": "<string>"
}Only project admins can call this endpoint. Results are paginated: pass
page_token from the previous response’s next_page_token to fetch the next page. The response includes from and to for the window you requested.Authorizations
Timbal API key. Obtain your API key from the Timbal platform settings. See Authentication for more information.
Query Parameters
Inclusive range start (epoch milliseconds).
Exclusive range end (epoch milliseconds).
Opaque offset for the next page (from the previous response’s next_page_token).