Bishops Cuts/Color
Bishops Cuts/Color's real location directory, live per-location service catalog, and real open-slot appointment availability — the same Zenoti booking…
Bishops Cuts/Color's real location directory, live per-location service catalog, and real open-slot appointment availability — the same Zenoti booking backend the site's own widget calls. Rung 9/11, no browser.
Domain: bishops.co
Also known as: Bishops, Bishops Cuts/Color, bishops.co
Call it directly
bowmark.providers.bishops.listLocations(): Promise<BishopsLocationLink[]>
bowmark.providers.bishops.findLocation(query: string): Promise<BishopsLocation[]>
bowmark.providers.bishops.listServices(centerId: string, query?: string): Promise<BishopsService[]>
bowmark.providers.bishops.checkAvailability(centerId: string, serviceId: string, date: string): Promise<BishopsAvailability>Functions
| Function | What it does |
|---|---|
listLocations | Reads the live list of every Bishops Cuts/Color location (slug + page URL) off the site's own sitemap. |
findLocation | Resolves a slug/neighborhood query (e.g. "lowry") to the matching real Bishops location(s) — name, address, phone, hours, and the Zenoti centerId listServices and checkAvailability need. |
listServices | Reads one location's real, live service catalog — pass a centerId from findLocation(), and an optional search string (e.g. "cut", "color") to narrow it; omit it for the full catalog. |
checkAvailability | Checks real, live open time slots for one service at one location on one "YYYY-MM-DD" date — the same live check Bishops' own Zenoti booking widget makes before showing bookable times. |
Types
interface BishopsLocationLink {
slug: string;
url: string;
}
interface BishopsLocation {
slug: string;
name: string;
url: string;
centerId: string; // the id listServices and checkAvailability take
phone: string | null;
address: string | null;
hours: string | null;
}
interface BishopsService {
id: string; // the id checkAvailability takes
name: string;
description: string | null;
durationMinutes: number | null;
price: number | null;
}
interface BishopsSlot {
time: string; // the site's own display time, e.g. "10:55 AM"
}
interface BishopsAvailability {
centerId: string;
serviceId: string;
date: string;
slots: BishopsSlot[]; // verbatim — empty is a real answer (fully booked / closed)
}Examples
// Find a location, then see its live service menu.
const locations = await bowmark.providers.bishops.findLocation("lowry");
const [lowry] = locations;
const services = await bowmark.providers.bishops.listServices(lowry.centerId, "cut");
return { lowry, services };// Check tomorrow's real open slots for a haircut at that location.
const [lowry] = await bowmark.providers.bishops.findLocation("lowry");
const services = await bowmark.providers.bishops.listServices(lowry.centerId, "cut");
const [service] = services;
const tomorrow = new Date(Date.now() + 86_400_000).toISOString().slice(0, 10);
const avail = await bowmark.providers.bishops.checkAvailability(lowry.centerId, service.id, tomorrow);
return { service, slots: avail.slots };