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: operationId: listWebhookCategories tags: [WebhookSubscriptions] summary: List webhook categories description: Returns the available webhook event categories to subscribe to. responses: '200': description: The available webhook event categories. content: application/json: schema: type: object properties: items: type: array items: type: string '401': $ref: '#/components/responses/Unauthorized' /users/me: get: operationId: getCurrentUser tags: [Users] summary: Retrieve the current user description: Returns the account/user context for the authenticated token. responses: '200': $ref: '#/components/responses/User' '401': $ref: '#/components/responses/Unauthorized' /owners: get: operationId: listOwners tags: [Owners] summary: List owners description: Returns a paginated list of property owners. parameters: - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/OwnerList' '401': $ref: '#/components/responses/Unauthorized' /owners/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getOwner tags: [Owners] summary: Retrieve an owner description: Retrieves a single owner by identifier. responses: '200': $ref: '#/components/responses/Owner' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /payments: get: operationId: listPayments tags: [Payments] summary: List payments description: Returns a paginated list of payments recorded against bookings. parameters: - name: booking_id in: query schema: type: integer - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/PaymentList' '401': $ref: '#/components/responses/Unauthorized' /payments/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getPayment tags: [Payments] summary: Retrieve a payment description: Retrieves a single payment by identifier. responses: '200': $ref: '#/components/responses/Payment' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /deposits: get: operationId: listDeposits tags: [Deposits] summary: List deposits description: Returns a paginated list of security/damage deposits. parameters: - name: booking_id in: query schema: type: integer - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/DepositList' '401': $ref: '#/components/responses/Unauthorized' /deposits/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getDeposit tags: [Deposits] summary: Retrieve a deposit description: Retrieves a single deposit by identifier. responses: '200': $ref: '#/components/responses/Deposit' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /refunds: get: operationId: listRefunds tags: [Refunds] summary: List refunds description: Returns a paginated list of refunds. parameters: - name: booking_id in: query schema: type: integer - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/RefundList' '401': $ref: '#/components/responses/Unauthorized' /refunds/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getRefund tags: [Refunds] summary: Retrieve a refund description: Retrieves a single refund by identifier. responses: '200': $ref: '#/components/responses/Refund' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /discounts: get: operationId: listDiscounts tags: [Discounts] summary: List discounts description: Returns a paginated list of discount rules. parameters: - $ref: '#/components/parameters/PropertyIds' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/DiscountList' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createDiscount tags: [Discounts] summary: Create a discount description: Creates a new discount rule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiscountInput' responses: '200': $ref: '#/components/responses/Discount' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /discounts/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getDiscount tags: [Discounts] summary: Retrieve a discount description: Retrieves a single discount by identifier. responses: '200': $ref: '#/components/responses/Discount' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateDiscount tags: [Discounts] summary: Update a discount description: Updates a discount rule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DiscountInput' responses: '200': $ref: '#/components/responses/Discount' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ValidationError' delete: operationId: deleteDiscount tags: [Discounts] summary: Delete a discount description: Deletes a discount rule. responses: '200': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /fees: get: operationId: listFees tags: [Fees] summary: List fees description: Returns a paginated list of fees. parameters: - $ref: '#/components/parameters/PropertyIds' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/FeeList' '401': $ref: '#/components/responses/Unauthorized' /fees/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getFee tags: [Fees] summary: Retrieve a fee description: Retrieves a single fee by identifier. responses: '200': $ref: '#/components/responses/Fee' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /surcharges: get: operationId: listSurcharges tags: [Surcharges] summary: List surcharges description: Returns a paginated list of surcharge rules. parameters: - $ref: '#/components/parameters/PropertyIds' - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': $ref: '#/components/responses/SurchargeList' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createSurcharge tags: [Surcharges] summary: Create a surcharge description: Creates a new surcharge rule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SurchargeInput' responses: '200': $ref: '#/components/responses/Surcharge' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /surcharges/{id}: parameters: - $ref: '#/components/parameters/Id' get: operationId: getSurcharge tags: [Surcharges] summary: Retrieve a surcharge description: Retrieves a single surcharge by identifier. responses: '200': $ref: '#/components/responses/Surcharge' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateSurcharge tags: [Surcharges] summary: Update a surcharge description: Updates a surcharge rule. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SurchargeInput' responses: '200': $ref: '#/components/responses/Surcharge' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ValidationError' delete: operationId: deleteSurcharge tags: [Surcharges] summary: Delete a surcharge description: Deletes a surcharge rule. responses: '200': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /spotrates: patch: operationId: updateSpotRates tags: [SpotRates] summary: Update spot rates description: >- Applies ad hoc nightly spot-rate overrides for a property across a date range. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SpotRateInput' responses: '200': description: Spot-rate update confirmation. content: application/json: schema: type: object properties: success: type: boolean '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' components: securitySchemes: basicAuth: type: http scheme: basic description: >- HTTP Basic authentication. Supply your OwnerRez API key / Personal Access Token as the username; the password is left blank. oauth2: type: oauth2 description: >- OAuth 2.0 Authorization Code Grant (RFC 6749 Section 4.1). Register an OAuth app in the OwnerRez Developer/API settings, send the user to the authorization URL, then exchange the returned code for an access token. flows: authorizationCode: authorizationUrl: https://app.ownerrez.com/oauth/authorize tokenUrl: https://api.ownerrez.com/oauth/access_token scopes: {} parameters: Id: name: id in: path required: true description: The unique identifier of the resource. schema: type: integer Limit: name: limit in: query description: Maximum number of items to return per page. schema: type: integer default: 100 Offset: name: offset in: query description: Number of items to skip for pagination. schema: type: integer default: 0 PropertyIds: name: property_ids in: query description: One or more property identifiers to filter by. style: form explode: true schema: type: array items: type: integer responses: Unauthorized: description: Missing or invalid credentials. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: >- Rate limit exceeded. The API allows 300 requests per 5 minutes per IP; exceeding it returns HTTP 429 with a JSON error body. content: application/json: schema: $ref: '#/components/schemas/Error' Deleted: description: Deletion confirmation. content: application/json: schema: $ref: '#/components/schemas/DeleteResponse' Booking: description: A booking. content: application/json: schema: $ref: '#/components/schemas/Booking' BookingList: description: A page of bookings. content: application/json: schema: $ref: '#/components/schemas/BookingPage' Property: description: A property. content: application/json: schema: $ref: '#/components/schemas/Property' PropertyList: description: A page of properties. content: application/json: schema: $ref: '#/components/schemas/PropertyPage' Listing: description: A listing. content: application/json: schema: $ref: '#/components/schemas/Listing' ListingList: description: A page of listings. content: application/json: schema: $ref: '#/components/schemas/ListingPage' ListingSite: description: A listing site. content: application/json: schema: $ref: '#/components/schemas/ListingSite' ListingSiteList: description: A page of listing sites. content: application/json: schema: $ref: '#/components/schemas/ListingSitePage' Guest: description: A guest. content: application/json: schema: $ref: '#/components/schemas/Guest' GuestList: description: A page of guests. content: application/json: schema: $ref: '#/components/schemas/GuestPage' Inquiry: description: An inquiry. content: application/json: schema: $ref: '#/components/schemas/Inquiry' InquiryList: description: A page of inquiries. content: application/json: schema: $ref: '#/components/schemas/InquiryPage' Quote: description: A quote. content: application/json: schema: $ref: '#/components/schemas/Quote' QuoteList: description: A page of quotes. content: application/json: schema: $ref: '#/components/schemas/QuotePage' Review: description: A review. content: application/json: schema: $ref: '#/components/schemas/Review' ReviewList: description: A page of reviews. content: application/json: schema: $ref: '#/components/schemas/ReviewPage' Message: description: A message. content: application/json: schema: $ref: '#/components/schemas/Message' MessageList: description: A page of messages. content: application/json: schema: $ref: '#/components/schemas/MessagePage' Field: description: A custom field value. content: application/json: schema: $ref: '#/components/schemas/Field' FieldList: description: A page of custom field values. content: application/json: schema: $ref: '#/components/schemas/FieldPage' FieldDefinition: description: A field definition. content: application/json: schema: $ref: '#/components/schemas/FieldDefinition' FieldDefinitionList: description: A page of field definitions. content: application/json: schema: $ref: '#/components/schemas/FieldDefinitionPage' Tag: description: A tag value. content: application/json: schema: $ref: '#/components/schemas/Tag' TagList: description: A page of tag values. content: application/json: schema: $ref: '#/components/schemas/TagPage' TagDefinition: description: A tag definition. content: application/json: schema: $ref: '#/components/schemas/TagDefinition' TagDefinitionList: description: A page of tag definitions. content: application/json: schema: $ref: '#/components/schemas/TagDefinitionPage' WebhookSubscription: description: A webhook subscription. content: application/json: schema: $ref: '#/components/schemas/WebhookSubscription' WebhookSubscriptionList: description: A list of webhook subscriptions. content: application/json: schema: $ref: '#/components/schemas/WebhookSubscriptionPage' User: description: The current user. content: application/json: schema: $ref: '#/components/schemas/User' Owner: description: An owner. content: application/json: schema: $ref: '#/components/schemas/Owner' OwnerList: description: A page of owners. content: application/json: schema: $ref: '#/components/schemas/OwnerPage' Payment: description: A payment. content: application/json: schema: $ref: '#/components/schemas/Payment' PaymentList: description: A page of payments. content: application/json: schema: $ref: '#/components/schemas/PaymentPage' Deposit: description: A deposit. content: application/json: schema: $ref: '#/components/schemas/Deposit' DepositList: description: A page of deposits. content: application/json: schema: $ref: '#/components/schemas/DepositPage' Refund: description: A refund. content: application/json: schema: $ref: '#/components/schemas/Refund' RefundList: description: A page of refunds. content: application/json: schema: $ref: '#/components/schemas/RefundPage' Discount: description: A discount. content: application/json: schema: $ref: '#/components/schemas/Discount' DiscountList: description: A page of discounts. content: application/json: schema: $ref: '#/components/schemas/DiscountPage' Fee: description: A fee. content: application/json: schema: $ref: '#/components/schemas/Fee' FeeList: description: A page of fees. content: application/json: schema: $ref: '#/components/schemas/FeePage' Surcharge: description: A surcharge. content: application/json: schema: $ref: '#/components/schemas/Surcharge' SurchargeList: description: A page of surcharges. content: application/json: schema: $ref: '#/components/schemas/SurchargePage' schemas: Error: type: object properties: statusCode: type: integer error: type: string messages: type: array items: type: string DeleteResponse: type: object properties: id: type: integer success: type: boolean Page: type: object description: Common pagination envelope returned by list endpoints. properties: count: type: integer limit: type: integer offset: type: integer nextPageUrl: type: string nullable: true BookingInput: type: object required: - property_id - arrival - departure properties: property_id: type: integer guest_id: type: integer arrival: type: string format: date departure: type: string format: date adults: type: integer children: type: integer notes: type: string Booking: allOf: - $ref: '#/components/schemas/BookingInput' - type: object properties: id: type: integer status: type: string total_amount: type: number balance_due: type: number is_block: type: boolean created_utc: type: string format: date-time updated_utc: type: string format: date-time BookingPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Booking' Property: type: object properties: id: type: integer name: type: string active: type: boolean address: type: object additionalProperties: true bedrooms: type: integer bathrooms: type: number max_guests: type: integer PropertyPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Property' Listing: type: object properties: id: type: integer property_id: type: integer title: type: string description: type: string headline: type: string ListingPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Listing' ListingSite: type: object properties: id: type: integer name: type: string code: type: string ListingSitePage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/ListingSite' GuestInput: type: object properties: first_name: type: string last_name: type: string email_addresses: type: array items: type: object additionalProperties: true phones: type: array items: type: object additionalProperties: true addresses: type: array items: type: object additionalProperties: true notes: type: string Guest: allOf: - $ref: '#/components/schemas/GuestInput' - type: object properties: id: type: integer created_utc: type: string format: date-time GuestPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Guest' Inquiry: type: object properties: id: type: integer property_id: type: integer guest_id: type: integer arrival: type: string format: date departure: type: string format: date status: type: string received_utc: type: string format: date-time InquiryPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Inquiry' QuoteInput: type: object required: - property_id - arrival - departure properties: property_id: type: integer arrival: type: string format: date departure: type: string format: date adults: type: integer children: type: integer Quote: allOf: - $ref: '#/components/schemas/QuoteInput' - type: object properties: id: type: integer total_amount: type: number currency: type: string line_items: type: array items: type: object additionalProperties: true QuotePage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Quote' Review: type: object properties: id: type: integer property_id: type: integer booking_id: type: integer rating: type: number title: type: string body: type: string reviewer_name: type: string created_utc: type: string format: date-time ReviewPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Review' MessageInput: type: object required: - booking_id - body properties: booking_id: type: integer body: type: string is_automated: type: boolean Message: allOf: - $ref: '#/components/schemas/MessageInput' - type: object properties: id: type: integer direction: type: string enum: - incoming - outgoing sent_utc: type: string format: date-time MessagePage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Message' FieldInput: type: object required: - field_definition_id - entity_id properties: field_definition_id: type: integer entity_id: type: integer entity_type: type: string value: type: string Field: allOf: - $ref: '#/components/schemas/FieldInput' - type: object properties: id: type: integer FieldPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Field' FieldDefinitionInput: type: object required: - name - type properties: name: type: string type: type: string entity_type: type: string options: type: array items: type: string FieldDefinition: allOf: - $ref: '#/components/schemas/FieldDefinitionInput' - type: object properties: id: type: integer FieldDefinitionPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/FieldDefinition' TagInput: type: object required: - tag_definition_id - entity_id properties: tag_definition_id: type: integer entity_id: type: integer entity_type: type: string Tag: allOf: - $ref: '#/components/schemas/TagInput' - type: object properties: id: type: integer name: type: string TagPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Tag' TagDefinitionInput: type: object required: - name properties: name: type: string entity_type: type: string color: type: string TagDefinition: allOf: - $ref: '#/components/schemas/TagDefinitionInput' - type: object properties: id: type: integer TagDefinitionPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/TagDefinition' WebhookSubscriptionInput: type: object required: - url - categories properties: url: type: string format: uri categories: type: array items: type: string WebhookSubscription: allOf: - $ref: '#/components/schemas/WebhookSubscriptionInput' - type: object properties: id: type: integer active: type: boolean created_utc: type: string format: date-time WebhookSubscriptionPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/WebhookSubscription' User: type: object properties: id: type: integer email: type: string name: type: string account_id: type: integer Owner: type: object properties: id: type: integer first_name: type: string last_name: type: string email: type: string company: type: string OwnerPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Owner' Payment: type: object properties: id: type: integer booking_id: type: integer amount: type: number currency: type: string method: type: string received_utc: type: string format: date-time PaymentPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Payment' Deposit: type: object properties: id: type: integer booking_id: type: integer amount: type: number status: type: string due_utc: type: string format: date-time DepositPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Deposit' Refund: type: object properties: id: type: integer payment_id: type: integer booking_id: type: integer amount: type: number issued_utc: type: string format: date-time RefundPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Refund' DiscountInput: type: object required: - property_id - name properties: property_id: type: integer name: type: string amount: type: number is_percent: type: boolean min_nights: type: integer Discount: allOf: - $ref: '#/components/schemas/DiscountInput' - type: object properties: id: type: integer DiscountPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Discount' Fee: type: object properties: id: type: integer property_id: type: integer name: type: string amount: type: number is_percent: type: boolean taxable: type: boolean FeePage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Fee' SurchargeInput: type: object required: - property_id - name properties: property_id: type: integer name: type: string amount: type: number is_percent: type: boolean Surcharge: allOf: - $ref: '#/components/schemas/SurchargeInput' - type: object properties: id: type: integer SurchargePage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Surcharge' SpotRateInput: type: object required: - property_id - start_date - end_date - amount properties: property_id: type: integer start_date: type: string format: date end_date: type: string format: date amount: type: number