{"aam_version":"0.1","site":{"name":"Massage Relax","domain":"bookio.whatcanido.dev","page_url":"https://bookio.whatcanido.dev/bookio/b/massage-relax","tos_url":"https://bookio.whatcanido.dev/terms","description":"Dva maséři s licencí. Masáže klasické, sportovní, lávovými kameny, bankovými pohárky. Po lekci čaj zdarma.","category":"massage","city":"Brno","district":"Brno-střed"},"auth":{"type":"delegated_oauth","required_for":["book_appointment","cancel_appointment"],"accepted_identity_proofs":[{"type":"aam_id","issuer":"https://aam-platform-gamma.vercel.app","jwks_url":"https://aam-platform-gamma.vercel.app/.well-known/aam-jwks.json","connect_url_pattern":"https://aam-platform-gamma.vercel.app/id/connect?agent={agent}&scopes={scopes}&site=bookio:massage-relax","scope_names":{"book:appointment":"book_appointment","cancel:appointment":"cancel_appointment"},"note":"Federated. ONE signin gives a credential reusable across ALL Bookio tenants AND any other AAM ID-enabled site. Highly recommended."},{"type":"per_site_consent","authorize_url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/aam/authorize","token_url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/aam/token","consent_url_pattern":"https://bookio.whatcanido.dev/bookio/b/massage-relax/consent/{request_id}","flow":"out_of_band","note":"Per-tenant only. Token cannot be reused across other tenants. Use only if AAM ID isn't acceptable."}],"authorize_url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/aam/authorize","token_url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/aam/token","consent_url_pattern":"https://bookio.whatcanido.dev/bookio/b/massage-relax/consent/{request_id}","flow_description":"RECOMMENDED: AAM ID at https://aam-platform-gamma.vercel.app/id/connect?scopes=book:appointment&site=bookio:massage-relax. One credential, every Bookio tenant + every other AAM site. FALLBACK: per-tenant consent via authorize_url.","note":"Per-site consent tokens are scoped to this tenant only. AAM ID credentials are scoped to email + scopes, work everywhere."},"actions":[{"id":"list_services","method":"GET","url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/services","label":"List services and staff at Massage Relax","description":"Returns the catalog: every service with price (CZK), duration, recommended staff, and the full staff roster with bios. Call FIRST so you know what's offered before suggesting a booking. No auth.","params":{},"access":"public","auth_required":false,"pricing":"free"},{"id":"check_availability","method":"POST","url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/check-availability","label":"Check available time slots","description":"Returns free 30-minute slot start times for a service+date, optionally narrowed to a specific staff member. Slots respect opening hours and existing bookings.","params":{"service_id":{"type":"string"},"staff_id":{"type":"string","optional":true},"date":{"type":"string","format":"date"}},"access":"public","auth_required":false,"pricing":"free"},{"id":"book_appointment","method":"POST","url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/book","label":"Book an appointment at Massage Relax","description":"Creates a confirmed booking. REQUIRES Bearer with scope book_appointment. Customer name + phone come from the consent token automatically. Race-safe slot check.","params":{"service_id":{"type":"string"},"staff_id":{"type":"string"},"date":{"type":"string","format":"date"},"time":{"type":"string","format":"HH:MM"},"customer_name":{"type":"string","optional":true},"customer_phone":{"type":"string","optional":true},"customer_email":{"type":"string","format":"email","optional":true},"notes":{"type":"string","optional":true}},"access":"authenticated","auth_required":true,"scope":"book_appointment","pricing":"free"},{"id":"cancel_appointment","method":"POST","url":"https://bookio.whatcanido.dev/api/bookio/b/massage-relax/cancel","label":"Cancel a booking","description":"Cancels a confirmed booking by id. REQUIRES Bearer with scope cancel_appointment. Idempotent.","params":{"booking_id":{"type":"string"},"reason":{"type":"string","optional":true}},"access":"authenticated","auth_required":true,"scope":"cancel_appointment","pricing":"free"}],"powered_by":{"platform":"Bookio","platform_url":"https://bookio.whatcanido.dev","registry_url":"https://bookio.whatcanido.dev/api/bookio/registry/tenants","note":"This site uses Bookio as its booking backend. All tenants on Bookio are AAM-enabled with the same action shape — once you've called one, you know how to call them all. Use the registry_url to discover other tenants by category and city."},"aam_signature":{"signature":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImRldi1hNDZhM2MyMjU3ZmIiLCJ0eXAiOiJhYW0tbWFuaWZlc3QrandzIn0.eyJkaWdlc3QiOiIyMzcxN2JmNjVjZThlMmUwYWQ5MjAyOTQ1MjM4MDRjNjY2NTY4ZDYwZjQxOTZjMzM1NTEwOWM5MmVmYmQ1MDA1IiwiYWxnIjoiU0hBLTI1NiJ9.itGx9SccrZkP-oZ79jbtapxN5nkQ51p8fXBUPDYiy3S_Oik6WuPxEDEvLegeGRn3AqCFM1PfXZWoXPDyqKTqOl23sbGHv3ZJS_lU4gA26bfCMuITPHlPUOGfm_ZlsfY4NYuDrTUfcS5i4T5CB7l3ZhwgB3kP-cREuABeCDG4Sk58IU7qMekVhFYFUfb5CMA1dUrHq-Zqv60fCodaRf2O6Xoxc9sv2ujPfnYosPwQhI8XWxQVvrxCmAZ7VgkI3HI1gs7oFh6zwq2hE2EfJ60hb8d3KA9juhFB5WaVs_KKmWTogVB2oA0_1kvxedxqmnGizuZ23bPhtfYSnbyzSJAovQ","digest_alg":"SHA-256","digest":"23717bf65ce8e2e0ad920294523804c666568d60f4196c3355109c92efbd5005","kid":"dev-a46a3c2257fb","signed_at":"2026-05-06T17:08:29.235Z","jwks_url":"https://bookio.whatcanido.dev/.well-known/aam-manifest-jwks.json","note":"Detached JWS over the SHA-256 of canonical manifest body. Verify by re-canonicalizing without aam_signature, comparing the digest to payload.digest, then verifying the JWS with the public key at jwks_url. RFC 7515 § 3.1 / § 5."}}