For developers (bots & aggregators welcome)
Availability is served by a public JSON API — no authentication, CORS enabled. Please poll gently (a few requests per minute is plenty; data changes at booking granularity).
GET https://api.bookandgo.app/api/v1/apps/51/locations
→ venues, sports (sport_name values), courts
GET https://api.bookandgo.app/api/v1/apps/51/court-bookings?sport_name={Pickleball|Padel|Tennis}&date={YYYY-MM-DD}
→ data.bookings[] per venue and bookable duration with base price
.bookabledays[] time-window / weekday price overrides (off-peak etc.)
.location.courts[].timings[] per-date open hours and
.available_time_slots[] bookable START times ("HH:MM:SS", club-local SGT)
A slot listed in available_time_slots under a config with duration: 60
means that court is free for 60 consecutive minutes from that start time.
The exact price for a slot is the matching bookabledays entry
(special date_start/date_end rows first, then weekday rows, matched on the
slot's start time window), falling back to the config's base price.
This page also embeds the raw API responses in
<script type="application/json" class="raw-availability"> tags after render.
Booking is done in the MBP app, or contact the club for API booking access.