← Files WixARCHIVED FILE
skills/wix-headless-templates/bookings/seed/read-site.mjs
1.92 KB · Oct 9, 2026 · 12:02 UTC
// What the booking business holds: services, staff, categories.
// node <SKILL_ROOT>/templates/bookings/seed/read-site.mjs [--site <siteId>] [--limit <n>]
import { runReader } from "../../shared/seed/read-site.mjs";
const BOOKINGS_APP_ID = "13d21c63-b5ec-5912-8397-c3a5ddb27a97";
const D = "https://dev.wix.com/docs/api-reference/business-solutions/bookings";
await runReader({
vertical: "bookings",
appId: BOOKINGS_APP_ID,
async read(api, { limit }) {
const services = await api.call({ path: "/_api/bookings/v2/services/query", body: { query: { paging: { limit }, filter: { hidden: { $eq: false } } } }, docs: `${D}/services/services-v2/query-services` });
const staff = await api.tryCall({ path: "/bookings/v1/staff-members/query", body: { query: {}, fields: ["RESOURCE_DETAILS"] }, docs: `${D}/staff-members/staff-members/query-staff-members` });
const cats = await api.tryCall({ path: "/bookings/v2/categories/query", body: { query: {} }, docs: `${D}/services/categories-v2/query-categories` });
return {
serviceCount: services.pagingMetadata?.total ?? (services.services ?? []).length,
services: (services.services ?? []).map((s) => ({
name: s.name, slug: s.mainSlug?.name ?? null, type: s.type ?? null,
category: s.category?.name ?? null,
price: s.payment?.fixed?.price ? `${s.payment.fixed.price.value} ${s.payment.fixed.price.currency}` : s.payment?.varied?.defaultPrice ? `from ${s.payment.varied.defaultPrice.value} ${s.payment.varied.defaultPrice.currency}` : (s.payment?.rateType ?? null),
durationMinutes: s.schedule?.availabilityConstraints?.sessionDurations?.[0] ?? null,
online: s.payment?.options?.online ?? false, inPerson: s.payment?.options?.inPerson ?? false, media: s.media?.mainMedia ? 1 : 0,
})),
staff: (staff?.staffMembers ?? []).map((m) => m.name),
categories: (cats?.categories ?? []).map((c) => ({ id: c.id, name: c.name })),
};
},
});
SHA-256: d14bfef47039b3cca345ce04d359ad36f7ea9c5498669f3500351dc6e1cd296d