One call returns the studio, its rooms with their booking policy, and the site’s presentation settings.
curl -s https://api.mrcharles.app/api/v1/public/sites/studio-uno-madrid
| |
|---|
| Auth | none |
| Cache | public, max-age=60 |
| Errors | 404 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.
curl -s "https://api.mrcharles.app/api/v1/public/sites/resolve?host=studiouno.com"
"captchaSiteKey": "0x4AAA…",
"stripePublishableKey": "pk_live_…"
| Field | Type | Notes |
|---|
bookingOnline | boolean | At least one room is bookable online |
cardPayments | boolean | Card deposits available on this platform |
captchaSiteKey | string? | Present when holds require a captcha |
stripePublishableKey | string? | Present when cardPayments — use it to mount Stripe |
| Field | Type | Notes |
|---|
name, slug | string | slug is the public identifier |
description, shortDescription | string, string? | |
studioType | string? | recording, rehearsal, teaching, … |
logoUrl, coverImageUrl | string? | |
addressLine1, addressLine2, city, postalCode, country | string | country is ISO 3166-1 alpha-2 |
latitude, longitude | number? | |
phone, email, website | string?, string, string? | |
timezone | string | IANA name — every date and time belongs to this zone |
isVerified | boolean | Ownership confirmed by us |
averageRating, totalReviews | number?, number | |
operatingHours | array | { dayOfWeek: 0–6 (Sun–Sat), openTime: "10:00", closeTime: "22:00", isClosed } |
socialLinks, amenities | array | |
| Field | Type | Notes |
|---|
id | uuid | Use in availability and holds |
name, description | string, string? | |
capacity | number | People |
roomType | string? | |
hourlyCents, currency | number, string | Minor units; 2500 = €25.00/h |
bookable | boolean | Only these accept online bookings |
minMinutes, maxMinutes, stepMinutes | number | Allowed durations |
paymentModes | string[] | card, on_site |
depositPercent | number | Share charged now when paying by card |
cancelNoticeHours | number | Guest self-cancellation window |
instructions | object | { es, ca, en }, shown after booking |
photos | string[] | |
equipment, facilities | array | |
| Field | Type | Notes |
|---|
template | string | stage or daylight |
theme | object | primary, accent, font, radius, mode, logoUrl |
sections | object | Which blocks the studio enabled |
content | object | tagline, about, bookingNote (localised), whatsapp, instagram, gallery |
legal | object | legalName, taxId, address, email, phone |
seo | object | title, description |
defaultLocale, locales | string, string[] | es · ca · en |
status | string | Always live on public responses |
customDomain | string? | |
canonicalHost | string | Where 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”.