Skip to content

Site payload

One call returns the studio, its rooms with their booking policy, and the site’s presentation settings.

Terminal window
curl -s https://api.mrcharles.app/api/v1/public/sites/studio-uno-madrid
Authnone
Cachepublic, max-age=60
Errors404 RESOURCE_NOT_FOUND (no such slug) · 404 SITE_NOT_LIVE (exists, not published)

Same payload, looked up by hostname — <slug>.sites.mrcharles.app or a verified custom domain.

Terminal window
curl -s "https://api.mrcharles.app/api/v1/public/sites/resolve?host=studiouno.com"
{
"studio": { … },
"rooms": [ { … } ],
"site": { … },
"bookingOnline": true,
"cardPayments": true,
"captchaSiteKey": "0x4AAA…",
"stripePublishableKey": "pk_live_…"
}
FieldTypeNotes
bookingOnlinebooleanAt least one room is bookable online
cardPaymentsbooleanCard deposits available on this platform
captchaSiteKeystring?Turnstile site key for the hold captcha (action hold). Always present outside local development
stripePublishableKeystring?Present when cardPayments — use it to mount Stripe
FieldTypeNotes
name, slugstringslug is the public identifier
description, shortDescriptionstring, string?
studioTypestring?recording, rehearsal, teaching, …
logoUrl, coverImageUrlstring?
addressLine1, addressLine2, city, postalCode, countrystringcountry is ISO 3166-1 alpha-2
latitude, longitudenumber?
phone, email, websitestring?, string, string?
timezonestringIANA name — every date and time belongs to this zone
isVerifiedbooleanOwnership confirmed by us
averageRating, totalReviewsnumber?, number
operatingHoursarray{ dayOfWeek: 0–6 (Sun–Sat), openTime: "10:00", closeTime: "22:00", isClosed }
socialLinks, amenitiesarray
FieldTypeNotes
iduuidUse in availability and holds
name, descriptionstring, string?
capacitynumberPeople
roomTypestring?
hourlyCents, currencynumber, stringMinor units; 2500 = €25.00/h
bookablebooleanOnly these accept online bookings
minMinutes, maxMinutes, stepMinutesnumberAllowed durations
paymentModesstring[]card, on_site
depositPercentnumberShare charged now when paying by card
cancelNoticeHoursnumberGuest self-cancellation window
instructionsobject{ es, ca, en }, shown after booking
photosstring[]
equipment, facilitiesarray
pricingobjectThe room’s full price list — see below

Every room has one, even with a single hourly price (one standard row). Use it to display prices; the amount a guest pays always comes from a quote or the hold.

{
"version": 3,
"fromCents": 800,
"toCents": 1500,
"summary": { "es": "Desde 8 €/h · Solo/Dúo/Banda · Mañanas: 9 €/h", "en": "From €8/h · Solo/Duo/Band · Mornings: €9/h" },
"defaultGroupSizeId": "g_duo",
"groupSizes": [
{ "id": "g_solo", "label": { "es": "Solo", "en": "Solo" }, "maxPeople": 1 },
{ "id": "g_duo", "label": { "es": "Dúo", "en": "Duo" }, "maxPeople": 2 },
{ "id": "g_band", "label": { "es": "Banda", "en": "Band" }, "maxPeople": 6 }
],
"bands": [
{ "id": "b_morn", "label": { "es": "Mañanas", "en": "Mornings" }, "days": [1, 2, 3, 4, 5], "start": "10:00", "end": "15:00", "color": 0 }
],
"table": {
"standard": { "g_solo": 800, "g_duo": 1200, "g_band": 1500 },
"b_morn": { "g_solo": 500, "g_duo": 900, "g_band": 1200 }
},
"durationDiscounts": [{ "minMinutes": 240, "percent": 10 }]
}
FieldNotes
fromCents, toCentsCheapest and dearest hourly price in the table. Show “From” with fromCents
summaryOne line per language for listings
groupSizes[]Price tiers by group size. Empty: one price for any group — don’t ask who’s coming
defaultGroupSizeIdThe tier priced at hourlyCents; preselect it
bands[]Times of the week with their own prices. days are ISO weekdays (1 = Monday). An end before start runs past midnight
tableHourly minor units per [row][column]. Rows: standard and band ids. Columns: group ids, or any when the room has no tiers
durationDiscounts[]Percentage off bookings of at least minMinutes

Send the guest’s tier as groupSizeId on the quote and the hold. Omitting it prices the default tier — exactly what older clients get.

FieldTypeNotes
templatestringstage or daylight
themeobjectprimary, accent, font, radius, mode, logoUrl
sectionsobjectWhich blocks the studio enabled
contentobjecttagline, about, bookingNote (localised), whatsapp, instagram, gallery
legalobjectlegalName, taxId, address, email, phone
seoobjecttitle, description
defaultLocale, localesstring, string[]es · ca · en
statusstringAlways live on public responses
customDomainstring?
canonicalHoststringWhere the site should live — redirect to it if you mirror content

Localised fields are objects keyed by locale: {"es":"Locales de ensayo","ca":"Locals d'assaig"}. A missing key means “fall back to defaultLocale”.