Othership
Othership's real, live class schedule and seat availability across its Toronto and NYC sauna/ice-bath/breathwork studios — the same data its Mariana Tek…
Othership's real, live class schedule and seat availability across its Toronto and NYC sauna/ice-bath/breathwork studios — the same data its Mariana Tek booking widget shows, read directly rather than through a JS embed nothing outside a real browser can render.
Domain: othership.us
Also known as: Othership, othership, othership.us
Call it directly
bowmark.providers.othership.getLocations(): Promise<OthershipLocation[]>
bowmark.providers.othership.getClassSchedule(locationId: string, startDate: string, endDate: string): Promise<OthershipClassSchedule>Functions
| Function | What it does |
|---|---|
getLocations | Returns every Othership studio location (Toronto's Adelaide and Yorkville, NYC's Flatiron and Williamsburg) with its site id, city, address and timezone. |
getClassSchedule | Searches one Othership location's real, live class schedule between two YYYY-MM-DD dates — sauna, ice bath and breathwork sessions with instructor names, duration, tags and the actual seats… |
Types
// Othership's OWN shapes — not a capability contract.
interface OthershipLocation {
id: string; // the key getClassSchedule's locationId takes
name: string; // e.g. "Adelaide", "Flatiron", "Williamsburg"
city: string;
stateProvince: string;
formattedAddress: string;
timezone: string;
currencyCode: string;
regionName: string | null; // e.g. "Toronto", "NYC"
}
interface OthershipClass {
id: string;
name: string; // e.g. "Guided Up: Arctic Tundra - 60 min"
description: string;
durationMinutes: number;
classroomName: string;
instructorNames: string[];
tags: string[]; // e.g. ["Guided", "Sun Pass"]
startDateTime: string; // ISO 8601 with the location's own UTC offset
bookingStartDateTime: string;
availableSpotCount: number; // real, live — 0 means fully booked, not "not offered"
capacity: number;
spotCountIsPublic: boolean;
isCancelled: boolean;
}
interface OthershipClassSchedule {
classes: OthershipClass[];
totalCount: number; // may exceed classes.length if the range was too broad — see warnings
scheduleUrl: string; // hand the visitor here to finish booking
warnings: string[];
}Examples
// What sauna and ice bath classes are open at Othership in Toronto this week, and how many spots are left?
const locations = await bowmark.providers.othership.getLocations();
const adelaide = locations.find((l) => l.name === "Adelaide");
const schedule = await bowmark.providers.othership.getClassSchedule(adelaide.id, "2026-09-01", "2026-09-07");
return schedule.classes
.filter((c) => !c.isCancelled && c.availableSpotCount > 0)
.map((c) => ({ name: c.name, when: c.startDateTime, spotsLeft: c.availableSpotCount, bookAt: schedule.scheduleUrl }));