{"openapi":"3.1.0","info":{"title":"Theravo API","version":"0.1.0","description":"Patient and partner APIs for Theravo, plus public booking availability. Protected operations require a scoped bearer credential. Optional features must be enabled for this installation.","license":{"name":"MIT","url":"https:\/\/opensource.org\/license\/mit\/"}},"servers":[{"url":"https:\/\/api.theravo.de","description":"Production"}],"tags":[{"name":"Public widget","description":"Existing public availability interface."},{"name":"Patient authentication","description":"Implemented membership-scoped email-code authentication and revocable device sessions."},{"name":"Patient booking","description":"Implemented adapters over existing booking, payment and package services."},{"name":"Patient subscriptions","description":"Owned offers, recurring arrangements and subscription management. Requires the corresponding practice features to be enabled."},{"name":"Partner integration","description":"Restricted, independently authenticated tenant-scoped adapter. No vendor compatibility is implied."},{"name":"Patient notifications","description":"Optional generic push, owned by the authenticated patient session. Existing email reminders are independent."},{"name":"Patient account","description":"Owned account administration, separate from financial and care arrangements."}],"paths":{"\/api\/public\/widget\/availability":{"get":{"operationId":"getWidgetAvailability","summary":"Read public widget availability","tags":["Public widget"],"x-implementation-status":"implemented","security":[],"parameters":[{"name":"appointmentTypeId","in":"query","required":true,"description":"Enabled appointment type UUID.","schema":{"type":"string","format":"uuid"}},{"name":"practice","in":"query","description":"Optional matching practice slug.","schema":{"type":"string"}},{"name":"locale","in":"query","description":"Communication locale; the existing controller normalizes\/falls back.","schema":{"type":"string"}},{"name":"days","in":"query","description":"Existing behavior clamps integer values to 1\u201390.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetAvailability"}}}},"400":{"description":"Invalid appointment type ID","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetError"}}}},"404":{"description":"Widget\/type unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetError"}}}},"429":{"description":"Rate limited","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/WidgetError"}}}}}},"options":{"operationId":"widgetPreflight","summary":"Public widget CORS preflight","tags":["Public widget"],"x-implementation-status":"implemented","security":[],"responses":{"204":{"description":"Allowed cross-origin preflight"}}}},"\/api\/patient\/v1\/appointments":{"get":{"operationId":"listAppointmentList","summary":"List owned appointments","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]},"post":{"operationId":"createBooking","summary":"Create one booking","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"201":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BookingRequest"}}}},"parameters":[{"$ref":"#\/components\/parameters\/IdempotencyKey"}]}},"\/api\/patient\/v1\/packages":{"get":{"operationId":"listSessionPackageList","summary":"List owned packages","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SessionPackageList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/appointment-types":{"get":{"operationId":"listAppointmentTypeList","summary":"List owned appointment-types","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentTypeList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/slots":{"get":{"operationId":"listAvailableSlotList","summary":"List owned slots","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AvailableSlotList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}},{"name":"appointmentTypeId","in":"query","required":true,"schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/offers":{"get":{"operationId":"listSubscriptionOfferList","summary":"List owned offers","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionOfferList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/subscriptions":{"get":{"operationId":"listPatientSubscriptionList","summary":"List owned subscriptions","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientSubscriptionList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/auth\/challenges":{"post":{"operationId":"requestCode","summary":"requestCode","tags":["Patient authentication"],"x-implementation-status":"implemented","security":[],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/CodeChallenge"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RequestCode"}}}}}},"\/api\/patient\/v1\/auth\/verify":{"post":{"operationId":"verifyCode","summary":"verifyCode","tags":["Patient authentication"],"x-implementation-status":"implemented","security":[],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientSession"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/VerifyCode"}}}}}},"\/api\/patient\/v1\/auth\/refresh":{"post":{"operationId":"refreshSession","summary":"refreshSession","tags":["Patient authentication"],"x-implementation-status":"implemented","security":[],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientSession"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RefreshSession"}}}}}},"\/api\/patient\/v1\/auth\/session":{"delete":{"operationId":"logoutSession","summary":"Revoke the current session","tags":["Patient authentication"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"204":{"description":"Completed"},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/appointments\/{id}":{"get":{"operationId":"getAppointment","summary":"Read an owned appointment","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/quotes":{"post":{"operationId":"quoteBooking","summary":"Get the server-authoritative price and coverage","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BookingQuote"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BookingRequest"}}}}}},"\/api\/patient\/v1\/appointments\/{id}\/cancel":{"post":{"operationId":"cancelAppointment","summary":"Cancel an owned appointment","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentMutation"}}}}}},"\/api\/patient\/v1\/appointments\/{id}\/reschedule":{"post":{"operationId":"rescheduleAppointment","summary":"Reschedule while retaining valid coverage","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RescheduleRequest"}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}]}},"\/api\/patient\/v1\/appointments\/{id}\/checkout":{"post":{"operationId":"createCheckout","summary":"Start or recover checkout","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Checkout"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}]}},"\/api\/patient\/v1\/payments\/{id}":{"get":{"operationId":"getPayment","summary":"Read owned payment status","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Checkout"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/offers\/{id}":{"get":{"operationId":"getSubscriptionOffer","summary":"Read an assigned offer","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionOffer"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/subscriptions\/{id}":{"get":{"operationId":"getPatientSubscription","summary":"Read an owned subscription","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientSubscription"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/auth\/me":{"get":{"operationId":"getPatientProfile","summary":"getPatientProfile","tags":["Patient authentication"],"security":[{"patientBearer":[]}],"x-implementation-status":"implemented","responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientProfile"}}}},"401":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/auth\/sessions":{"get":{"operationId":"listPatientSessions","summary":"listPatientSessions","tags":["Patient authentication"],"security":[{"patientBearer":[]}],"x-implementation-status":"implemented","responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientDeviceSessions"}}}},"401":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}},"delete":{"operationId":"revokePatientSessions","summary":"revokePatientSessions","tags":["Patient authentication"],"security":[{"patientBearer":[]}],"x-implementation-status":"implemented","responses":{"204":{"description":"Session revoked"},"401":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/auth\/sessions\/{id}":{"delete":{"operationId":"revokePatientSession","summary":"revokePatientSession","tags":["Patient authentication"],"security":[{"patientBearer":[]}],"x-implementation-status":"implemented","responses":{"204":{"description":"Session revoked"},"401":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request could not be completed","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"\/api\/integration\/v1\/availability\/{id}":{"get":{"operationId":"getPartnerAvailability","summary":"getPartnerAvailability","tags":["Partner integration"],"security":[{"partnerBearer":[]}],"x-required-scopes":["availability:read"],"x-implementation-status":"implemented","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PartnerAvailability"}}}},"400":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"403":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/integration\/v1\/appointments\/{id}":{"get":{"operationId":"getPartnerAppointment","summary":"getPartnerAppointment","tags":["Partner integration"],"security":[{"partnerBearer":[]}],"x-required-scopes":["appointments:read"],"x-implementation-status":"implemented","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PartnerAppointment"}}}},"400":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"403":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/integration\/v1\/patients\/{id}\/appointments":{"post":{"operationId":"createPartnerBooking","summary":"createPartnerBooking","tags":["Partner integration"],"security":[{"partnerBearer":[]}],"x-required-scopes":["appointments:write"],"x-implementation-status":"implemented","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"responses":{"201":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"403":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BookingRequest"}}}}}},"\/api\/integration\/v1\/appointments\/{id}\/cancel":{"post":{"operationId":"cancelPartnerAppointment","summary":"cancelPartnerAppointment","tags":["Partner integration"],"security":[{"partnerBearer":[]}],"x-required-scopes":["appointments:write"],"x-implementation-status":"implemented","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"403":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentMutation"}}}}}},"\/api\/integration\/v1\/appointments\/{id}\/reschedule":{"post":{"operationId":"reschedulePartnerAppointment","summary":"reschedulePartnerAppointment","tags":["Partner integration"],"security":[{"partnerBearer":[]}],"x-required-scopes":["appointments:write"],"x-implementation-status":"implemented","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Appointment"}}}},"400":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"403":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Request rejected","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RescheduleRequest"}}}}}},"\/api\/patient\/v1\/offers\/{id}\/accept":{"post":{"operationId":"acceptSubscriptionOffer","summary":"Accept an owned, practice-approved offer","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferDecisionInput"}}}},"responses":{"200":{"description":"Current offer; acceptance is separate from payment.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionOffer"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Offer, preview or ownership conflict.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/offers\/{id}\/decline":{"post":{"operationId":"declineSubscriptionOffer","summary":"Decline an owned, practice-approved offer","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferDecisionInput"}}}},"responses":{"200":{"description":"Current offer; acceptance is separate from payment.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionOffer"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Offer, preview or ownership conflict.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/recurrence-requests":{"get":{"operationId":"listRecurrenceRequests","summary":"List own pending requests without reserving a slot","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurrenceRequestList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]},"post":{"operationId":"requestRecurringPattern","summary":"Request a pattern for practice review; no approval, hold or payment","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurrenceRequestInput"}}}},"responses":{"201":{"description":"Pending practice approval.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurrenceRequest"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Offer, preview or ownership conflict.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/subscriptions\/{id}\/payment":{"get":{"operationId":"getSubscriptionPayment","summary":"Read owned billing setup and settlement status","description":"Private, server-authoritative patient recurring billing. New billing defaults off; current ownership, accepted terms and the immutable receiving account govern every action. A redirect never grants paid coverage.","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned patient subscription identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current state. Hosted URLs are private and short-lived.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionPaymentStatus"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/subscriptions\/{id}\/payment\/setup":{"post":{"operationId":"startSubscriptionPaymentSetup","summary":"Start or reopen hosted payment-method setup","description":"Private, server-authoritative patient recurring billing. New billing defaults off; current ownership, accepted terms and the immutable receiving account govern every action. A redirect never grants paid coverage.","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned patient subscription identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EmptyObject"}}}},"responses":{"200":{"description":"Current state. Hosted URLs are private and short-lived.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionPaymentStatus"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"202":{"description":"Prepared request remains pending; reopen status without creating another charge.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionPaymentStatus"}}}}}}},"\/api\/patient\/v1\/subscriptions\/{id}\/payment\/recovery":{"get":{"operationId":"getSubscriptionPaymentRecovery","summary":"Read owned card and invoice recovery actions","description":"Private, server-authoritative patient recurring billing. New billing defaults off; current ownership, accepted terms and the immutable receiving account govern every action. A redirect never grants paid coverage.","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned patient subscription identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current state. Hosted URLs are private and short-lived.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionPaymentRecovery"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}},"post":{"operationId":"startSubscriptionPaymentRecovery","summary":"Start hosted card recovery for the existing arrangement","description":"Private, server-authoritative patient recurring billing. New billing defaults off; current ownership, accepted terms and the immutable receiving account govern every action. A redirect never grants paid coverage.","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned patient subscription identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/EmptyObject"}}}},"responses":{"200":{"description":"Current state. Hosted URLs are private and short-lived.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/SubscriptionPaymentRecovery"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/recurring-arrangements":{"get":{"operationId":"listRecurringArrangements","summary":"List owned recurring care arrangements","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringArrangementList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/recurring-arrangements\/{id}":{"get":{"operationId":"getRecurringArrangement","summary":"Read an owned recurring care arrangement","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringArrangement"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}]}},"\/api\/patient\/v1\/subscription-plans":{"get":{"operationId":"listManagedSubscriptionPlans","summary":"List approved practice plans; an assigned accepted offer is still required","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ManagedSubscriptionPlanList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/recurring-arrangements\/{id}\/preview":{"post":{"operationId":"previewRecurringChange","summary":"Preview an owned single cancellation or end boundary","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringChangePreview"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Stale preview, forbidden lifecycle action or request conflict.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringChangeInput"}}}}}},"\/api\/patient\/v1\/recurring-arrangements\/{id}\/changes":{"post":{"operationId":"applyRecurringChange","summary":"Apply the same signed preview once; no provider write occurs in this transaction","tags":["Patient subscriptions"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringChangeResult"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Stale preview, forbidden lifecycle action or request conflict.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"$ref":"#\/components\/parameters\/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RecurringChangeApplyInput"}}}}}},"\/api\/patient\/v1\/appointments\/{id}\/preview":{"post":{"operationId":"previewAppointmentChange","summary":"Preview own appointment change and funding consequences","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentChangePreview"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentChangeRequest"}}}}}},"\/api\/patient\/v1\/appointments\/{id}\/reschedule-slots":{"get":{"operationId":"listRescheduleSlots","summary":"List targets under existing appointment rescheduling policy","tags":["Patient booking"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Success","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/AppointmentChangeSlotList"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Conflict or idempotency mismatch","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Owned resource identifier.","schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","description":"Bounded page size.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","description":"Opaque cursor returned by the previous page.","schema":{"type":"string","maxLength":512}}]}},"\/api\/patient\/v1\/notification-preferences":{"get":{"operationId":"getNotificationSettings","summary":"Read notification preferences and current device availability","description":"Private and no-store. Patient\/practice\/session identity comes only from bearer authentication. Push is optional and defaults off at deployment; provider registration is never a login prerequisite.","tags":["Patient notifications"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Current owned state","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotificationSettings"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}},"put":{"operationId":"updateNotificationPreferences","summary":"Replace preferences with optimistic version checking","description":"Private and no-store. Patient\/practice\/session identity comes only from bearer authentication. Push is optional and defaults off at deployment; provider registration is never a login prerequisite.","tags":["Patient notifications"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Current owned state","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotificationSettings"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotificationPreferences"}}}}}},"\/api\/patient\/v1\/push\/device":{"put":{"operationId":"registerPushDevice","summary":"Register or rotate the current session device after explicit consent","description":"Private and no-store. Patient\/practice\/session identity comes only from bearer authentication. Push is optional and defaults off at deployment; provider registration is never a login prerequisite.","tags":["Patient notifications"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Current owned state","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/NotificationSettings"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PushDeviceInput"}}}}},"delete":{"operationId":"removePushDevice","summary":"Remove and erase the current session device token","description":"Private and no-store. Patient\/practice\/session identity comes only from bearer authentication. Push is optional and defaults off at deployment; provider registration is never a login prerequisite.","tags":["Patient notifications"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"204":{"description":"Device removed; repeated removal is harmless"}}}},"\/api\/patient\/v1\/notifications\/{id}":{"get":{"operationId":"getPatientNotification","summary":"Resolve a generic push ID to a current owned resource","description":"Private and no-store. Patient\/practice\/session identity comes only from bearer authentication. Push is optional and defaults off at deployment; provider registration is never a login prerequisite.","tags":["Patient notifications"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"Owned patient subscription identifier.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current owned state","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientNotification"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}}},"\/api\/patient\/v1\/account\/deletion-request":{"get":{"operationId":"getPatientDeletionStatus","summary":"Read own deletion request and outstanding arrangement counts","description":"Current authenticated practice\/account only. This reports a durable request, not completed erasure. Account deletion, appointment cancellation and payment ending are distinct actions.","tags":["Patient account"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"200":{"description":"Current owned state","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientDeletionStatus"}}}},"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}}}},"post":{"operationId":"requestPatientAccountDeletion","summary":"Initiate deletion review without cancelling care or billing","description":"Current authenticated practice\/account only. This reports a durable request, not completed erasure. Account deletion, appointment cancellation and payment ending are distinct actions.","tags":["Patient account"],"x-implementation-status":"implemented","security":[{"patientBearer":[]}],"responses":{"400":{"description":"Invalid request","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"401":{"description":"Authentication required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"404":{"description":"Resource unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"409":{"description":"Ownership, configuration, terms or idempotency conflict","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"429":{"description":"Too many attempts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"503":{"description":"Provider temporarily unavailable","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/ApiError"}}}},"202":{"description":"Request durably saved; erasure has not been completed. Repeated requests return the same owned case.","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientDeletionStatus"}}}}},"requestBody":{"required":true,"content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PatientDeletionInput"}}}}}}},"components":{"securitySchemes":{"patientBearer":{"type":"http","scheme":"bearer","bearerFormat":"opaque","description":"Short-lived patient access credential scoped to a verified account and practice."},"partnerBearer":{"type":"http","scheme":"bearer","bearerFormat":"opaque","description":"Approved tenant-scoped integration credential; never a patient credential."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Actor\/tenant\/action-scoped key retained for at least 72 hours; changed payload reuse returns 409.","schema":{"type":"string","minLength":16,"maxLength":128}}},"schemas":{"WidgetError":{"type":"object","properties":{"error":{"type":"string","enum":["invalid_request","not_found","temporarily_unavailable"]}},"required":["error"],"additionalProperties":false},"WidgetSlot":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"label":{"type":"string"},"bookingUrl":{"type":"string","format":"uri"}},"required":["id","start","end","label","bookingUrl"],"additionalProperties":false},"WidgetAvailability":{"type":"object","properties":{"practice":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"defaultLocale":{"type":"string"}},"required":["name","slug","defaultLocale"],"additionalProperties":false},"appointmentType":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"durationMinutes":{"type":"integer","minimum":1},"price":{"oneOf":[{"type":"object","properties":{"amount":{"type":"number","minimum":0},"currency":{"type":"string"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"location":{"type":"object","properties":{"type":{"type":"string","enum":["in_person","phone","online"]},"label":{"type":["string","null"]},"address":{"type":["string","null"]}},"required":["type","label","address"],"additionalProperties":false}},"required":["id","name","durationMinutes","price","location"],"additionalProperties":false},"privacyNoticeUrl":{"type":"string","format":"uri"},"bookingPageUrl":{"type":"string","format":"uri"},"timezone":{"type":"string"},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"label":{"type":"string"},"slots":{"type":"array","items":{"$ref":"#\/components\/schemas\/WidgetSlot"}}},"required":["date","label","slots"],"additionalProperties":false}}},"required":["practice","appointmentType","privacyNoticeUrl","bookingPageUrl","timezone","days"],"additionalProperties":false},"Money":{"type":"object","properties":{"amountMinor":{"type":"integer","minimum":0},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["amountMinor","currency"],"additionalProperties":false,"description":"Integer minor units. The legacy widget amount stays decimal for compatibility."},"ApiError":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["code","message"],"additionalProperties":false},"requestId":{"type":"string","format":"uuid"}},"required":["error","requestId"],"additionalProperties":false},"Page":{"type":"object","properties":{"nextCursor":{"type":["string","null"]}},"required":["nextCursor"],"additionalProperties":false},"Appointment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"appointmentTypeId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["pending_payment","pending_therapist_approval","proposed","confirmed","rescheduled","booked","cancelled","cancelled_by_patient","expired"]},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"version":{"type":"integer","minimum":1},"paymentStatus":{"type":"string"},"paymentSource":{"type":"string","enum":["normal_payment","session_package","appointment_credit","no_payment_required"]},"permittedActions":{"type":"array","items":{"type":"string","enum":["cancel","reschedule","pay"]}}},"required":["id","appointmentTypeId","status","startsAt","endsAt","timezone","version","paymentStatus","paymentSource","permittedActions"],"additionalProperties":false},"SessionPackage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"appointmentTypeId":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"type":"string"},"available":{"type":"integer","minimum":0},"reserved":{"type":"integer","minimum":0},"consumed":{"type":"integer","minimum":0},"expiresAt":{"type":["string","null"],"format":"date-time"}},"required":["id","appointmentTypeId","name","status","available","reserved","consumed","expiresAt"],"additionalProperties":false},"Recurrence":{"type":"object","properties":{"intervalWeeks":{"type":"integer","enum":[1,2,3]},"weekday":{"type":"integer","minimum":1,"maximum":7},"localStart":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"},"anchorDate":{"type":"string","format":"date"},"timezone":{"type":"string"}},"required":["intervalWeeks","weekday","localStart","anchorDate","timezone"],"additionalProperties":false},"BillingTerms":{"type":"object","properties":{"price":{"$ref":"#\/components\/schemas\/Money"},"intervalWeeks":{"type":"integer","enum":[1,2,3]},"sessionsPerPeriod":{"type":"integer","minimum":1},"firstChargeAt":{"type":"string","format":"date-time"},"termsVersion":{"type":"string"}},"required":["price","intervalWeeks","sessionsPerPeriod","firstChargeAt","termsVersion"],"additionalProperties":false},"SubscriptionOffer":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"appointmentTypeId":{"type":"string","format":"uuid"},"recurrence":{"$ref":"#\/components\/schemas\/Recurrence"},"billing":{"oneOf":[{"$ref":"#\/components\/schemas\/OfferBillingTerms"},{"type":"null"}]},"expiresAt":{"type":"string","format":"date-time"},"version":{"type":"integer","minimum":1},"permittedActions":{"type":"array","items":{"type":"string","enum":["accept","decline"]}},"agreementId":{"type":"string","format":"uuid"},"appointmentTypeName":{"type":"string","minLength":1,"maxLength":191},"status":{"type":"string","enum":["offered","accepted","declined","expired","withdrawn"]},"approvalStatus":{"type":"string","const":"approved"},"termsHash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"cancellationDeadlineHours":{"type":"integer","minimum":0},"billingStatus":{"type":"string","enum":["not_required","not_started","draft","pending_setup","awaiting_payment","active","payment_attention","paused","ended"]},"subscriptionId":{"type":["string","null"],"format":"uuid"},"firstServiceAt":{"type":"string","format":"date-time"},"firstOccurrences":{"type":"array","maxItems":6,"items":{"$ref":"#\/components\/schemas\/OfferOccurrence"}},"therapistName":{"type":"string","maxLength":191,"description":"Treating practitioner display name for this owned resource."}},"required":["id","appointmentTypeId","recurrence","billing","expiresAt","version","permittedActions","agreementId","appointmentTypeName","status","approvalStatus","termsHash","cancellationDeadlineHours","billingStatus","subscriptionId","firstServiceAt","firstOccurrences"],"additionalProperties":false},"PatientSubscription":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agreementId":{"type":"string","format":"uuid"},"agreementVersion":{"type":"integer","minimum":1},"version":{"type":"integer","minimum":1},"subscriptionId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"appointmentTypeId":{"type":"string","format":"uuid"},"appointmentTypeName":{"type":"string"},"scheduleStatus":{"type":"string","enum":["draft","offered","accepted","scheduled","paused","ended"]},"billingStatus":{"type":"string","enum":["not_required","draft","pending_setup","awaiting_payment","active","payment_attention","paused","ended"]},"recurrence":{"$ref":"#\/components\/schemas\/ManagedRecurrence"},"billing":{"oneOf":[{"$ref":"#\/components\/schemas\/ManagedBillingTerms"},{"type":"null"}]},"nextPaymentAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"ownershipEndsAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"pauseUntil":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"providerStopPending":{"type":"boolean"},"providerStoppedAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextOccurrences":{"type":"array","items":{"$ref":"#\/components\/schemas\/ManagedOccurrence"},"maxItems":6},"coverage":{"type":"array","items":{"$ref":"#\/components\/schemas\/ManagedSessionCoverage"},"maxItems":100},"permittedActions":{"type":"array","items":{"type":"string","enum":["end"]}},"therapistName":{"type":"string","maxLength":191,"description":"Treating practitioner display name for this owned resource."}},"required":["id","agreementId","agreementVersion","version","subscriptionId","appointmentTypeId","appointmentTypeName","scheduleStatus","billingStatus","recurrence","billing","nextPaymentAt","ownershipEndsAt","pauseUntil","providerStopPending","providerStoppedAt","nextOccurrences","coverage","permittedActions"],"additionalProperties":false},"RequestCode":{"type":"object","properties":{"practice":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{0,190}$"},"email":{"type":"string","format":"email","maxLength":191}},"required":["practice","email"],"additionalProperties":false},"CodeChallenge":{"type":"object","properties":{"challengeId":{"type":"string","format":"uuid"},"expiresAt":{"type":"string","format":"date-time"}},"required":["challengeId","expiresAt"],"additionalProperties":false},"VerifyCode":{"type":"object","properties":{"challengeId":{"type":"string","format":"uuid"},"code":{"type":"string","pattern":"^[0-9]{6}$"},"deviceName":{"type":"string","maxLength":80}},"required":["challengeId","code"],"additionalProperties":false},"RefreshSession":{"type":"object","properties":{"refreshToken":{"type":"string","minLength":32,"maxLength":512}},"required":["refreshToken"],"additionalProperties":false},"PatientSession":{"type":"object","properties":{"accessToken":{"type":"string","minLength":32},"refreshToken":{"type":"string","minLength":32},"expiresAt":{"type":"string","format":"date-time"},"sessionId":{"type":"string","format":"uuid"},"practiceId":{"type":"string","format":"uuid"}},"required":["accessToken","refreshToken","expiresAt","sessionId","practiceId"],"additionalProperties":false},"BookingRequest":{"type":"object","properties":{"slotId":{"type":"string","format":"uuid"},"locationType":{"type":"string","enum":["in_person","video","phone"]},"creditId":{"type":"string","format":"uuid"},"phone":{"type":"string","maxLength":64},"message":{"type":"string","maxLength":500},"intakeNote":{"type":"string","maxLength":2000},"intakeConsent":{"type":"boolean"},"quoteToken":{"type":"string","maxLength":128,"description":"Five-minute signed confirmation of current server quote. Optional for supported legacy clients."}},"required":["slotId","locationType"],"additionalProperties":false},"AppointmentType":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"durationMinutes":{"type":"integer","minimum":1},"price":{"$ref":"#\/components\/schemas\/Money"},"locationTypes":{"type":"array","items":{"type":"string","enum":["in_person","video","phone"]}}},"required":["id","name","durationMinutes","price","locationTypes"],"additionalProperties":false},"AvailableSlot":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"appointmentTypeId":{"type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["id","appointmentTypeId","startsAt","endsAt","timezone"],"additionalProperties":false},"BookingQuote":{"type":"object","properties":{"slotId":{"type":"string","format":"uuid"},"price":{"$ref":"#\/components\/schemas\/Money"},"paymentRequired":{"type":"boolean"},"coverageSource":{"type":"string","enum":["normal_payment","session_package","appointment_credit","no_payment_required"]},"expiresAt":{"type":"string","format":"date-time"},"requirements":{"type":"object","properties":{"phone":{"type":"boolean"},"message":{"type":"boolean"},"intake":{"type":"boolean"}},"required":["phone","message","intake"],"additionalProperties":false},"quoteToken":{"type":"string","maxLength":128,"description":"Five-minute signed confirmation of current server quote. Optional for supported legacy clients."}},"required":["slotId","price","paymentRequired","coverageSource","expiresAt","requirements"],"additionalProperties":false},"Checkout":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","requires_action","paid","failed","cancelled","expired","refunded"]},"url":{"type":["string","null"],"format":"uri"}},"required":["id","status","url"],"additionalProperties":false},"AppointmentList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Appointment"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"SessionPackageList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/SessionPackage"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"AppointmentTypeList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AppointmentType"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"AvailableSlotList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AvailableSlot"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"SubscriptionOfferList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/SubscriptionOffer"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"PatientSubscriptionList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PatientSubscription"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"PatientProfile":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"locale":{"type":"string","enum":["de","en","pl"]},"practice":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["id","slug","name"],"additionalProperties":false}},"required":["id","name","email","locale","practice"],"additionalProperties":false},"PatientDeviceSession":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"deviceName":{"type":"string","maxLength":80},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"current":{"type":"boolean"}},"required":["id","deviceName","createdAt","lastUsedAt","current"],"additionalProperties":false},"PatientDeviceSessions":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/PatientDeviceSession"}}},"required":["data"],"additionalProperties":false},"AppointmentMutation":{"type":"object","properties":{"version":{"type":"integer","minimum":1},"previewToken":{"type":"string","maxLength":128,"description":"Optional signed preview confirmation; required by the native UI. Legacy clients remain supported."}},"required":["version"],"additionalProperties":false},"RescheduleRequest":{"type":"object","properties":{"slotId":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"previewToken":{"type":"string","maxLength":128,"description":"Optional signed preview confirmation; required by the native UI. Legacy clients remain supported."}},"required":["slotId","version"],"additionalProperties":false},"PartnerAvailability":{"type":"object","properties":{"appointmentTypeId":{"type":"string","format":"uuid"},"timezone":{"type":"string"},"slots":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"}},"required":["id","startsAt","endsAt"],"additionalProperties":false}}},"required":["appointmentTypeId","timezone","slots"],"additionalProperties":false},"PartnerAppointment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"status":{"type":"string"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"appointmentTypeId":{"type":["string","null"],"format":"uuid"}},"required":["id","version","status","startsAt","endsAt","appointmentTypeId"],"additionalProperties":false},"PartnerEvent":{"type":"object","properties":{"event_id":{"type":"string","format":"uuid"},"schema_version":{"type":"integer","const":1},"type":{"type":"string","enum":["appointment.created","appointment.updated","appointment.rescheduled","appointment.cancelled"]},"tenant_reference":{"type":"string","format":"uuid"},"resource_reference":{"type":"string","format":"uuid"},"resource_version":{"type":"integer","minimum":1},"occurred_at":{"type":"string","format":"date-time"},"correlation_id":{"type":"string","format":"uuid"},"data":{"type":"object","additionalProperties":false}},"required":["event_id","schema_version","type","tenant_reference","resource_reference","resource_version","occurred_at","correlation_id","data"],"additionalProperties":false},"OfferBillingTerms":{"type":"object","properties":{"price":{"$ref":"#\/components\/schemas\/Money"},"intervalWeeks":{"type":"integer","enum":[1,2,3]},"sessionsPerPeriod":{"type":"integer","minimum":1},"firstChargeAt":{"type":"string","format":"date-time"},"termsVersion":{"type":"string"},"planVersion":{"type":"integer","minimum":1},"terms":{"type":"object","properties":{"seller":{"type":"string","maxLength":10000},"taxTreatment":{"type":"string","maxLength":10000},"renewal":{"type":"string","maxLength":10000},"cancellation":{"type":"string","maxLength":10000},"grace":{"type":"string","maxLength":10000},"refunds":{"type":"string","maxLength":10000},"exceptions":{"type":"string","maxLength":10000},"serviceCategory":{"type":"string","maxLength":10000,"enum":["in_person","live_one_to_one","group","digital"]}},"required":["seller","taxTreatment","renewal","cancellation","grace","refunds","exceptions","serviceCategory"],"additionalProperties":false},"coveragePolicy":{"oneOf":[{"$ref":"#\/components\/schemas\/CoveragePolicy"},{"type":"null"}]},"planId":{"type":"string","format":"uuid","description":"Immutable financial SKU version identifier."}},"required":["price","intervalWeeks","sessionsPerPeriod","firstChargeAt","termsVersion","planVersion","terms"],"additionalProperties":false},"OfferOccurrence":{"type":"object","properties":{"date":{"type":"string","format":"date"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"problem":{"type":["string","null"],"enum":[null,"holiday","absence","slot_conflict","rescheduled","patient_cancelled","practice_cancelled","rule_changed"]}},"required":["date","startsAt","endsAt","problem"],"additionalProperties":false},"OfferDecisionInput":{"type":"object","properties":{"version":{"type":"integer","minimum":1},"termsHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["version","termsHash"],"additionalProperties":false},"RecurrenceRequestInput":{"type":"object","properties":{"appointmentTypeId":{"type":"string","format":"uuid"},"anchorDate":{"type":"string","format":"date"},"localStart":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"},"intervalWeeks":{"type":"integer","enum":[1,2,3]},"effectiveUntil":{"type":["string","null"],"format":"date"},"locationType":{"type":"string","enum":["in_person","video","phone"]}},"required":["appointmentTypeId","anchorDate","localStart","intervalWeeks","locationType"],"additionalProperties":false},"RecurrenceRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","const":"pending_approval"},"approvalStatus":{"type":"string","const":"not_approved"},"reserved":{"type":"boolean","const":false},"appointmentTypeId":{"type":"string","format":"uuid"},"requestedAt":{"type":"string","format":"date-time"},"recurrence":{"$ref":"#\/components\/schemas\/Recurrence"}},"required":["id","status","approvalStatus","reserved","appointmentTypeId","requestedAt","recurrence"],"additionalProperties":false},"RecurrenceRequestList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/RecurrenceRequest"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"CoveragePolicy":{"type":"object","additionalProperties":false,"properties":{"timelyCancellation":{"type":"string","enum":["restore","consume"]},"lateCancellation":{"type":"string","enum":["restore","consume"]},"therapistCancellation":{"type":"string","enum":["restore"]},"noShow":{"type":"string","enum":["restore","consume"]},"fullRefund":{"type":"string","enum":["review","revoke_unused"]},"partialRefund":{"type":"string","enum":["review"]},"dispute":{"type":"string","enum":["review"]},"validity":{"type":"string","enum":["no_expiry","period_end"]}},"required":["timelyCancellation","lateCancellation","therapistCancellation","noShow","fullRefund","partialRefund","dispute","validity"]},"EmptyObject":{"type":"object","properties":[],"additionalProperties":false},"SubscriptionPaymentStatus":{"type":"object","additionalProperties":false,"properties":{"subscriptionId":{"type":"string","format":"uuid"},"billingStatus":{"type":"string","enum":["draft","pending_setup","awaiting_payment","active","payment_attention","paused","ended"]},"setupStatus":{"type":"string","enum":["not_started","setup_requested","awaiting_setup","authorizing_schedule","awaiting_payment","active","payment_attention","paused","ended","expired","compensation_required"]},"checkoutUrl":{"type":["string","null"],"format":"uri"},"checkoutExpiresAt":{"type":["string","null"],"format":"date-time"},"firstChargeAt":{"type":"string","format":"date-time"},"reviewRequired":{"type":"boolean"},"canStartSetup":{"type":"boolean"}},"required":["subscriptionId","billingStatus","setupStatus","checkoutUrl","checkoutExpiresAt","firstChargeAt","reviewRequired","canStartSetup"]},"SubscriptionPaymentRecovery":{"type":"object","additionalProperties":false,"properties":{"subscriptionId":{"type":"string","format":"uuid"},"paymentMethodStatus":{"type":"string","enum":["not_started","pending","authorizing","complete","expired","superseded"]},"paymentMethodUrl":{"type":["string","null"],"format":"uri"},"invoiceUrl":{"type":["string","null"],"format":"uri"},"canUpdatePaymentMethod":{"type":"boolean"}},"required":["subscriptionId","paymentMethodStatus","paymentMethodUrl","invoiceUrl","canUpdatePaymentMethod"]},"ManagedRecurrence":{"type":"object","properties":{"intervalWeeks":{"type":"integer","enum":[1,2,3]},"weekday":{"type":"integer","minimum":1,"maximum":7},"localStart":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$"},"anchorDate":{"type":"string","format":"date"},"timezone":{"type":"string"},"effectiveFrom":{"type":"string","format":"date"},"effectiveUntil":{"oneOf":[{"type":"string","format":"date"},{"type":"null"}]},"version":{"type":"integer","minimum":1},"durationMinutes":{"type":"integer","minimum":1},"locationType":{"type":"string","enum":["video","phone","in_person"]}},"required":["intervalWeeks","weekday","localStart","anchorDate","timezone","effectiveFrom","effectiveUntil","version","durationMinutes","locationType"],"additionalProperties":false},"ManagedSubscriptionPlan":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"name":{"type":"string"},"appointmentTypeId":{"type":"string","format":"uuid"},"price":{"$ref":"#\/components\/schemas\/Money"},"intervalWeeks":{"type":"integer","enum":[1,2,3]},"sessionsPerPeriod":{"type":"integer","const":1},"termsVersion":{"type":"string","pattern":"^[a-f0-9]{64}$"},"terms":{"type":"object","properties":{"seller":{"type":"string","maxLength":10000},"taxTreatment":{"type":"string","maxLength":10000},"renewal":{"type":"string","maxLength":10000},"cancellation":{"type":"string","maxLength":10000},"grace":{"type":"string","maxLength":10000},"refunds":{"type":"string","maxLength":10000},"exceptions":{"type":"string","maxLength":10000},"serviceCategory":{"type":"string","maxLength":10000,"enum":["in_person","live_one_to_one","group","digital"]}},"required":["seller","taxTreatment","renewal","cancellation","grace","refunds","exceptions","serviceCategory"],"additionalProperties":false},"coveragePolicy":{"oneOf":[{"$ref":"#\/components\/schemas\/CoveragePolicy"},{"type":"null"}]},"requiresAssignedOffer":{"type":"boolean","const":true}},"required":["id","version","name","appointmentTypeId","price","intervalWeeks","sessionsPerPeriod","termsVersion","terms","coveragePolicy","requiresAssignedOffer"],"additionalProperties":false},"ManagedBillingTerms":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"name":{"type":"string"},"appointmentTypeId":{"type":"string","format":"uuid"},"price":{"$ref":"#\/components\/schemas\/Money"},"intervalWeeks":{"type":"integer","enum":[1,2,3]},"sessionsPerPeriod":{"type":"integer","const":1},"termsVersion":{"type":"string","pattern":"^[a-f0-9]{64}$"},"terms":{"type":"object","properties":{"seller":{"type":"string","maxLength":10000},"taxTreatment":{"type":"string","maxLength":10000},"renewal":{"type":"string","maxLength":10000},"cancellation":{"type":"string","maxLength":10000},"grace":{"type":"string","maxLength":10000},"refunds":{"type":"string","maxLength":10000},"exceptions":{"type":"string","maxLength":10000},"serviceCategory":{"type":"string","maxLength":10000,"enum":["in_person","live_one_to_one","group","digital"]}},"required":["seller","taxTreatment","renewal","cancellation","grace","refunds","exceptions","serviceCategory"],"additionalProperties":false},"coveragePolicy":{"oneOf":[{"$ref":"#\/components\/schemas\/CoveragePolicy"},{"type":"null"}]},"requiresAssignedOffer":{"type":"boolean","const":true},"firstChargeAt":{"type":"string","format":"date-time"},"actualBillingAnchorAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["id","version","name","appointmentTypeId","price","intervalWeeks","sessionsPerPeriod","termsVersion","terms","coveragePolicy","requiresAssignedOffer","firstChargeAt","actualBillingAnchorAt"],"additionalProperties":false},"ManagedOccurrence":{"type":"object","properties":{"originalDate":{"type":"string","format":"date"},"originalStartsAt":{"type":"string","format":"date-time"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"reserved":{"type":"boolean"},"appointmentId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"appointmentStatus":{"oneOf":[{"type":"string","enum":["pending_payment","pending_therapist_approval","proposed","confirmed","rescheduled","booked","cancelled","cancelled_by_patient","expired"]},{"type":"null"}]},"paymentStatus":{"oneOf":[{"type":"string"},{"type":"null"}]},"coverageState":{"oneOf":[{"type":"string","enum":["granted","reserved","consumed","restored","expired","revoked"]},{"type":"null"}]},"exception":{"oneOf":[{"type":"string","enum":["holiday","absence","slot_conflict","rescheduled","patient_cancelled","practice_cancelled","rule_changed","paused"]},{"type":"null"}]}},"required":["originalDate","originalStartsAt","startsAt","endsAt","reserved","appointmentId","appointmentStatus","paymentStatus","coverageState","exception"],"additionalProperties":false},"ManagedSessionCoverage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"state":{"type":"string","enum":["granted","reserved","consumed","restored","expired","revoked"]},"reviewRequired":{"type":"boolean"},"expiresAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"appointmentId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"originalDate":{"type":"string","format":"date"}},"required":["id","state","reviewRequired","expiresAt","appointmentId","originalDate"],"additionalProperties":false},"RecurringArrangement":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"agreementId":{"type":"string","format":"uuid"},"agreementVersion":{"type":"integer","minimum":1},"version":{"type":"integer","minimum":1},"subscriptionId":{"oneOf":[{"type":"string","format":"uuid"},{"type":"null"}]},"appointmentTypeId":{"type":"string","format":"uuid"},"appointmentTypeName":{"type":"string"},"scheduleStatus":{"type":"string","enum":["draft","offered","accepted","scheduled","paused","ended"]},"billingStatus":{"type":"string","enum":["not_required","draft","pending_setup","awaiting_payment","active","payment_attention","paused","ended"]},"recurrence":{"$ref":"#\/components\/schemas\/ManagedRecurrence"},"billing":{"oneOf":[{"$ref":"#\/components\/schemas\/ManagedBillingTerms"},{"type":"null"}]},"nextPaymentAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"ownershipEndsAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"pauseUntil":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"providerStopPending":{"type":"boolean"},"providerStoppedAt":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"nextOccurrences":{"type":"array","items":{"$ref":"#\/components\/schemas\/ManagedOccurrence"},"maxItems":6},"coverage":{"type":"array","items":{"$ref":"#\/components\/schemas\/ManagedSessionCoverage"},"maxItems":100},"permittedActions":{"type":"array","items":{"type":"string","enum":["end"]}},"therapistName":{"type":"string","maxLength":191,"description":"Treating practitioner display name for this owned resource."}},"required":["id","agreementId","agreementVersion","version","subscriptionId","appointmentTypeId","appointmentTypeName","scheduleStatus","billingStatus","recurrence","billing","nextPaymentAt","ownershipEndsAt","pauseUntil","providerStopPending","providerStoppedAt","nextOccurrences","coverage","permittedActions"],"additionalProperties":false},"RecurringArrangementList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/RecurringArrangement"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"ManagedSubscriptionPlanList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/ManagedSubscriptionPlan"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"RecurringChangeInput":{"type":"object","properties":{"action":{"type":"string","enum":["skip","end"]},"appointmentId":{"type":"string","format":"uuid"}},"required":["action"],"additionalProperties":false},"RecurringChangeApplyInput":{"type":"object","properties":{"action":{"type":"string","enum":["skip","end"]},"appointmentId":{"type":"string","format":"uuid"},"previewToken":{"type":"string","maxLength":256}},"required":["action","previewToken"],"additionalProperties":false},"RecurringChangePreview":{"type":"object","properties":{"agreementId":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"action":{"type":"string","enum":["skip","end"]},"effectiveAt":{"type":"string","format":"date-time"},"affectedAppointments":{"type":"integer","minimum":0},"slotEffect":{"type":"string","enum":["release_at_boundary","retain_pattern"]},"billingEffect":{"type":"string","enum":["stop_requested_no_proration","unchanged","no_recurring_billing"]},"coverageEffect":{"type":"string","enum":["accepted_cancellation_policy","retain_funded_history_no_automatic_refund"]},"providerStopPending":{"type":"boolean"},"unsettledInvoices":{"type":"integer","minimum":0},"retainedFundedAppointments":{"type":"integer","minimum":0},"previewToken":{"type":"string","maxLength":256}},"required":["agreementId","version","action","effectiveAt","affectedAppointments","slotEffect","billingEffect","coverageEffect","providerStopPending","unsettledInvoices","retainedFundedAppointments","previewToken"],"additionalProperties":false},"RecurringChangeResult":{"type":"object","properties":{"operationId":{"type":"string","format":"uuid"},"effectiveAt":{"type":"string","format":"date-time"},"replayed":{"type":"boolean"}},"required":["operationId","effectiveAt","replayed"],"additionalProperties":false},"AppointmentChangeSlot":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"appointmentTypeId":{"type":["string","null"],"format":"uuid"},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"timezone":{"type":"string"}},"required":["id","appointmentTypeId","startsAt","endsAt","timezone"],"additionalProperties":false},"AppointmentChangeSlotList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/AppointmentChangeSlot"}},"page":{"$ref":"#\/components\/schemas\/Page"}},"required":["data","page"],"additionalProperties":false},"AppointmentChangeRequest":{"type":"object","properties":{"action":{"type":"string","enum":["cancel","reschedule"]},"slotId":{"type":"string","format":"uuid"}},"required":["action"],"additionalProperties":false},"AppointmentChangePreview":{"type":"object","properties":{"appointmentId":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"action":{"type":"string","enum":["cancel","reschedule"]},"target":{"oneOf":[{"$ref":"#\/components\/schemas\/AppointmentChangeSlot"},{"type":"null"}]},"cancellationDeadline":{"type":"string","format":"date-time"},"reschedulingDeadline":{"type":"string","format":"date-time"},"effects":{"type":"array","items":{"type":"string","enum":["cancel_one","funding_transferred","no_automatic_refund","series_unchanged","subscription_restore","subscription_consume","package_release","credit_created","credit_remains_used"]}},"expiresAt":{"type":"string","format":"date-time"},"previewToken":{"type":"string","maxLength":128}},"required":["appointmentId","version","action","target","cancellationDeadline","reschedulingDeadline","effects","expiresAt","previewToken"],"additionalProperties":false},"NotificationPreferences":{"type":"object","properties":{"version":{"type":"integer","minimum":1},"appointmentChanges":{"type":"boolean"},"reminder24h":{"type":"boolean"},"reminder1h":{"type":"boolean"},"reminder30m":{"type":"boolean"},"paymentUpdates":{"type":"boolean"},"arrangementUpdates":{"type":"boolean"}},"required":["version","appointmentChanges","reminder24h","reminder1h","reminder30m","paymentUpdates","arrangementUpdates"],"additionalProperties":false},"NotificationSettings":{"type":"object","properties":{"available":{"type":"boolean"},"projectId":{"type":["string","null"],"format":"uuid"},"deviceRegistered":{"type":"boolean"},"preferences":{"$ref":"#\/components\/schemas\/NotificationPreferences"}},"required":["available","projectId","deviceRegistered","preferences"],"additionalProperties":false},"PushDeviceInput":{"type":"object","properties":{"token":{"type":"string","pattern":"^(?:Exponent|Expo)PushToken\\[[A-Za-z0-9_-]{16,200}\\]$"},"platform":{"type":"string","enum":["android","ios"]},"locale":{"type":"string","enum":["de","en","pl"]},"projectId":{"type":"string","format":"uuid"},"consentVersion":{"type":"integer","const":1}},"required":["token","platform","locale","projectId","consentVersion"],"additionalProperties":false},"PatientNotification":{"type":"object","properties":{"resource":{"type":"object","properties":{"kind":{"type":"string","enum":["appointment","offer","arrangement","payment"]},"id":{"type":"string","format":"uuid"}},"required":["kind","id"],"additionalProperties":false}},"required":["resource"],"additionalProperties":false},"PatientDeletionRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["requested","in_review"]},"version":{"type":"integer","minimum":1},"requestedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","status","version","requestedAt","updatedAt"],"additionalProperties":false},"PatientDeletionStatus":{"type":"object","properties":{"request":{"oneOf":[{"$ref":"#\/components\/schemas\/PatientDeletionRequest"},{"type":"null"}]},"activeArrangements":{"type":"integer","minimum":0},"futureAppointments":{"type":"integer","minimum":0},"unsettledInvoices":{"type":"integer","minimum":0}},"required":["request","activeArrangements","futureAppointments","unsettledInvoices"],"additionalProperties":false},"PatientDeletionInput":{"type":"object","properties":{"acknowledged":{"type":"boolean","const":true}},"required":["acknowledged"],"additionalProperties":false}}}}