Site catalogue
Read endpoints for showing a published site's products in your own interface.
https://app.getera.io/api/site/v1/{siteId}https://app.getera.io/api/site/v1/{siteId}/productshttps://app.getera.io/api/site/v1/{siteId}/products/{id}The site API returns the public data of a published website as JSON: the products, services and free times a visitor can already see. Use it to show the same catalogue in your own mobile app or another front end. Your workspace's internal data is not reachable through this door.
Authentication
None. The site must be published.
Calls from a browser are accepted only from the site's connected domains (CORS); a request from any other domain gets 403 origin_not_allowed. Calls from a server (without an Origin header) are not affected by this check.
Site id
When you open a site from Site › All sites (/sites/all), the address becomes /sites?site=<siteId>; siteId is that value.
Endpoints
| Path | Returns |
|---|---|
/api/site/v1/{siteId} | A site summary and the list of available resources. |
/api/site/v1/{siteId}/products | Active products, featured first. |
/api/site/v1/{siteId}/products/{id} | One product and its active variants. The product's short name (slug) works in place of id. |
Query parameters (products)
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | No | 1–100, default 24. |
q | string | No | Searches product names and summaries. |
Example
curl "https://app.getera.io/api/site/v1/SITE_ID/products?limit=2&q=coffee"Response: product list
{
"data": [
{
"id": "a1c2e3f4-0000-4000-8000-000000000040",
"name": "Filter Coffee 250 g",
"slug": "filter-coffee-250g",
"summary": "Medium roast, demo product.",
"is_featured": true,
"rating": 4.8,
"variant_id": "a1c2e3f4-0000-4000-8000-000000000041",
"variant_name": "250 g",
"sku": "DEMO-COF-250",
"price_amount": 240,
"price_currency": "TRY",
"prior_price_amount": 280
}
]
}Response: site summary
{
"data": {
"version": "v1",
"site": { "id": "SITE_ID", "name": "Demo Cafe", "locale": "en" },
"resources": ["products", "products/{id}", "services", "slots", "bookings", "me/bookings", "me/orders"],
"audiences": {
"public": ["products", "services", "slots"],
"customer": ["bookings", "me/bookings", "me/orders"]
}
}
}Resources in the customer group need the session of a customer signed in to the site; they are not covered here.
Errors
Error bodies look like {"error": {"code": "...", "message": "..."}}.
| Status | code | When |
|---|---|---|
403 | origin_not_allowed | A browser call does not come from the site's domains. |
404 | site_not_found | No such site, or not published. |
404 | not_found | Product or resource not found. |
429 | rate_limited | Rate limit. |
Limits
Each IP address may make 600 requests an hour to one site; a site's total is 10,000 requests an hour.
See also Services and free times.