Weave Reviews API

Support Weave's review-generation and reputation features - read provider review data, check review-request completion, and inspect the status of a location's online business listing.

OpenAPI Specification

weave-hq-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Weave 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: Messaging
    description: Two-way SMS/text messaging with patients.
  - name: Phone & Calls
    description: VoIP call records, recordings, voicemails, and call queues.
  - name: Contacts
    description: Patient/customer contacts and contact info.
  - name: Scheduling
    description: Appointments, appointment types, schedules, and calendar events.
  - name: Payments
    description: Weave Payments methods (text-to-pay, card-on-file).
  - name: Forms
    description: Weave Digital Forms - templates, links, and submissions.
  - name: Reviews
    description: Review generation, reputation, and business listings.
  - name: Events
    description: Platform events and subscription management.
paths:
  /v1/messages:
    get:
      operationId: listMessages
      tags:
        - Messaging
      summary: List messages
      description: Lists SMS/text messages for a location, most recent first.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - name: person_id
          in: query
          required: false
          description: Filter to messages exchanged with a specific contact.
          schema:
            type: string
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of messages.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: sendMessage
      tags:
        - Messaging
      summary: Send a message
      description: Sends an SMS/text message from the location to a patient.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageInput'
      responses:
        '200':
          description: The sent message.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /v1/chart-messages:
    get:
      operationId: listChartMessages
      tags:
        - Messaging
      summary: List chart-thread messages
      description: Lists messages within a patient chart/message thread.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - name: person_id
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: A list of chart messages.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/account/bulk-message-quota:
    get:
      operationId: getBulkMessageQuota
      tags:
        - Messaging
      summary: Get bulk-message quota
      description: Returns the remaining bulk (mass-text) message quota for the account.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Bulk message quota.
          content:
            application/json:
              schema:
                type: object
                properties:
                  quota:
                    type: integer
                  used:
                    type: integer
                  remaining:
                    type: integer
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/sms-phone-numbers:
    get:
      operationId: listSmsPhoneNumbers
      tags:
        - Messaging
      summary: List SMS phone numbers
      description: Lists the SMS-capable phone numbers configured for the location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of SMS phone numbers.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PhoneNumber'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v2/quick-fill/message/send:
    post:
      operationId: sendQuickFillMessage
      tags:
        - Messaging
      summary: Send a Quick Fill message
      description: >-
        Texts an open-appointment (Quick Fill) offer to one or more contacts to
        fill a newly available slot.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                person_ids:
                  type: array
                  items:
                    type: string
                body:
                  type: string
      responses:
        '200':
          description: Quick Fill send result.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v2/quick-fill/message/history:
    get:
      operationId: getQuickFillMessageHistory
      tags:
        - Messaging
      summary: Get Quick Fill message history
      description: Returns the history of Quick Fill messages sent from the location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Quick Fill message history.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/call-records:
    get:
      operationId: listCallRecords
      tags:
        - Phone & Calls
      summary: List call records
      description: Lists inbound and outbound call records for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of call records.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CallRecord'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/call-recordings:
    get:
      operationId: listCallRecordings
      tags:
        - Phone & Calls
      summary: List call recordings
      description: Lists available call recordings for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of call recordings.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CallRecording'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/call-recording/signed-url:
    get:
      operationId: getCallRecordingSignedUrl
      tags:
        - Phone & Calls
      summary: Get a call recording signed URL
      description: Returns a short-lived signed URL to download a specific call recording.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - name: recording_id
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: A signed download URL.
          content:
            application/json:
              schema:
                type: object
                properties:
                  url:
                    type: string
                    format: uri
                  expires_at:
                    type: string
                    format: date-time
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/voicemail-messages:
    get:
      operationId: listVoicemailMessages
      tags:
        - Phone & Calls
      summary: List voicemail messages
      description: Lists voicemail messages for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of voicemails.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Voicemail'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/call-queues:
    get:
      operationId: listCallQueues
      tags:
        - Phone & Calls
      summary: List call queues
      description: Lists the call queues configured for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of call queues.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/call-queues/metrics:
    get:
      operationId: getCallQueueMetrics
      tags:
        - Phone & Calls
      summary: Get call queue metrics
      description: Returns performance metrics for the location's call queues.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Call queue metrics.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/department/phone-numbers:
    get:
      operationId: listDepartmentPhoneNumbers
      tags:
        - Phone & Calls
      summary: List department phone numbers
      description: Lists phone numbers assigned to departments within a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of department phone numbers.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PhoneNumber'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/contacts:
    get:
      operationId: listContacts
      tags:
        - Contacts
      summary: List contacts
      description: Lists the contacts (patients/customers) for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of contacts.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/contacts/search:
    post:
      operationId: searchContacts
      tags:
        - Contacts
      summary: Search contacts
      description: Searches contacts by name, phone, email, or other attributes.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
      responses:
        '200':
          description: Matching contacts.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/contact-infos:
    get:
      operationId: listContactInfos
      tags:
        - Contacts
      summary: List contact info records
      description: Lists contact-info records (phone numbers, emails) for a location's contacts.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of contact info records.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/contacts/block:
    post:
      operationId: blockContact
      tags:
        - Contacts
      summary: Block a contact
      description: Blocks a contact from receiving messages from the location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                person_id:
                  type: string
      responses:
        '200':
          description: Block confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/contacts/unblock:
    post:
      operationId: unblockContact
      tags:
        - Contacts
      summary: Unblock a contact
      description: Unblocks a previously blocked contact.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                person_id:
                  type: string
      responses:
        '200':
          description: Unblock confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /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'
  /v1/payment-methods:
    get:
      operationId: listPaymentMethods
      tags:
        - Payments
      summary: List payment methods
      description: Lists stored payment methods (cards on file) for a location's patients.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of payment methods.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PaymentMethod'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/finance/account/payment_methods:
    get:
      operationId: listFinanceAccountPaymentMethods
      tags:
        - Payments
      summary: List finance-account payment methods
      description: Lists the payment methods attached to the location's Weave Payments finance account.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of finance-account payment methods.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PaymentMethod'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/forms:
    get:
      operationId: listForms
      tags:
        - Forms
      summary: List forms
      description: Lists the digital forms configured for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of forms.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Form'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/digitalforms:
    get:
      operationId: listDigitalForms
      tags:
        - Forms
      summary: List digital form templates
      description: Lists the digital-form templates available to a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of digital form templates.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Form'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/create-form-links:
    post:
      operationId: createFormLinks
      tags:
        - Forms
      summary: Create form links
      description: Generates patient-facing links to one or more forms for sending.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                form_ids:
                  type: array
                  items:
                    type: string
                person_id:
                  type: string
      responses:
        '200':
          description: The generated form links.
          content:
            application/json:
              schema:
                type: object
                properties:
                  links:
                    type: array
                    items:
                      type: string
                      format: uri
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/retrieve-forms:
    get:
      operationId: retrieveForms
      tags:
        - Forms
      summary: Retrieve submitted forms
      description: Retrieves submitted form documents for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: A list of submitted forms.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/complete-form:
    post:
      operationId: completeForm
      tags:
        - Forms
      summary: Mark a form submission complete
      description: Marks a submitted form as complete/processed.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                submission_id:
                  type: string
      responses:
        '200':
          description: Completion confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/provider-review:
    get:
      operationId: getProviderReview
      tags:
        - Reviews
      summary: Get provider review data
      description: Returns review data associated with a provider/location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Provider review data.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/review/completion:
    get:
      operationId: getReviewCompletion
      tags:
        - Reviews
      summary: Get review-request completion
      description: Returns completion status/metrics for review requests sent from a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Review completion data.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/kiosk/listing-status:
    get:
      operationId: getListingStatus
      tags:
        - Reviews
      summary: Get business listing status
      description: Returns the status of the location's online business listing.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      responses:
        '200':
          description: Listing status.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/events:
    get:
      operationId: listEvents
      tags:
        - Events
      summary: List events
      description: Lists platform events (calls, messages, appointments, payments, forms) for a location.
      parameters:
        - $ref: '#/components/parameters/LocationId'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: A list of events.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Event'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/subscribe:
    post:
      operationId: subscribe
      tags:
        - Events
      summary: Subscribe to an event stream
      description: Subscribes a client to a single event stream/topic.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                topic:
                  type: string
      responses:
        '200':
          description: Subscription confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/subscribe/multi:
    post:
      operationId: subscribeMulti
      tags:
        - Events
      summary: Subscribe to multiple event streams
      description: Subscribes a client to multiple event streams/topics at once.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                topics:
                  type: array
                  items:
                    type: string
      responses:
        '200':
          description: Subscription confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/unsubscribe:
    post:
      operationId: unsubscribe
      tags:
        - Events
      summary: Unsubscribe from an event stream
      description: Unsubscribes a client from an event stream/topic.
      parameters:
        - $ref: '#/components/parameters/LocationId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                topic:
                  type: string
      responses:
        '200':
          description: Unsubscribe confirmation.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  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`."
  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
    Limit:
      name: limit
      in: query
      required: false
      description

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/weave-hq/refs/heads/main/openapi/weave-hq-openapi.yml