Listar sucursales activas del tenant
curl --request GET \
--url https://api.keebai.com/v1/scheduling/branches \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.keebai.com/v1/scheduling/branches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.keebai.com/v1/scheduling/branches', 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.keebai.com/v1/scheduling/branches",
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.keebai.com/v1/scheduling/branches"
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.keebai.com/v1/scheduling/branches")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.keebai.com/v1/scheduling/branches")
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{
"items": [
{
"id": "<string>",
"name": "<string>",
"display_name": "<string>",
"description": "<string>",
"address": {},
"contact": {},
"timezone": "<string>",
"status": "<string>"
}
],
"total": 123,
"skip": 123,
"limit": 123
}GET /v1/scheduling/branches
List the tenant’s active branches. Supports full-text search over name and display_name (Spanish text index).
GET
/
v1
/
scheduling
/
branches
Listar sucursales activas del tenant
curl --request GET \
--url https://api.keebai.com/v1/scheduling/branches \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.keebai.com/v1/scheduling/branches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.keebai.com/v1/scheduling/branches', 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.keebai.com/v1/scheduling/branches",
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.keebai.com/v1/scheduling/branches"
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.keebai.com/v1/scheduling/branches")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.keebai.com/v1/scheduling/branches")
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{
"items": [
{
"id": "<string>",
"name": "<string>",
"display_name": "<string>",
"description": "<string>",
"address": {},
"contact": {},
"timezone": "<string>",
"status": "<string>"
}
],
"total": 123,
"skip": 123,
"limit": 123
}Returns branches with
status: active for the tenant resolved from the PAT. Search uses the branch_text_search text index (language spanish), so it tolerates plurals and accents.
Endpoint
GET https://api.keebai.com/v1/scheduling/branches
Required scope
scheduling:branches:read
Headers
| Header | Required | Value |
|---|---|---|
Authorization | Yes | Bearer kbai_pk_<token> |
Query params
| Param | Type | Default | Description |
|---|---|---|---|
search | string | — | Full-text search over name and display_name. |
skip | number | 0 | Pagination offset. Minimum 0. |
limit | number | 50 | Page size. Range 1..200. |
Example request
curl -G https://api.keebai.com/v1/scheduling/branches \
-H "Authorization: Bearer kbai_pk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
--data-urlencode "search=clinica norte" \
--data-urlencode "limit=20"
const url = new URL("https://api.keebai.com/v1/scheduling/branches");
url.searchParams.set("search", "clinica norte");
url.searchParams.set("limit", "20");
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.KEEBAI_API_TOKEN}` },
});
const { items } = await response.json();
import os, requests
resp = requests.get(
"https://api.keebai.com/v1/scheduling/branches",
headers={"Authorization": f"Bearer {os.environ['KEEBAI_API_TOKEN']}"},
params={"search": "clinica norte", "limit": 20},
timeout=10,
)
resp.raise_for_status()
print(resp.json()["items"])
Response
200 OK
{
"total": 3,
"skip": 0,
"limit": 20,
"items": [
{
"id": "65a1f2b3c4d5e6f7a8b9c0d1",
"name": "Clínica Norte",
"display_name": "Norte",
"description": "Sede principal en Vitacura",
"address": {
"street": "Av. Apoquindo 1234",
"city": "Santiago",
"region": "RM",
"country": "CL"
},
"contact": { "phone": "+56229999999", "email": "norte@clinica.cl" },
"timezone": "America/Santiago",
"status": "active"
}
]
}
| Field | Type | Description |
|---|---|---|
total | number | Total branches matching the filters (before pagination). |
items[].id | string | Branch ObjectId. Used as branch_id for availability and appointments. |
items[].timezone | string | Branch timezone. All availability and appointments are computed against this tz. |
401 Unauthorized
Token missing, invalid, revoked, or expired.403 Forbidden
The token doesn’t have thescheduling:branches:read scope.Authorizations
Personal Access Token con prefijo kbai_pk_. Generar desde el portal con permiso developer.manage_tokens.
Query Parameters
Búsqueda libre por nombre
Required range:
x >= 0Required range:
1 <= x <= 200Was this page helpful?
⌘I