curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/k2/{kb_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/k2/{kb_id}"
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}/k2/{kb_id}', 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}/k2/{kb_id}",
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}/k2/{kb_id}"
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}/k2/{kb_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/k2/{kb_id}")
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{
"auto_processing_enabled": true,
"backup_enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"data_size_bytes": 1,
"governance_mode": "off",
"id": 123,
"index_count": 1,
"name": "<string>",
"row_count": 1,
"table_count": 1,
"uid": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"vector_count": 1,
"backup_last_completed_at": "2023-11-07T05:31:56Z",
"backup_last_error": "<string>",
"backup_last_started_at": "2023-11-07T05:31:56Z",
"backup_last_status": "<string>",
"backup_retention_days": 123,
"backup_s3_bucket": "<string>",
"backup_s3_key_prefix": "<string>",
"backup_schedule_cron": "<string>",
"backup_window_utc_hour": 123,
"description": "<string>"
}Get Knowledge Base
Get knowledge base details
curl --request GET \
--url https://api.timbal.ai/orgs/{org_id}/k2/{kb_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.timbal.ai/orgs/{org_id}/k2/{kb_id}"
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}/k2/{kb_id}', 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}/k2/{kb_id}",
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}/k2/{kb_id}"
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}/k2/{kb_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.timbal.ai/orgs/{org_id}/k2/{kb_id}")
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{
"auto_processing_enabled": true,
"backup_enabled": true,
"created_at": "2023-11-07T05:31:56Z",
"data_size_bytes": 1,
"governance_mode": "off",
"id": 123,
"index_count": 1,
"name": "<string>",
"row_count": 1,
"table_count": 1,
"uid": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"vector_count": 1,
"backup_last_completed_at": "2023-11-07T05:31:56Z",
"backup_last_error": "<string>",
"backup_last_started_at": "2023-11-07T05:31:56Z",
"backup_last_status": "<string>",
"backup_retention_days": 123,
"backup_s3_bucket": "<string>",
"backup_s3_key_prefix": "<string>",
"backup_schedule_cron": "<string>",
"backup_window_utc_hour": 123,
"description": "<string>"
}Authorizations
Timbal API key. Obtain your API key from the Timbal platform settings. See Authentication for more information.
Response
Knowledge base details
When false, file uploads to this knowledge base are stored as-is and skipped by the automatic parsing, chunking, and embedding pipeline.
DEPRECATED: backups are system-managed for every KB (idle teardown + daily window pass); this flag gates nothing. Still returned for existing clients; PATCH ignores it.
x >= 0Query-time governance mode. Toggle via PUT …/k2/{kb_id}/policies/governance-mode (k2.policies.manage).
off, shadow, enforce x >= 0x >= 0x >= 0x >= 0DEPRECATED: never had a cron behind it; superseded by
backup_window_utc_hour. Still returned for existing clients; PATCH
ignores it.
UTC hour (0–23) of this KB's daily backup window; null = fleet
default (01:00 UTC). The daily cadence itself is fixed.