cURL
curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/analytics/costs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/analytics/costs"
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}/analytics/costs', 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}/analytics/costs",
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}/analytics/costs"
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}/analytics/costs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/analytics/costs")
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{
"bins": [
{
"interval_ends_at": 123,
"interval_starts_at": 123,
"sources": [
{
"costs": [
{
"credits": 123,
"id": 123,
"name": "<string>",
"unit": "<string>",
"usd": 123
}
],
"credits": 123,
"resource_type": "<string>",
"usd": 123
}
]
}
],
"from": 123,
"group_by": "minute",
"to": 123
}Analytics
Org Analytics — Costs
Time-binned credits and USD spend across an org, grouped by product surface.
GET
/
orgs
/
{org_id}
/
analytics
/
costs
cURL
curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/analytics/costs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/analytics/costs"
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}/analytics/costs', 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}/analytics/costs",
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}/analytics/costs"
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}/analytics/costs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/analytics/costs")
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{
"bins": [
{
"interval_ends_at": 123,
"interval_starts_at": 123,
"sources": [
{
"costs": [
{
"credits": 123,
"id": 123,
"name": "<string>",
"unit": "<string>",
"usd": 123
}
],
"credits": 123,
"resource_type": "<string>",
"usd": 123
}
]
}
],
"from": 123,
"group_by": "minute",
"to": 123
}Authorizations
Timbal API key. Obtain your API key from the Timbal platform settings. See Authentication for more information.
Path Parameters
Query Parameters
Bucket size for aggregation (minute, hour, or day).
Available options:
minute, hour, day Inclusive range start (epoch milliseconds). Defaults: 1h / 1d / 30d before to by group_by.
Exclusive range end (epoch milliseconds). Defaults to now.
Restrict to spend attributed to a specific user.
Restrict to spend attributed to a single project. Omit for org-wide totals.
Restrict to one product surface (e.g. composer, app_run, kb_query,
kb_file_parsing); legacy selects spend recorded before source
attribution existed.