Documentation
Booking
booking.shop_info
REST
ShippingPOST /api/v1/booking/shop_infoMCP tool
Livebooking.shop_infoExposed on: REST API · Shop MCP server · Claude connector · Dash (in-app copilot) · Zapier. Part of the Booking domain.
Operating contract
What a customer needs in order to turn up: which days and hours the shop actually works, and how to reach it.
THE HOURS ARE THE WORKING WEEK, NOT THE BOOKABLE SLOTS. A day inside these hours can still be full, and the shop's lead time can rule out a time sitting comfortably within them. booking.availability is the only honest answer to 'when can you fit me in'; these hours answer 'when are you open'.
closed: true on a weekday means the shop does not work that day at all. hours_configured: false means this shop has never set its hours and everything downstream is running on the product's default week — say the shop has not published its hours rather than reading the defaults out as the shop's own decision.
Hours are local wall clock in the shop's own timezone, open inclusive and close exclusive: 8 to 17 means the last work starts before five.
shop.profile carries the same address and currency and is the read to prefer where both are reachable; this exists because it also carries the WEEK, which shop.profile does not.
One shop's own detail, entirely returned, so nothing is truncated.
Who may call it
- Permission
- NoneEvery field here is printed in the header and footer of the public storefront at /book/<slug>, which has no login behind it. Gating the shop's own opening hours would protect nothing a visitor cannot already read off the front door.
- Plan
- Every planNo plan gate. Available on every Service VIN plan.
- Retries
naturalNaturally idempotent — running it twice leaves the same world as running it once. A retrying integration needs no key.- Rate class
readCounted against the read budget — the widest of the four.
Input
This capability takes no arguments.
Output
| Field | Type | Description |
|---|---|---|
| name | string | — |
| phone | string | null | — |
| string | null | — | |
| address | string | null | — |
| city | string | null | — |
| region | string | null | — |
| postal_code | string | null | — |
| timezone | string | — |
| currency | string | — |
| hours_configured | boolean | — |
| hours | object[] | — |
| hours[].weekday | string | — |
| hours[].open | number | null | — |
| hours[].close | number | null | — |
| hours[].closed | boolean | — |
Examples
Built from this capability's own schema — required fields and the ones carrying a default, and nothing invented. Paste one and it validates.
export SERVICEVIN_API_KEY=svk_live_…
curl -X POST https://www.servicevin.com/api/v1/booking/shop_info \
-H "Authorization: Bearer $SERVICEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'const res = await fetch("https://www.servicevin.com/api/v1/booking/shop_info", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SERVICEVIN_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
// Success and failure are both envelopes. Switch on error.code, never
// on error.message — the codes are stable, the messages are for people.
const payload = await res.json();
if (!res.ok) throw new Error(payload.error.code);
const data = payload.data;import os, requests
res = requests.post(
"https://www.servicevin.com/api/v1/booking/shop_info",
headers={"Authorization": f"Bearer {os.environ['SERVICEVIN_API_KEY']}"},
json={},
timeout=30,
)
payload = res.json()
if not res.ok:
raise RuntimeError(payload["error"]["code"])
data = payload["data"]{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "booking.shop_info",
"arguments": {}
}
}Refusals
The four gates run in this order on every surface, and the order is not arbitrary — see Authentication.
| Status | Code | When |
|---|---|---|
| 404 | not_found | The id is unknown, or the feature is not enabled for this account. Deliberately the same answer for both. |
| 422 | validation_error | An argument was wrong. The message names the field. |
| 429 | rate_limited | Too many read calls. Back off and retry. |
| 500 | internal_error | Something failed on our side. Nothing was changed. |