Changelog
We add fields without notice. We never remove or rename a field, change a status code or change an error code inside v1.
2026-10
Section titled “2026-10”-
Deprecated Owner-password integrations (
POST /auth/loginfrom a script). They will be removed 90 days after API keys launch; move to a studio API key. Until then such sign-ins are answered withDeprecationandLinkheaders. See Studio back office. -
New Studio API keys: restricted (
rk_) and secret (sk_) keys, created in Studio settings → API keys, bound to one studio, with scopes, 7-day rotation and instant revocation. The studio endpoints accept them asAuthorization: Bearer. New errorsKEY_INVALID,KEY_REVOKED,KEY_EXPIRED,KEY_ENV_MISMATCH,SCOPE_MISSING,KEY_ROUTE_NOT_ALLOWED. See Studio back office. -
Changed
/api/v1/public/*no longer sendsAccess-Control-Allow-Credentials(security hardening). The public API never used cookies; a browserfetchwithcredentials: "include"is now blocked by CORS. Use the default (same-origin) oromit. The SDK and the hosted site were never affected. -
New
rooms[].pricingon the site payload: the room’s full price list (group tiers, time bands, hourly table, duration discounts, a one-linesummary). Rooms with one price get a singlestandardrow. -
New
days[].bandsandpricingon availability, for per-start-time rate hints. -
SDK 0.3.0
client.sites.quote(),flow.quote(),flow.rateAt();groupSizeId/partySizeonflow.hold(); typesRoomPricing,GroupSize,PriceBand,DayBand,PriceLine,Quote. -
New
POST /public/sites/{slug}/rooms/{roomId}/quote: the exact price of a slot before holding it. The hosted booking screen now shows only server-computed prices. -
New
price.lines,price.pricingVersion(andgroupSizeId/groupLabelwhen the room prices by group) on holds and quotes;priceLines,groupSizeId,groupLabel,partySizeon bookings. Older bookings return emptypriceLines. -
New Optional
groupSizeIdandpartySizeon holds, and theGROUP_SIZE_INVALIDerror. Clients that omit them get exactly the same price as before. -
SDK 0.2.0 Languages: one
localeon the client drives the hosted screen, the guest’s messages,Accept-Language, and the SDK’s own strings and formatting (t,format,pick,errorMessage,setLocale). Strings in es, ca, en, fr, pt, it, de. -
New
@mrcharles/sdkon npm and on this site’s CDN (/sdk/v0/): embedded booking screen, headless room-booking flow, teacher offers and slots, deep links. -
New Sandbox mode per studio site, and the permanent
demo-studiosandbox these docs use. -
New These docs redesigned: interactive API reference, go-live checklist, SDK reference, teacher lessons guide.
-
New
stripePublishableKeyin the site payload, so a third-party frontend can mount Stripe’s Payment Element without hardcoding a key. -
New CORS on
/api/v1/public/*now accepts any origin — call the public API straight from a studio’s own website. -
New Embeddable booking screen:
?embed=1drops our header and footer,?date=&start=&duration=&lang=preselect, and the page postsmrcharles:resize/mrcharles:bookedto the parent frame. -
New These docs.
Earlier
Section titled “Earlier”- Guest booking: hold → one-time code → confirmation, with card deposits through Stripe and pay-at-the-studio.
- Hosted studio sites on
<slug>.sites.mrcharles.appand custom domains with TXT verification. - Studio endpoints for site configuration, per-room booking policy and booking actions.
Something missing, or a field you need? developers@mrcharles.app.