{"aam_version":"0.1","site":{"name":"Salon Aurora","domain":"salon-aurora.vercel.app","tos_url":"https://salon-aurora.vercel.app/terms","description":"Holešovický kadeřnický salon. 4 stylisté, dámské + pánské + barvení + balayage. Online rezervace přes AAM endpointy nebo formulář na webu."},"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=salon-aurora.vercel.app","scope_names":{"book:appointment":"book_appointment","cancel:appointment":"cancel_appointment"},"note":"Federated. One signin gives credential reusable across all AAM ID-enabled sites. Recommended."},{"type":"per_site_consent","authorize_url":"https://salon-aurora.vercel.app/api/aam/authorize","token_url":"https://salon-aurora.vercel.app/api/aam/token","consent_url_pattern":"https://salon-aurora.vercel.app/consent/{request_id}","flow":"out_of_band","note":"Self-hosted. No platform dependency. Use if AAM ID isn't acceptable."}],"authorize_url":"https://salon-aurora.vercel.app/api/aam/authorize","token_url":"https://salon-aurora.vercel.app/api/aam/token","flow_description":"RECOMMENDED: get AAM ID credential at https://aam-platform-gamma.vercel.app/id/connect (federated, works across many sites). FALLBACK: per-site consent via authorize_url/consent_url_pattern/token_url.","note":"Read actions (list_services, check_availability) are public, no auth needed."},"actions":[{"id":"list_services","method":"GET","url":"https://salon-aurora.vercel.app/api/services","label":"List services, prices, stylists, opening hours","description":"Returns the salon catalog: every service with price (CZK), duration, category, recommended stylists, and the full stylist roster with bios. Call this FIRST so you know what's actually offered before suggesting a booking. No auth.","params":{},"output_schema":{"salon":{"type":"object"},"services":{"type":"array"},"stylists":{"type":"array"},"opening_hours":{"type":"object"}},"access":"public","auth_required":false,"pricing":"free"},{"id":"check_availability","method":"POST","url":"https://salon-aurora.vercel.app/api/check-availability","label":"Check available time slots","description":"Returns free 30-minute slot start times for a service+date, optionally narrowed to a specific stylist. Slots respect opening hours (Mon–Fri 9–19, Sat 9–15, Sun closed) and the stylist's existing bookings. No auth.","params":{"service_id":{"type":"string"},"stylist_id":{"type":"string","optional":true},"date":{"type":"string","format":"date"}},"output_schema":{"service":{"type":"object"},"date":{"type":"string"},"results":{"type":"array"}},"access":"public","auth_required":false,"pricing":"free"},{"id":"book_appointment","method":"POST","url":"https://salon-aurora.vercel.app/api/book","label":"Book an appointment","description":"Creates a confirmed booking. REQUIRES Bearer token with scope `book_appointment`. customer_name + customer_phone come from the user's consent and are pre-filled — agent doesn't need to ask. Returns booking_id and confirmation_url. Validates the slot is still free (race-safe).","params":{"service_id":{"type":"string"},"stylist_id":{"type":"string"},"date":{"type":"string","format":"date"},"time":{"type":"string","format":"HH:MM"},"customer_name":{"type":"string","optional":true,"note":"overrides consent identity"},"customer_phone":{"type":"string","optional":true},"customer_email":{"type":"string","format":"email","optional":true},"notes":{"type":"string","optional":true}},"output_schema":{"booking_id":{"type":"string"},"confirmation_url":{"type":"string","format":"url"},"booking":{"type":"object"},"message":{"type":"string"}},"access":"authenticated","auth_required":true,"scope":"book_appointment","pricing":"free"},{"id":"cancel_appointment","method":"POST","url":"https://salon-aurora.vercel.app/api/cancel","label":"Cancel a booking","description":"Cancels a confirmed booking by its id. REQUIRES Bearer token with scope `cancel_appointment`. Idempotent.","params":{"booking_id":{"type":"string"},"reason":{"type":"string","optional":true}},"output_schema":{"booking_id":{"type":"string"},"cancelled_at":{"type":"string","format":"date-time"},"message":{"type":"string"}},"access":"authenticated","auth_required":true,"scope":"cancel_appointment","pricing":"free"}]}