{"openapi":"3.1.0","info":{"title":"Familyhelp public API","version":"1.0.0","description":"Unauthenticated public endpoints for practice discovery and booking requests. Submitting a booking request does not create a clinical case until the practice confirms.","contact":{"name":"Familyhelp","url":"https://familytherapy.vercel.app"}},"servers":[{"url":"https://api-production-5631.up.railway.app","description":"API origin (browser clients typically use same-origin /backend rewrite)"}],"paths":{"/public/practices/{slug}":{"get":{"operationId":"getPublicPractice","summary":"Get published practice branding and therapists","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public practice profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPractice"}}}},"404":{"description":"Not published or unknown slug"}}}},"/public/practices/{slug}/availability":{"get":{"operationId":"listPublicAvailability","summary":"List open bookable slots","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"clinician_id","in":"query","required":false,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Open slots","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BookableSlot"}}}}}}}},"/public/practices/{slug}/booking-requests":{"post":{"operationId":"createBookingRequest","summary":"Submit a booking request (HITL — practice must confirm)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingRequestCreate"}}}},"responses":{"201":{"description":"Request accepted pending practice review","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingRequest"}}}},"400":{"description":"Invalid clinician or slot"},"429":{"description":"Rate limited"}}}}},"components":{"schemas":{"PublicPractice":{"type":"object","properties":{"slug":{"type":"string"},"display_name":{"type":"string"},"logo_url":{"type":["string","null"]},"bio":{"type":["string","null"]},"therapists":{"type":"array","items":{"$ref":"#/components/schemas/PublicTherapist"}}}},"PublicTherapist":{"type":"object","properties":{"id":{"type":"string"},"full_name":{"type":"string"},"public_bio":{"type":["string","null"]},"specialization":{"type":["string","null"]}}},"BookableSlot":{"type":"object","properties":{"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"clinician_id":{"type":"string"}}},"BookingRequestCreate":{"type":"object","required":["clinician_id","requester_name","requester_email","starts_at","ends_at"],"properties":{"clinician_id":{"type":"string"},"requester_name":{"type":"string"},"requester_email":{"type":"string","format":"email"},"requester_phone":{"type":["string","null"]},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"},"timezone":{"type":"string","default":"UTC"},"note":{"type":["string","null"]}}},"BookingRequest":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string"},"starts_at":{"type":"string","format":"date-time"},"ends_at":{"type":"string","format":"date-time"}}}}}}