openapi: 3.0.3 info: title: Weave Contacts Scheduling API description: 'The Weave API is the developer surface of the Weave customer/patient communication and payments platform for small healthcare businesses (dental, optometry, veterinary, medical, and specialty practices). It exposes REST resources across messaging (SMS/text), phone and calls, contacts, scheduling and appointments, payments, digital forms, reviews, and event subscriptions. Base URL is https://api.weaveconnect.com. Requests are authenticated with an OAuth 2.0 bearer access token issued by Weave''s OIDC provider (https://oidc.weaveconnect.com, token endpoint under https://auth.weaveconnect.com/oauth2/default) and are scoped to a location (sub-account); the location is identified by a `location_id` query parameter or header on most endpoints. Grounding note: the public Weave Developer Portal (https://dp.getweave.com) requires a developer login, so the authoritative request/response schemas could not be read directly. The paths and base URL below are grounded in Weave''s own published Developer Portal client (the app''s compiled configuration and API calls against https://api.weaveconnect.com). Path coverage is therefore high-confidence, while request bodies, query parameters, and response schemas are modeled and should be reconciled against the official reference once portal access is available.' version: '1.0' contact: name: Weave url: https://www.getweave.com license: name: Proprietary url: https://www.getweave.com/legal/terms/ servers: - url: https://api.weaveconnect.com description: Weave production API security: - oauth2: [] - bearerAuth: [] tags: - name: Scheduling description: Appointments, appointment types, schedules, and calendar events. paths: /api/v2/appointments: get: operationId: listAppointments tags: - Scheduling summary: List appointments description: Lists appointments for a location within an optional date range. parameters: - $ref: '#/components/parameters/LocationId' - name: start in: query required: false schema: type: string format: date - name: end in: query required: false schema: type: string format: date responses: '200': description: A list of appointments. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Appointment' '401': $ref: '#/components/responses/Unauthorized' /api/v2/appointment-types: get: operationId: listAppointmentTypes tags: - Scheduling summary: List appointment types description: Lists the appointment types configured for a location. parameters: - $ref: '#/components/parameters/LocationId' responses: '200': description: A list of appointment types. content: application/json: schema: type: object properties: data: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /v3/schedules: get: operationId: listSchedules tags: - Scheduling summary: List schedules description: Lists provider/operatory schedules available for online booking. parameters: - $ref: '#/components/parameters/LocationId' responses: '200': description: A list of schedules. content: application/json: schema: type: object properties: data: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /v3/calendars/events: get: operationId: listCalendarEvents tags: - Scheduling summary: List calendar events description: Lists calendar events for a location. parameters: - $ref: '#/components/parameters/LocationId' responses: '200': description: A list of calendar events. content: application/json: schema: type: object properties: data: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /api/v2/booking/email-request: post: operationId: createBookingEmailRequest tags: - Scheduling summary: Submit an online booking request description: Submits an online booking (appointment request) to the practice. parameters: - $ref: '#/components/parameters/LocationId' requestBody: required: true content: application/json: schema: type: object additionalProperties: true responses: '200': description: Booking request accepted. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' components: responses: Unauthorized: description: Missing or invalid access token. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object properties: error: type: object properties: code: type: string message: type: string Appointment: type: object properties: id: type: string format: uuid person_id: type: string format: uuid type: type: string status: type: string start_time: type: string format: date-time end_time: type: string format: date-time provider: type: string parameters: LocationId: name: location_id in: query required: false description: The Weave location (sub-account) the request is scoped to. Required on most endpoints; may alternatively be supplied via a location header. schema: type: string format: uuid securitySchemes: oauth2: type: oauth2 description: 'OAuth 2.0 access token issued by Weave''s OIDC provider. Authorization and token endpoints are served under https://auth.weaveconnect.com/oauth2/default (issuer https://oidc.weaveconnect.com). Present as `Authorization: Bearer ACCESS_TOKEN`.' flows: authorizationCode: authorizationUrl: https://auth.weaveconnect.com/oauth2/default/v1/authorize tokenUrl: https://auth.weaveconnect.com/oauth2/default/v1/token scopes: {} bearerAuth: type: http scheme: bearer description: 'OAuth 2.0 bearer access token passed as `Authorization: Bearer ACCESS_TOKEN`.'