Reference
Read-only reference data for a buyer account: branches, purchase types, suppliers, catalog products, expense categories, expense accounts and account mappings.
The endpoints in this group are not yet available. This page documents the contract as currently defined.
The Supplier object
Attributes
Type of vendor. Only vendors of type goods count toward food cost. Vendors of type service, card or internal never do.
goodsservicecardinternal{
"id": "72223",
"name": "מאפייה אחת עשרה",
"tax_id": "000000000",
"vendor_type": "goods",
"counts_in_food_cost": true,
"vat_status": "standard",
"payment_terms": "שוטף + 30",
"payment_method": "bank_transfer",
"default_category_id": null,
"default_purchase_type": "FC",
"credit_account": "400223",
"merged_into_vendor_id": null,
"active": true,
"created_at": "2024-03-18T10:22:00+03:00",
"updated_at": "2026-09-02T09:14:00+03:00"
}
/branchesQuery parameters
Opaque cursor returned as next_cursor in a previous response. Pass it to fetch the next page.
Responses
200A page of the account's branches, its physical sites.
403The credential is valid but is not allowed to make this request. The code is scope_missing, plan_required, ip_not_allowed or client_suspended.
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/branches?limit=50" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/branches?limit=50", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/branches?limit=50",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/branches?limit=50");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"id": "71148-1",
"name": "שניצי קפה – ראשי",
"tax_id": "000000000",
"code": "01",
"region": "מרכז",
"address": "דרך מנחם בגין 52, תל אביב",
"active": true,
"updated_at": "2026-05-20T10:00:00+03:00"
},
{
"id": "71148-2",
"name": "שניצי קפה – חיפה",
"tax_id": "000000000",
"code": "02",
"region": "צפון",
"address": "שדרות הנשיא 118, חיפה",
"active": true,
"updated_at": "2026-07-02T14:30:00+03:00"
}
],
"next_cursor": null,
"has_more": false
}{
"type": "https://developers.zester.co.il/errors/plan_required",
"title": "Plan upgrade required",
"status": 403,
"code": "plan_required",
"detail": "The buyer API requires the Pro plan or above. Account 71148 is on the Basic plan.",
"request_id": "req_01J9KQ7X4M",
"upgrade_url": "https://app.zester.co.il/billing"
}
/purchase-typesResponses
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/purchase-types" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/purchase-types", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/purchase-types",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/purchase-types");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"code": "FC",
"name": "פוד קוסט",
"is_default": true
},
{
"code": "MK",
"name": "שיווק",
"is_default": false
},
{
"code": "EV",
"name": "אירועים",
"is_default": false
},
{
"code": "OC",
"name": "הוצאות תפעול",
"is_default": false
}
]
}
/suppliersQuery parameters
Opaque cursor returned as next_cursor in a previous response. Pass it to fetch the next page.
Return only items whose updated_at is strictly after this timestamp. Use it for incremental sync.
Responses
200A page of the account's suppliers (vendors).
Show 15 child attributesHide child attributes
Type of vendor. Only vendors of type goods count toward food cost. Vendors of type service, card or internal never do.
goodsservicecardinternalcurl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers?updated_since=2026-09-01T00:00:00%2B03:00&limit=200" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers?updated_since=2026-09-01T00:00:00%2B03:00&limit=200", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers?updated_since=2026-09-01T00:00:00%2B03:00&limit=200",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers?updated_since=2026-09-01T00:00:00%2B03:00&limit=200");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"id": "72223",
"name": "מאפייה אחת עשרה",
"tax_id": "000000000",
"vendor_type": "goods",
"counts_in_food_cost": true,
"vat_status": "standard",
"payment_terms": "שוטף + 30",
"payment_method": "bank_transfer",
"default_category_id": null,
"default_purchase_type": "FC",
"credit_account": "400223",
"merged_into_vendor_id": null,
"active": true,
"created_at": "2024-03-18T10:22:00+03:00",
"updated_at": "2026-09-02T09:14:00+03:00"
},
{
"id": "72455",
"name": "נקי פלוס",
"tax_id": "000000000",
"vendor_type": "service",
"counts_in_food_cost": false,
"vat_status": "standard",
"payment_terms": "שוטף + 30",
"payment_method": "bank_transfer",
"default_category_id": "912",
"default_purchase_type": "OC",
"credit_account": "400455",
"merged_into_vendor_id": null,
"active": true,
"created_at": "2025-01-06T12:05:00+03:00",
"updated_at": "2026-09-03T11:40:00+03:00"
},
{
"id": "72901",
"name": "חברת החשמל",
"tax_id": "000000000",
"vendor_type": "service",
"counts_in_food_cost": false,
"vat_status": "standard",
"payment_terms": "לפי תאריך החשבון",
"payment_method": "standing_order",
"default_category_id": "931",
"default_purchase_type": "OC",
"credit_account": "400901",
"merged_into_vendor_id": null,
"active": true,
"created_at": "2023-11-01T09:00:00+03:00",
"updated_at": "2026-09-04T06:12:00+03:00"
}
],
"next_cursor": "eyJ1IjoiMjAyNi0wOS0wNFQwNjoxMjowMCswMzowMCIsImlkIjoiNzI5MDEifQ",
"has_more": true
}
/suppliers/{supplier_id}Path parameters
Responses
200The supplier.
Type of vendor. Only vendors of type goods count toward food cost. Vendors of type service, card or internal never do.
goodsservicecardinternal404The resource does not exist or belongs to another account.
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers/72223" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers/72223", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers/72223",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/suppliers/72223");
var data = await res.Content.ReadAsStringAsync();
{
"id": "72223",
"name": "מאפייה אחת עשרה",
"tax_id": "000000000",
"vendor_type": "goods",
"counts_in_food_cost": true,
"vat_status": "standard",
"payment_terms": "שוטף + 30",
"payment_method": "bank_transfer",
"default_category_id": null,
"default_purchase_type": "FC",
"credit_account": "400223",
"merged_into_vendor_id": null,
"active": true,
"created_at": "2024-03-18T10:22:00+03:00",
"updated_at": "2026-09-02T09:14:00+03:00"
}{
"type": "https://developers.zester.co.il/errors/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "Supplier 72223 does not exist or belongs to another account.",
"request_id": "req_01J9KR2D5N"
}
/productsQuery parameters
Opaque cursor returned as next_cursor in a previous response. Pass it to fetch the next page.
Return only items whose updated_at is strictly after this timestamp. Use it for incremental sync.
Responses
200A page of products from the buyer's catalog.
Show 13 child attributesHide child attributes
Decimal amount as a string, with exactly 2 fraction digits. The currency is set by currency on the parent object.
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/products?updated_since=2026-09-01T00:00:00%2B03:00&limit=200" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/products?updated_since=2026-09-01T00:00:00%2B03:00&limit=200", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/products?updated_since=2026-09-01T00:00:00%2B03:00&limit=200",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/products?updated_since=2026-09-01T00:00:00%2B03:00&limit=200");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"id": "8812001",
"sku": "300",
"name": "בייבי ג׳בטה לבן",
"supplier_id": "72223",
"product_group": "לחמים",
"category_id": null,
"unit": "carton",
"current_price": "80.00",
"vat_exempt": false,
"inventory_item": true,
"active": true,
"updated_at": "2026-09-01T06:00:00+03:00"
},
{
"id": "8812002",
"sku": "412",
"name": "לחמניית חיטה מלאה",
"supplier_id": "72223",
"product_group": "לחמים",
"category_id": null,
"unit": "carton",
"current_price": "34.70",
"vat_exempt": false,
"inventory_item": true,
"active": true,
"updated_at": "2026-09-01T06:00:05+03:00"
},
{
"id": "8813045",
"sku": "1045",
"name": "עגבניות שרי",
"supplier_id": "72310",
"product_group": "ירקות",
"category_id": null,
"unit": "kg",
"package_quantity": "1",
"current_price": "12.90",
"vat_exempt": true,
"inventory_item": true,
"active": true,
"updated_at": "2026-09-08T05:30:00+03:00"
}
],
"next_cursor": "eyJ1IjoiMjAyNi0wOS0wOFQwNTozMDowMCswMzowMCIsImlkIjoiODgxMzA0NSJ9",
"has_more": true
}
/expense-categoriesResponses
200The expense category tree (2 levels) as a flat list. Each category references its parent in parent_id.
Show 7 child attributesHide child attributes
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-categories" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-categories", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-categories",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-categories");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"id": "900",
"parent_id": null,
"name": "תפעול",
"pl_group": "general_admin",
"default_vat_treatment": "full",
"is_recurring_fixed": false,
"is_active": true
},
{
"id": "912",
"parent_id": "900",
"name": "ניקיון וחומרי ניקוי",
"pl_group": "general_admin",
"default_vat_treatment": "full",
"is_recurring_fixed": false,
"is_active": true
},
{
"id": "915",
"parent_id": "900",
"name": "דלק וחניה",
"pl_group": "general_admin",
"default_vat_treatment": "two_thirds",
"is_recurring_fixed": false,
"is_active": true
},
{
"id": "930",
"parent_id": null,
"name": "הוצאות קבועות",
"pl_group": "fixed",
"default_vat_treatment": "full",
"is_recurring_fixed": true,
"is_active": true
},
{
"id": "931",
"parent_id": "930",
"name": "חשמל",
"pl_group": "fixed",
"default_vat_treatment": "full",
"is_recurring_fixed": true,
"is_active": true
}
]
}
/expense-accountsResponses
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-accounts" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-accounts", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-accounts",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/expense-accounts");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"code": "5100",
"name": "קניות מזון וחומרי גלם",
"active": true
},
{
"code": "6100",
"name": "ניקיון וחומרי ניקוי",
"active": true
},
{
"code": "6150",
"name": "ניקיון לאירועים",
"active": true
},
{
"code": "6190",
"name": "חומרי ניקוי (לא בשימוש)",
"active": false
},
{
"code": "6200",
"name": "חשמל ומים",
"active": true
},
{
"code": "6300",
"name": "רכב, דלק וחניה",
"active": true
}
]
}
/account-mappingsResponses
200The mappings from expense category and purchase type to expense account. A row with purchase_type set to null is the fallback for any purchase type.
curl "https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/account-mappings" \
-H "Authorization: Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…"const res = await fetch("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/account-mappings", {
method: "GET",
headers: {
Authorization: "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
});
const data = await res.json();import requests
res = requests.get(
"https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/account-mappings",
headers={
"Authorization": "Bearer zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…",
},
)
data = res.json()using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "zk_test_XXXXXXXX_…zk_live_XXXXXXXX_…");
var res = await http.GetAsync("https://sandbox-api.zester.co.il/v2https://api.zester.co.il/v2/account-mappings");
var data = await res.Content.ReadAsStringAsync();
{
"data": [
{
"category_id": "912",
"purchase_type": null,
"expense_account": "6100"
},
{
"category_id": "912",
"purchase_type": "EV",
"expense_account": "6150"
},
{
"category_id": "915",
"purchase_type": null,
"expense_account": "6300"
},
{
"category_id": "931",
"purchase_type": null,
"expense_account": "6200"
}
]
}