openapi: 3.0.3 info: title: OwnerRez API v2 Bookings Fields API 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: Fields description: Custom field values attached to records. paths: /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' components: schemas: 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 Field: allOf: - $ref: '#/components/schemas/FieldInput' - type: object properties: id: type: integer Error: type: object properties: statusCode: type: integer error: type: string messages: type: array items: type: string 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 DeleteResponse: type: object properties: id: type: integer success: type: boolean FieldPage: allOf: - $ref: '#/components/schemas/Page' - type: object properties: items: type: array items: $ref: '#/components/schemas/Field' responses: FieldList: description: A page of custom field values. content: application/json: schema: $ref: '#/components/schemas/FieldPage' Deleted: description: Deletion confirmation. content: application/json: schema: $ref: '#/components/schemas/DeleteResponse' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or invalid credentials. content: application/json: schema: $ref: '#/components/schemas/Error' Field: description: A custom field value. content: application/json: schema: $ref: '#/components/schemas/Field' ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: Id: name: id in: path required: true description: The unique identifier of the resource. schema: type: integer Offset: name: offset in: query description: Number of items to skip for pagination. schema: type: integer default: 0 Limit: name: limit in: query description: Maximum number of items to return per page. schema: type: integer default: 100 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: {}