{"aam_version":"0.1","site":{"name":"Aurora Hair Studio","domain":"www.whatcanido.dev","page_url":"https://www.whatcanido.dev/bookio/b/aurora-hair-brooklyn","tos_url":"https://www.whatcanido.dev/terms","description":"Four stylists with their own signature. Cuts, color, balayage, and Olaplex treatments in a sunny corner of Williamsburg.","category":"haircut","city":"Brooklyn","district":"Williamsburg","timezone":"America/New_York","currency":"USD","locale":"en-US"},"auth":{"type":"delegated_oauth","required_for":["book_appointment","cancel_appointment"],"accepted_identity_proofs":[{"type":"aam_id","issuer":"https://whatcanido.dev","jwks_url":"https://whatcanido.dev/.well-known/aam-jwks.json","connect_url_pattern":"https://whatcanido.dev/id/connect?agent={agent}&scopes={scopes}&site=bookio:aurora-hair-brooklyn","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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/aam/authorize","token_url":"https://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/aam/token","consent_url_pattern":"https://www.whatcanido.dev/bookio/b/aurora-hair-brooklyn/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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/aam/authorize","token_url":"https://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/aam/token","consent_url_pattern":"https://www.whatcanido.dev/bookio/b/aurora-hair-brooklyn/consent/{request_id}","flow_description":"RECOMMENDED: AAM ID at https://whatcanido.dev/id/connect?scopes=book:appointment&site=bookio:aurora-hair-brooklyn. 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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/services","label":"List services and staff at Aurora Hair Studio","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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/book","label":"Book an appointment at Aurora Hair Studio","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://www.whatcanido.dev/api/bookio/b/aurora-hair-brooklyn/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://www.whatcanido.dev","registry_url":"https://www.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":"eyJhbGciOiJSUzI1NiIsImtpZCI6InByb2QtMWU3ZWIxNjkwNWNmNDlmMCIsInR5cCI6ImFhbS1tYW5pZmVzdCtqd3MifQ.eyJkaWdlc3QiOiIzZWYxNWIzNWU5MTY2MTkzYmFiNWE1YzYzZjE1OGYzYzZmNzJkODY4NGFmMTI3MzRlNzY3OTA0YjcwYmJkMDMyIiwiYWxnIjoiU0hBLTI1NiJ9.APHVoL57-UbNpAWLwWVqoQanQkh8C3xt6_a1-oCXOjpaNPmLTDsRDu_8pxWoWj-aWDkSK9kj8sbtLvZFMglchWga2gSJLepQ_Tmm1cbYBqLATZWEVMuw4cj8pTQLQnlxuKO-bl8DiivgO0nP7abF9R8f5bn0jHDg2N1QU4IJrBZ4DApjxcDvN69B9aR6d-wWuNtigof2_QnUkOPYJC9eTdS6YF5LZUFQVcPuHi8JHgD2alrolXQFkNwwOtwCISSQsE83NdZtABs5o3IVi1jExFvnq4rDIR4msqdSPfph24sUFFgd8Irc9gfRJZYm1NiROnZFtPrMJRD5rDpPLheXXg","digest_alg":"SHA-256","digest":"3ef15b35e9166193bab5a5c63f158f3c6f72d8684af12734e767904b70bbd032","kid":"prod-1e7eb16905cf49f0","signed_at":"2026-05-20T21:43:02.265Z","jwks_url":"https://www.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."}}