curl --request GET \
--url https://api.dev.shadowchef.co/v1/partner/branches \
--header 'Authorization: Basic <encoded-value>'const url = 'https://api.dev.shadowchef.co/v1/partner/branches';
const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.dev.shadowchef.co/v1/partner/branches"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.dev.shadowchef.co/v1/partner/branches"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dev.shadowchef.co/v1/partner/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: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"request_id": "84b5f7a0dbe83a972d72e4ed0d87a7a7",
"data": {
"page": 1,
"size": 1000,
"total": 9,
"results": [
{
"id": 5913,
"title": "(DEMO) Buleleng",
"address": "Jl. Pahlawan, Paket Agung, Kec. Buleleng, Kabupaten Buleleng, Bali 81117",
"phone": "+6285172191644",
"secondary_phone": "",
"lat": -8.124293388269452,
"lon": 115.0929023057558,
"business_id": 398,
"business_title": "(DEMO) klikit Indonesia",
"business_vat_label": "VAT",
"business_vat_percentage": 12,
"brand_ids": [
1100,
1615,
1616,
4111
],
"brand_titles": [
"(DEMO) Klikit Dimsum",
"(DEMO) Klikit Noodle",
"(DEMO) Wine Boba",
"TEST - Klikit Healthy Kitchen"
],
"city_id": 106,
"country_id": 4,
"country_code": "ID",
"currency_id": 4,
"currency_code": "IDR",
"currency_symbol": "Rp",
"language_id": "3",
"language_code": "id",
"language_title": "Bahasa Indonesia",
"availability_mask": 127,
"day_availability": [
0,
1,
2,
3,
4,
5,
6
],
"available_times": {
"0": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"1": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"2": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"3": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"4": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"5": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"6": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
}
},
"opening_time": null,
"closing_time": null,
"preparation_time": 20,
"order_cleanup_time": 180,
"subscription_type": 8,
"is_busy": false,
"is_demo": false,
"is_churned": false,
"is_shift_enabled": true,
"is_vat_registered": false,
"is_driver_progress_enabled": true,
"marketplace_enabled": true,
"open_order_enabled": false,
"post_payment_enabled": true,
"pre_payment_enabled": true,
"pay_and_complete_enabled": true,
"scheduled_order_enabled": false,
"manual_order_auto_accept_enabled": true,
"printer_routing_enabled": true,
"popular_items_enabled": true,
"feature_flags": [
"oni",
"busy_mode",
"add_order",
"menu",
"analytics",
"insights",
"webshop",
"reservation",
"review",
"promo",
"links",
"links_website",
"loyalty",
"whitelabel",
"aggregator",
"printer_settings",
"crm",
"campaign",
"live_report",
"auto_oos"
],
"bir_config_enabled": false,
"busy_mode_updated_at": "2026-01-07T15:22:12Z",
"created_at": "2025-08-06T06:26:58Z",
"updated_at": "2026-04-28T07:32:09Z",
"deleted_at": null
}
]
}
}List branches
Lists every branch belonging to your credential’s business. Use
the returned id values as branch_id parameters on menu and
order endpoints.
Shape note. data is a paginated object — the items live
under results[] (not branches[]) alongside page, size,
and total.
curl --request GET \
--url https://api.dev.shadowchef.co/v1/partner/branches \
--header 'Authorization: Basic <encoded-value>'const url = 'https://api.dev.shadowchef.co/v1/partner/branches';
const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));import requests
url = "https://api.dev.shadowchef.co/v1/partner/branches"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.dev.shadowchef.co/v1/partner/branches"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.dev.shadowchef.co/v1/partner/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: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"request_id": "84b5f7a0dbe83a972d72e4ed0d87a7a7",
"data": {
"page": 1,
"size": 1000,
"total": 9,
"results": [
{
"id": 5913,
"title": "(DEMO) Buleleng",
"address": "Jl. Pahlawan, Paket Agung, Kec. Buleleng, Kabupaten Buleleng, Bali 81117",
"phone": "+6285172191644",
"secondary_phone": "",
"lat": -8.124293388269452,
"lon": 115.0929023057558,
"business_id": 398,
"business_title": "(DEMO) klikit Indonesia",
"business_vat_label": "VAT",
"business_vat_percentage": 12,
"brand_ids": [
1100,
1615,
1616,
4111
],
"brand_titles": [
"(DEMO) Klikit Dimsum",
"(DEMO) Klikit Noodle",
"(DEMO) Wine Boba",
"TEST - Klikit Healthy Kitchen"
],
"city_id": 106,
"country_id": 4,
"country_code": "ID",
"currency_id": 4,
"currency_code": "IDR",
"currency_symbol": "Rp",
"language_id": "3",
"language_code": "id",
"language_title": "Bahasa Indonesia",
"availability_mask": 127,
"day_availability": [
0,
1,
2,
3,
4,
5,
6
],
"available_times": {
"0": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"1": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"2": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"3": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"4": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"5": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
},
"6": {
"disabled": false,
"slots": [
{
"start_time": 800,
"end_time": 2200
}
]
}
},
"opening_time": null,
"closing_time": null,
"preparation_time": 20,
"order_cleanup_time": 180,
"subscription_type": 8,
"is_busy": false,
"is_demo": false,
"is_churned": false,
"is_shift_enabled": true,
"is_vat_registered": false,
"is_driver_progress_enabled": true,
"marketplace_enabled": true,
"open_order_enabled": false,
"post_payment_enabled": true,
"pre_payment_enabled": true,
"pay_and_complete_enabled": true,
"scheduled_order_enabled": false,
"manual_order_auto_accept_enabled": true,
"printer_routing_enabled": true,
"popular_items_enabled": true,
"feature_flags": [
"oni",
"busy_mode",
"add_order",
"menu",
"analytics",
"insights",
"webshop",
"reservation",
"review",
"promo",
"links",
"links_website",
"loyalty",
"whitelabel",
"aggregator",
"printer_settings",
"crm",
"campaign",
"live_report",
"auto_oos"
],
"bir_config_enabled": false,
"busy_mode_updated_at": "2026-01-07T15:22:12Z",
"created_at": "2025-08-06T06:26:58Z",
"updated_at": "2026-04-28T07:32:09Z",
"deleted_at": null
}
]
}
}Authorizations
Authorization: Basic base64(partner_key:secret_key).
Credentials are issued by a klikit operator. The plaintext
secret_key is shown once at issuance and cannot be retrieved
later — store it securely. If lost, ask your operator to rotate
the secret to receive a new one. The old secret stops working
immediately on rotation; there is no overlap window.
Query Parameters
1-indexed page number. Echoed back in the response body.
x >= 1Items per page. Echoed back in the response body.
1 <= x <= 100Response
Branch list
Canonical response wrapper. Every response — success or error —
carries the request_id so you can quote one id to klikit
support to correlate a request end-to-end.
"req_4d1b7e3f-..."
Paginated branch list payload. Note the items live under
results (not branches).
Show child attributes
Show child attributes
Machine-readable error code + human message. The code is stable
across releases — switch on code in your client code rather
than parsing the message text.
Common codes you will encounter as a partner:
| Code | HTTP | Meaning |
|---|---|---|
auth_missing | 401 | Authorization header absent / malformed |
auth_invalid_credential | 401 | partner_key or secret_key did not verify |
auth_revoked | 403 | Credential is revoked |
auth_forbidden | 403 | Credential not authorized for the requested scope |
request_invalid | 400 | Body / query parameters failed validation |
request_missing_idempotency_key | 400 | Write endpoint called without Idempotency-Key |
request_invalid_range | 400 | Date range > 90 days |
resource_not_found | 404 | Order / store / mapping does not exist |
resource_unmapped | 404 | Stock / availability call referenced an unknown SKU |
state_invalid_transition | 409 | Order PATCH not allowed by current state |
state_idempotency_conflict | 409 | Same Idempotency-Key reused with a different body |
rate_limit_exceeded | 429 | Per-credential rate cap hit |
downstream_unavailable | 502 | An internal klikit dependency is unreachable |
Show child attributes
Show child attributes