OwnerRez Reviews API

Read guest reviews collected for stays and properties, including rating, title, body, and reviewer, for reputation and display use cases.

OpenAPI Specification

ownerrez-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: OwnerRez API v2
  description: >-
    The OwnerRez API v2 is a REST/JSON API for the OwnerRez vacation-rental and
    short-term-rental property management platform. It exposes bookings,
    properties, listings, guests, inquiries, quotes, reviews, guest messages,
    payments and financials, custom fields and tags, owners, and webhook
    subscriptions over HTTPS. All endpoints are served under
    https://api.ownerrez.com/v2. Requests are authenticated either with an OAuth
    2.0 access token (Authorization Code Grant) or with an API key / Personal
    Access Token supplied as the username in HTTP Basic authentication. Every
    request should send a descriptive User-Agent. The endpoint paths and HTTP
    methods in this document are grounded in the published machine-readable
    operation index at https://api.ownerrez.com/help/v2/index.md; request and
    response schema properties are representative and should be verified against
    the interactive reference at https://api.ownerrez.com/help/v2.
    OwnerRez also delivers server-to-app events via outbound webhooks (managed
    through the WebhookSubscriptions resource); there is no public WebSocket API.
  version: '2.0'
  contact:
    name: OwnerRez
    url: https://www.ownerrez.com
  termsOfService: https://www.ownerrez.com/legal/terms
servers:
  - url: https://api.ownerrez.com/v2
    description: OwnerRez API v2 (production)
security:
  - basicAuth: []
  - oauth2: []
tags:
  - name: Bookings
    description: Reservations against a property, including dates, guest, and charges.
  - name: Properties
    description: Rental properties managed in OwnerRez.
  - name: PropertySearch
    description: Availability and criteria search across properties.
  - name: Listings
    description: Public listing content and channel listing sites for properties.
  - name: Guests
    description: Guest contact records and their addresses, emails, and phones.
  - name: Inquiries
    description: Inbound guest inquiries and leads.
  - name: Quotes
    description: Price quotes generated for a stay.
  - name: Reviews
    description: Guest reviews collected for stays and properties.
  - name: Messages
    description: Guest messaging threads and outbound messages.
  - name: Fields
    description: Custom field values attached to records.
  - name: FieldDefinitions
    description: Definitions of custom fields.
  - name: Tags
    description: Tag values applied to records.
  - name: TagDefinitions
    description: Definitions of tags.
  - name: WebhookSubscriptions
    description: Outbound webhook subscriptions and their event categories.
  - name: Users
    description: The authenticated user context.
  - name: Owners
    description: Property owners.
  - name: Payments
    description: Payments recorded against bookings.
  - name: Deposits
    description: Security and damage deposits.
  - name: Refunds
    description: Refunds issued against payments.
  - name: Discounts
    description: Discount rules.
  - name: Fees
    description: Fees applied to bookings and quotes.
  - name: Surcharges
    description: Surcharge rules applied to bookings and quotes.
  - name: SpotRates
    description: Ad hoc nightly spot-rate overrides.
paths:
  /bookings:
    get:
      operationId: listBookings
      tags: [Bookings]
      summary: List bookings
      description: >-
        Returns a paginated list of bookings. Supports filtering by property,
        date range, and change time.
      parameters:
        - $ref: '#/components/parameters/PropertyIds'
        - name: since_utc
          in: query
          description: Return bookings created or updated at or after this UTC timestamp.
          schema:
            type: string
            format: date-time
        - name: from
          in: query
          description: Start of the arrival-date filter window (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: to
          in: query
          description: End of the arrival-date filter window (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/BookingList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      operationId: createBooking
      tags: [Bookings]
      summary: Create a booking
      description: Creates a new booking.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingInput'
      responses:
        '200':
          $ref: '#/components/responses/Booking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/RateLimited'
  /bookings/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getBooking
      tags: [Bookings]
      summary: Retrieve a booking
      description: Retrieves a single booking by its identifier.
      responses:
        '200':
          $ref: '#/components/responses/Booking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateBooking
      tags: [Bookings]
      summary: Update a booking
      description: Partially updates an existing booking.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookingInput'
      responses:
        '200':
          $ref: '#/components/responses/Booking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /properties:
    get:
      operationId: listProperties
      tags: [Properties]
      summary: List properties
      description: Returns a paginated list of properties.
      parameters:
        - name: include_inactive
          in: query
          schema:
            type: boolean
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/PropertyList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /properties/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getProperty
      tags: [Properties]
      summary: Retrieve a property
      description: Retrieves a single property by its identifier.
      responses:
        '200':
          $ref: '#/components/responses/Property'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /propertysearch:
    get:
      operationId: searchProperties
      tags: [PropertySearch]
      summary: Search properties by availability and criteria
      description: >-
        Searches properties by availability window, occupancy, and other
        criteria, returning matching properties.
      parameters:
        - name: from
          in: query
          description: Arrival date (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: to
          in: query
          description: Departure date (YYYY-MM-DD).
          schema:
            type: string
            format: date
        - name: guests
          in: query
          description: Number of guests to accommodate.
          schema:
            type: integer
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/PropertyList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /listings:
    get:
      operationId: listListings
      tags: [Listings]
      summary: List listings
      description: Returns a paginated list of property listings.
      parameters:
        - $ref: '#/components/parameters/PropertyIds'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/ListingList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /listings/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getListing
      tags: [Listings]
      summary: Retrieve a listing
      description: Retrieves a single listing by its identifier.
      responses:
        '200':
          $ref: '#/components/responses/Listing'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /listingsites:
    get:
      operationId: listListingSites
      tags: [Listings]
      summary: List listing sites
      description: Returns the channel listing sites (e.g. Airbnb, Vrbo) available.
      responses:
        '200':
          $ref: '#/components/responses/ListingSiteList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /listingsites/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getListingSite
      tags: [Listings]
      summary: Retrieve a listing site
      description: Retrieves a single listing site by its identifier.
      responses:
        '200':
          $ref: '#/components/responses/ListingSite'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /guests:
    get:
      operationId: listGuests
      tags: [Guests]
      summary: List guests
      description: Returns a paginated list of guest contact records.
      parameters:
        - name: q
          in: query
          description: Free-text search across guest name and contact details.
          schema:
            type: string
        - name: created_since_utc
          in: query
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/GuestList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createGuest
      tags: [Guests]
      summary: Create a guest
      description: Creates a new guest contact record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuestInput'
      responses:
        '200':
          $ref: '#/components/responses/Guest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /guests/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getGuest
      tags: [Guests]
      summary: Retrieve a guest
      description: Retrieves a single guest by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Guest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateGuest
      tags: [Guests]
      summary: Update a guest
      description: Partially updates a guest record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GuestInput'
      responses:
        '200':
          $ref: '#/components/responses/Guest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      operationId: deleteGuest
      tags: [Guests]
      summary: Delete a guest
      description: Deletes a guest record.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /guests/{id}/addresses/{address_id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: address_id
        in: path
        required: true
        schema:
          type: integer
    delete:
      operationId: deleteGuestAddress
      tags: [Guests]
      summary: Delete a guest address
      description: Removes an address from a guest record.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /guests/{id}/emailaddresses/{email_address_id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: email_address_id
        in: path
        required: true
        schema:
          type: integer
    delete:
      operationId: deleteGuestEmailAddress
      tags: [Guests]
      summary: Delete a guest email address
      description: Removes an email address from a guest record.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /guests/{id}/phones/{phone_id}:
    parameters:
      - $ref: '#/components/parameters/Id'
      - name: phone_id
        in: path
        required: true
        schema:
          type: integer
    delete:
      operationId: deleteGuestPhone
      tags: [Guests]
      summary: Delete a guest phone
      description: Removes a phone number from a guest record.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /inquiries:
    get:
      operationId: listInquiries
      tags: [Inquiries]
      summary: List inquiries
      description: Returns a paginated list of inbound guest inquiries.
      parameters:
        - $ref: '#/components/parameters/PropertyIds'
        - name: since_utc
          in: query
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/InquiryList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /inquiries/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getInquiry
      tags: [Inquiries]
      summary: Retrieve an inquiry
      description: Retrieves a single inquiry by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Inquiry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /quotes:
    get:
      operationId: listQuotes
      tags: [Quotes]
      summary: List quotes
      description: Returns a paginated list of price quotes.
      parameters:
        - $ref: '#/components/parameters/PropertyIds'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/QuoteList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createQuote
      tags: [Quotes]
      summary: Create a quote
      description: Creates a new price quote for a property and date range.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteInput'
      responses:
        '200':
          $ref: '#/components/responses/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /quotes/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getQuote
      tags: [Quotes]
      summary: Retrieve a quote
      description: Retrieves a single quote by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateQuote
      tags: [Quotes]
      summary: Update a quote
      description: Partially updates a quote.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteInput'
      responses:
        '200':
          $ref: '#/components/responses/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      operationId: deleteQuote
      tags: [Quotes]
      summary: Delete a quote
      description: Deletes a quote.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /reviews:
    get:
      operationId: listReviews
      tags: [Reviews]
      summary: List reviews
      description: Returns a paginated list of guest reviews.
      parameters:
        - $ref: '#/components/parameters/PropertyIds'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/ReviewList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /reviews/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getReview
      tags: [Reviews]
      summary: Retrieve a review
      description: Retrieves a single review by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Review'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /messages:
    get:
      operationId: listMessages
      tags: [Messages]
      summary: List messages
      description: Returns a paginated list of guest messages.
      parameters:
        - name: booking_id
          in: query
          schema:
            type: integer
        - name: since_utc
          in: query
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/MessageList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createMessage
      tags: [Messages]
      summary: Send a message
      description: Sends an outbound message to a guest.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MessageInput'
      responses:
        '200':
          $ref: '#/components/responses/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /messages/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getMessage
      tags: [Messages]
      summary: Retrieve a message
      description: Retrieves a single message by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Message'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /fields:
    get:
      operationId: listFields
      tags: [Fields]
      summary: List custom field values
      description: Returns custom field values attached to records.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/FieldList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createField
      tags: [Fields]
      summary: Create a custom field value
      description: Creates a custom field value on a record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldInput'
      responses:
        '200':
          $ref: '#/components/responses/Field'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /fields/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getField
      tags: [Fields]
      summary: Retrieve a custom field value
      description: Retrieves a single custom field value by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Field'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateField
      tags: [Fields]
      summary: Update a custom field value
      description: Updates a custom field value.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldInput'
      responses:
        '200':
          $ref: '#/components/responses/Field'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteField
      tags: [Fields]
      summary: Delete a custom field value
      description: Deletes a custom field value.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /fields/bydefinition:
    delete:
      operationId: deleteFieldByDefinition
      tags: [Fields]
      summary: Delete field values by definition
      description: >-
        Deletes custom field values matching a field definition and target
        record supplied as query parameters.
      parameters:
        - name: field_definition_id
          in: query
          required: true
          schema:
            type: integer
        - name: entity_id
          in: query
          schema:
            type: integer
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /fielddefinitions:
    get:
      operationId: listFieldDefinitions
      tags: [FieldDefinitions]
      summary: List field definitions
      description: Returns the custom field definitions.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/FieldDefinitionList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createFieldDefinition
      tags: [FieldDefinitions]
      summary: Create a field definition
      description: Creates a new custom field definition.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldDefinitionInput'
      responses:
        '200':
          $ref: '#/components/responses/FieldDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /fielddefinitions/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getFieldDefinition
      tags: [FieldDefinitions]
      summary: Retrieve a field definition
      description: Retrieves a single field definition by identifier.
      responses:
        '200':
          $ref: '#/components/responses/FieldDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateFieldDefinition
      tags: [FieldDefinitions]
      summary: Update a field definition
      description: Updates a custom field definition.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldDefinitionInput'
      responses:
        '200':
          $ref: '#/components/responses/FieldDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteFieldDefinition
      tags: [FieldDefinitions]
      summary: Delete a field definition
      description: Deletes a custom field definition.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /tags:
    get:
      operationId: listTags
      tags: [Tags]
      summary: List tag values
      description: Returns tag values applied to records.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/TagList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createTag
      tags: [Tags]
      summary: Apply a tag
      description: Applies a tag to a record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagInput'
      responses:
        '200':
          $ref: '#/components/responses/Tag'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /tags/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getTag
      tags: [Tags]
      summary: Retrieve a tag value
      description: Retrieves a single tag value by identifier.
      responses:
        '200':
          $ref: '#/components/responses/Tag'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteTag
      tags: [Tags]
      summary: Delete a tag value
      description: Removes a tag value from a record.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /tags/byname:
    delete:
      operationId: deleteTagByName
      tags: [Tags]
      summary: Delete a tag by name
      description: Removes a tag from a record by tag name supplied as query parameters.
      parameters:
        - name: name
          in: query
          required: true
          schema:
            type: string
        - name: entity_id
          in: query
          schema:
            type: integer
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /tagdefinitions:
    get:
      operationId: listTagDefinitions
      tags: [TagDefinitions]
      summary: List tag definitions
      description: Returns the tag definitions.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          $ref: '#/components/responses/TagDefinitionList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createTagDefinition
      tags: [TagDefinitions]
      summary: Create a tag definition
      description: Creates a new tag definition.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagDefinitionInput'
      responses:
        '200':
          $ref: '#/components/responses/TagDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /tagdefinitions/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getTagDefinition
      tags: [TagDefinitions]
      summary: Retrieve a tag definition
      description: Retrieves a single tag definition by identifier.
      responses:
        '200':
          $ref: '#/components/responses/TagDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateTagDefinition
      tags: [TagDefinitions]
      summary: Update a tag definition
      description: Updates a tag definition.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagDefinitionInput'
      responses:
        '200':
          $ref: '#/components/responses/TagDefinition'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteTagDefinition
      tags: [TagDefinitions]
      summary: Delete a tag definition
      description: Deletes a tag definition.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooksubscriptions:
    get:
      operationId: listWebhookSubscriptions
      tags: [WebhookSubscriptions]
      summary: List webhook subscriptions
      description: Returns the outbound webhook subscriptions for the app.
      responses:
        '200':
          $ref: '#/components/responses/WebhookSubscriptionList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createWebhookSubscription
      tags: [WebhookSubscriptions]
      summary: Create a webhook subscription
      description: >-
        Creates an outbound webhook subscription that POSTs event notifications
        to the supplied URL for the selected categories.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookSubscriptionInput'
      responses:
        '200':
          $ref: '#/components/responses/WebhookSubscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /webhooksubscriptions/{id}:
    parameters:
      - $ref: '#/components/parameters/Id'
    get:
      operationId: getWebhookSubscription
      tags: [WebhookSubscriptions]
      summary: Retrieve a webhook subscription
      description: Retrieves a single webhook subscription by identifier.
      responses:
        '200':
          $ref: '#/components/responses/WebhookSubscription'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteWebhookSubscription
      tags: [WebhookSubscriptions]
      summary: Delete a webhook subscription
      description: Deletes an outbound webhook subscription.
      responses:
        '200':
          $ref: '#/components/responses/Deleted'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /webhooksubscriptions/categories:
    get:
      oper

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