Skip to content

Hosted site & custom domain

Every studio on Mr Charles can publish a website without writing anything. It renders from the data the studio already keeps up to date — rooms, prices, photos, hours, address — so there is no second place to maintain.

  • A page per language (Spanish, Catalan, English) with hero, rooms, gear, hours, map and contact.
  • Bookings 24/7 on every room where online booking is enabled.
  • Legal pages (notice, privacy, cookies) built from the legal details the studio fills in.
  • A confirmation message to the guest, a notification to the studio, and a reminder 24 h before.
  • https://<slug>.sites.mrcharles.app, with a certificate, out of the box.
  1. Verify ownership. Studio dashboard → the studio must be verified (tax id, phone code, a document showing the business name; a person reviews it). Publishing is blocked until then — the API answers 403 STUDIO_NOT_VERIFIED.

  2. Fill the website tab. Template (stage or daylight), colours, logo, tagline, about, gallery, WhatsApp and Instagram, legal details.

  3. Enable online booking per room. For each room: minimum / maximum / step duration, payment modes, deposit percentage, cancellation notice, instructions and photos. A room is only bookable when it is active, priced, has hours and is enabled.

  4. Publish. The checklist (GET /studios/{id}/site/checklist) lists what is still missing; when canPublish is true, publishing makes the site live.

  1. Claim the domain in the dashboard (or PUT /studios/{id}/site/domain with {"domain":"studiouno.com"}). You get back the exact records to create:

    {
    "domain": "studiouno.com",
    "cnameTarget": "sites.mrcharles.app",
    "aRecord": "203.0.113.10",
    "txtName": "_mrcharles-verify.studiouno.com",
    "txtValue": "mc-verify-9f3c…"
    }
  2. Create two DNS records at your registrar:

    TypeNameValue
    TXT_mrcharles-verifythe txtValue from the response
    CNAMEwww (or the subdomain you want)sites.mrcharles.app

    For an apex domain (studiouno.com with no www), use an A record pointing at aRecord unless your DNS provider supports CNAME flattening / ALIAS.

  3. Verify. Press Verify (or POST /studios/{id}/site/domain/verify). We look up the TXT record; DNS can take a few minutes, and 409 DOMAIN_UNVERIFIED just means “not visible yet — try again”.

  4. Done. The certificate is issued on the first request to the new hostname. canonicalHost in the site payload flips to your domain, and the slug.sites… address keeps working.

The same payload that renders the hosted site is public, so a directory or a landing page can show live data:

Terminal window
# by slug
curl -s https://api.mrcharles.app/api/v1/public/sites/studio-uno-madrid
# or by hostname — useful if all you have is the domain
curl -s "https://api.mrcharles.app/api/v1/public/sites/resolve?host=studiouno.com"

Both answer 404 when the site is not live. Cache for 60 s; that is what we do. Full shape in Site payload.