Skip to content

Changelog

We add fields without notice. We never remove or rename a field, change a status code or change an error code inside v1.

  • Deprecated Owner-password integrations (POST /auth/login from 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 with Deprecation and Link headers. 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 as Authorization: Bearer. New errors KEY_INVALID, KEY_REVOKED, KEY_EXPIRED, KEY_ENV_MISMATCH, SCOPE_MISSING, KEY_ROUTE_NOT_ALLOWED. See Studio back office.

  • Changed /api/v1/public/* no longer sends Access-Control-Allow-Credentials (security hardening). The public API never used cookies; a browser fetch with credentials: "include" is now blocked by CORS. Use the default (same-origin) or omit. The SDK and the hosted site were never affected.

  • New rooms[].pricing on the site payload: the room’s full price list (group tiers, time bands, hourly table, duration discounts, a one-line summary). Rooms with one price get a single standard row.

  • New days[].bands and pricing on availability, for per-start-time rate hints.

  • SDK 0.3.0 client.sites.quote(), flow.quote(), flow.rateAt(); groupSizeId / partySize on flow.hold(); types RoomPricing, 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 (and groupSizeId / groupLabel when the room prices by group) on holds and quotes; priceLines, groupSizeId, groupLabel, partySize on bookings. Older bookings return empty priceLines.

  • New Optional groupSizeId and partySize on holds, and the GROUP_SIZE_INVALID error. Clients that omit them get exactly the same price as before.

  • SDK 0.2.0 Languages: one locale on 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/sdk on 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-studio sandbox these docs use.

  • New These docs redesigned: interactive API reference, go-live checklist, SDK reference, teacher lessons guide.

  • New stripePublishableKey in 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=1 drops our header and footer, ?date=&start=&duration=&lang= preselect, and the page posts mrcharles:resize / mrcharles:booked to the parent frame.

  • New These docs.

  • Guest booking: hold → one-time code → confirmation, with card deposits through Stripe and pay-at-the-studio.
  • Hosted studio sites on <slug>.sites.mrcharles.app and 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.