Overview
Mr Charles is the platform where music studios manage their rooms, prices and bookings. The public sites API exposes a studio’s rooms and live availability, and lets a guest book a room without an account, from any website.
Who this is for
Section titled “Who this is for”- Studios that want bookings on their own website (or their own domain) instead of WhatsApp and bank transfers.
- Agencies and freelancers building a studio’s website.
- Platforms (rehearsal-room directories, band tools, city guides) that want to show real availability and let people book.
What you can do
Section titled “What you can do”| Need | Use | Effort |
|---|---|---|
| A website with booking, now | Hosted site on slug.sites.mrcharles.app or your own domain | none |
| Keep my website, add booking | Links & embed — deep links or an iframe to the hosted booking page | minutes |
| Full control of the UI | Build your own on the public API | hours |
| Read and act on bookings from another system | Studio API (authenticated) | hours |
What the API guarantees
Section titled “What the API guarantees”- Server-side truth. The client sends
roomId, date, startTime, durationMinutes. The API computes the price (hourlyRate × minutes / 60), the deposit and validates the room’s hours, notice, horizon and buffers. - No double bookings. A Postgres exclusion constraint on
(room, time range)plus a per-room lock mean two guests can never hold the same slot — whatever the frontend does. - Verified guests. A booking requires a one-time code delivered to a phone number (SMS) or email. No account, no password.
- Money never moves outside Stripe. Card deposits are confirmed only by Stripe’s signed webhook, never by the browser.
What it is not
Section titled “What it is not”- It is not a general-purpose API for the whole Mr Charles platform (lessons, bands, venues, community). Those are reachable only by the official apps for now. If you need them, write to us.
- It does not require API keys. Public endpoints are rate-limited and protected with a captcha on writes; the studio’s slug is the only identifier you need. Studio-side endpoints use the studio member’s normal sign-in.