---
openapi: 3.0.1
info:
  title: Tripleseat API
  version: v1
  description: |
    ## Overview

    The Tripleseat API provides programmatic access to your Tripleseat data including events, leads, bookings, contacts, accounts, locations, and more.

    All API requests are made to `https://api.tripleseat.com/v1/` and responses are available in both **JSON** and **XML** formats. Specify the format using the URL extension (e.g., `/v1/events.json` or `/v1/events.xml`).

    You can [download the OpenAPI specification](/settings/api/openapi_spec) to import into tools like Postman, Insomnia, or any OpenAPI-compatible client.

    ## Authentication

    The Tripleseat API uses **OAuth 2.0** for authentication. There are two domains involved:

    - **Authorization** (user login & consent) — `login.tripleseat.com`
    - **Token exchange & API calls** — `api.tripleseat.com`

    Your application acts on behalf of a Tripleseat user. The user is redirected to Tripleseat to log in and approve access, then sent back to your app with an authorization code.

    **Step 1 — Redirect the user to Tripleseat to log in:**

    ```
    https://login.tripleseat.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=YOUR_SCOPES
    ```

    **Step 2 — Exchange the authorization code for tokens:**

    ```
    POST https://api.tripleseat.com/oauth2/token
    Content-Type: application/x-www-form-urlencoded

    grant_type=authorization_code&code=AUTHORIZATION_CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REDIRECT_URI
    ```

    The response includes an `access_token` and a `refresh_token`.

    ### Token Lifecycle

    - Access tokens expire after **2 hours** (7200 seconds).
    - Use the `refresh_token` to obtain a new access token without requiring the user to log in again.
    - Include the token in every API request as a **Bearer token**:

    ```
    Authorization: Bearer YOUR_ACCESS_TOKEN
    ```

    ### Public API Key

    The **Lead Form** and **Locations** endpoints also support authentication via a public API key passed as a query parameter: `?public_key=YOUR_KEY`

    This is intended for website lead form integrations where OAuth is not practical. You can find your public API key on the [API](#overview) tab.

    ## Rate Limits

    API requests are limited to **10 requests per second**. Exceeding this limit will result in a `429 Too Many Requests` response.

    ## Pagination

    List endpoints return paginated results (50 per page by default). Use these query parameters:

    | Parameter | Description | Example |
    |-----------|-------------|---------|
    | `page` | Page number (starts at 1) | `?page=2` |
    | `order` | Field to sort by | `?order=created_at` |
    | `sort_direction` | Sort direction (`asc` or `desc`) | `?sort_direction=desc` |

    ## Nested Objects

    Sub-objects (e.g., bookings within an event) can be managed through their parent's API:

    - **Create** — Pass nested object data **without** an `id` field
    - **Update** — Include the nested object's `id` in the request
    - **Delete** — Pass `_destroy: true` on the nested object

    ## Using "Try it out"

    Navigate to any endpoint page using the tabs above, then click the **Authorize** button to enter your credentials. You can generate a token directly from your OAuth 2.0 app, or paste one manually. Once authorized, use the **Try it out** button on any endpoint to execute API calls directly from this page.
paths:
  "/v1/accounts":
    get:
      summary: list accounts
      tags:
      - Accounts
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Accounts found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Account"
        '401':
          description: Unauthorized
    post:
      summary: create account
      tags:
      - Accounts
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Account created
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  account:
                    "$ref": "#/components/schemas/Account"
        '422':
          description: Unprocessable Entity
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                account:
                  "$ref": "#/components/schemas/AccountCreateRequest"
              required:
              - account
  "/v1/accounts/search":
    get:
      summary: search accounts
      tags:
      - Accounts
      security:
      - OAuthToken: []
      parameters:
      - name: query
        in: query
        required: false
        description: Search query to match account names
        schema:
          type: string
      - name: order
        in: query
        required: false
        enum:
        - created_at
        - updated_at
        - name
        description: "Field to order results by:\n * `created_at` \n * `updated_at`
          \n * `name` \n "
        schema:
          type: string
      - name: sort_direction
        in: query
        required: false
        enum:
        - asc
        - desc
        description: Sort direction
        schema:
          type: string
      - name: account_created_start_date
        in: query
        format: date
        required: false
        description: Filter accounts created after this date
        schema:
          type: string
      - name: account_created_end_date
        in: query
        format: date
        required: false
        description: Filter accounts created before this date
        schema:
          type: string
      - name: account_updated_start_date
        in: query
        format: date
        required: false
        description: Filter accounts updated after this date
        schema:
          type: string
      - name: account_updated_end_date
        in: query
        format: date
        required: false
        description: Filter accounts updated before this date
        schema:
          type: string
      - name: page
        in: query
        required: false
        default: 1
        description: Page number for pagination
        schema:
          type: integer
      responses:
        '200':
          description: Accounts found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Account"
        '401':
          description: Unauthorized
  "/v1/accounts/{id}":
    parameters:
    - name: id
      in: path
      description: Account ID
      required: true
      schema:
        type: integer
    get:
      summary: show account
      tags:
      - Accounts
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Account found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  account:
                    "$ref": "#/components/schemas/Account"
        '404':
          description: Account not found
        '401':
          description: Unauthorized
    put:
      summary: update account
      tags:
      - Accounts
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Account updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  account:
                    "$ref": "#/components/schemas/Account"
        '422':
          description: Unprocessable Entity
        '404':
          description: Account not found
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                account:
                  "$ref": "#/components/schemas/AccountUpdateRequest"
              required:
              - account
    delete:
      summary: delete account
      tags:
      - Accounts
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Account deleted
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  account:
                    "$ref": "#/components/schemas/Account"
        '404':
          description: Account not found
        '401':
          description: Unauthorized
  "/v1/bookings":
    get:
      summary: list bookings
      tags:
      - Bookings
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
      - name: show_financial
        in: query
        required: false
        default: false
        description: Include financial data in response
        schema:
          type: boolean
      - name: active
        in: query
        required: false
        description: Filter to active bookings only
        schema:
          type: boolean
      responses:
        '200':
          description: Bookings found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Booking"
        '401':
          description: Unauthorized
    post:
      summary: create a booking
      tags:
      - Bookings
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Booking created
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  booking:
                    "$ref": "#/components/schemas/Booking"
        '422':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/BookingCreateRequest"
  "/v1/bookings/search":
    get:
      summary: search bookings
      tags:
      - Bookings
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Page number (50 results per page)
        schema:
          type: integer
      - name: query
        in: query
        required: false
        description: General search query
        schema:
          type: string
      - name: order
        in: query
        required: false
        enum:
        - created_at
        - updated_at
        - name
        description: "Field to sort by:\n * `created_at` \n * `updated_at` \n * `name`
          \n "
        schema:
          type: string
      - name: sort_direction
        in: query
        required: false
        enum:
        - asc
        - desc
        description: Sort direction
        schema:
          type: string
      - name: booking_start_date
        in: query
        format: date
        required: false
        description: Filter bookings starting on or after this date
        schema:
          type: string
      - name: booking_end_date
        in: query
        format: date
        required: false
        description: Filter bookings ending on or before this date
        schema:
          type: string
      - name: booking_created_start_date
        in: query
        format: date
        required: false
        description: Filter bookings created on or after this date
        schema:
          type: string
      - name: booking_created_end_date
        in: query
        format: date
        required: false
        description: Filter bookings created on or before this date
        schema:
          type: string
      - name: booking_updated_start_date
        in: query
        format: date
        required: false
        description: Filter bookings updated on or after this date
        schema:
          type: string
      - name: booking_updated_end_date
        in: query
        format: date
        required: false
        description: Filter bookings updated on or before this date
        schema:
          type: string
      - name: location_ids
        in: query
        required: false
        description: Comma-separated list of location IDs to filter by
        schema:
          type: string
      - name: show_financial
        in: query
        required: false
        default: false
        description: Include financial data in response
        schema:
          type: boolean
      - name: status
        in: query
        required: false
        description: Filter by booking status
        schema:
          type: string
      - name: active
        in: query
        required: false
        description: Filter to active bookings only
        schema:
          type: boolean
      responses:
        '200':
          description: Search results
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Booking"
        '401':
          description: Unauthorized
      description: Search bookings using various filters including date ranges, status,
        and location. Results are paginated (50 per page). Requires OpenSearch to
        be available.
  "/v1/bookings/{id}":
    parameters:
    - name: id
      in: path
      description: Booking ID
      required: true
      schema:
        type: integer
    get:
      summary: retrieve a booking
      tags:
      - Bookings
      security:
      - OAuthToken: []
      parameters:
      - name: show_financial
        in: query
        required: false
        default: false
        description: Include financial data in response
        schema:
          type: boolean
      responses:
        '200':
          description: Booking found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  booking:
                    "$ref": "#/components/schemas/Booking"
        '404':
          description: Booking not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
        '401':
          description: Unauthorized
    put:
      summary: update a booking
      tags:
      - Bookings
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Booking updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  booking:
                    "$ref": "#/components/schemas/Booking"
        '404':
          description: Booking not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
        '422':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/BookingUpdateRequest"
    delete:
      summary: delete a booking
      tags:
      - Bookings
      security:
      - OAuthToken: []
      responses:
        '204':
          description: Booking deleted
        '404':
          description: Booking not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
        '401':
          description: Unauthorized
  "/v1/bookings/{id}/update":
    parameters:
    - name: id
      in: path
      description: Booking ID
      required: true
      schema:
        type: integer
    post:
      summary: update a booking (non-RESTful)
      tags:
      - Bookings
      security:
      - OAuthToken: []
      deprecated: true
      description: This endpoint uses POST instead of PUT. Use PUT /v1/bookings/{id}
        for RESTful updates.
      parameters: []
      responses:
        '200':
          description: Booking updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  booking:
                    "$ref": "#/components/schemas/Booking"
        '404':
          description: Booking not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                start_date:
                  type: string
                  format: date
                end_date:
                  type: string
                  format: date
                location_id:
                  type: integer
                account_id:
                  type: integer
                contact_id:
                  type: integer
                status:
                  type: string
  "/v1/contacts":
    get:
      summary: list contacts
      tags:
      - Contacts
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: include_deleted
        in: query
        required: false
        description: Include soft-deleted contacts
        schema:
          type: boolean
      responses:
        '200':
          description: Contacts found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Contact"
        '401':
          description: Unauthorized
    post:
      summary: create a contact
      tags:
      - Contacts
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Contact created
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  contact:
                    "$ref": "#/components/schemas/Contact"
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                first_name:
                  type: string
                last_name:
                  type: string
                title:
                  type: string
                account_id:
                  type: integer
                contact_type:
                  type: string
                email_opt_in:
                  type: boolean
                description:
                  type: string
                owned_by:
                  type: integer
                phone_numbers_attributes:
                  type: array
                  items:
                    type: object
                    properties:
                      number:
                        type: string
                      extension:
                        type: string
                      phone_number_type:
                        type: string
                email_addresses_attributes:
                  type: array
                  items:
                    type: object
                    properties:
                      address:
                        type: string
                addresses_attributes:
                  type: array
                  items:
                    type: object
                    properties:
                      address1:
                        type: string
                      address2:
                        type: string
                      city:
                        type: string
                      state:
                        type: string
                      country:
                        type: string
                      zip_code:
                        type: string
                      address_type:
                        type: string
                custom_field_values_attributes:
                  type: array
                  items:
                    type: object
                    properties:
                      custom_field_id:
                        type: integer
                      value:
                        type: string
                      long:
                        type: string
              required:
              - first_name
              - last_name
        required: true
  "/v1/contacts/search":
    get:
      summary: search contacts
      tags:
      - Contacts
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Page number for pagination
        schema:
          type: integer
      - name: query
        in: query
        required: false
        description: Search query to match contact names
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: "Field to order results by:\n * `created_at` \n * `updated_at`
          \n * `first_name` \n * `last_name` \n "
        enum:
        - created_at
        - updated_at
        - first_name
        - last_name
        schema:
          type: string
      - name: sort_direction
        in: query
        required: false
        description: Sort direction
        enum:
        - asc
        - desc
        schema:
          type: string
      - name: contact_created_start_date
        in: query
        required: false
        description: Filter contacts created after this date
        format: date
        schema:
          type: string
      - name: contact_created_end_date
        in: query
        required: false
        description: Filter contacts created before this date
        format: date
        schema:
          type: string
      - name: contact_updated_start_date
        in: query
        required: false
        description: Filter contacts updated after this date
        format: date
        schema:
          type: string
      - name: contact_updated_end_date
        in: query
        required: false
        description: Filter contacts updated before this date
        format: date
        schema:
          type: string
      - name: email_opt_in
        in: query
        required: false
        description: Filter by email opt-in status
        enum:
        - 'true'
        - 'false'
        schema:
          type: string
      - name: account_id
        in: query
        required: false
        description: Filter by associated account ID
        schema:
          type: integer
      - name: include_deleted
        in: query
        required: false
        description: Include soft-deleted contacts
        enum:
        - 'true'
        - 'false'
        schema:
          type: string
      responses:
        '200':
          description: Contacts found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Contact"
        '401':
          description: Unauthorized
  "/v1/contacts/{id}":
    parameters:
    - name: id
      in: path
      description: Contact ID
      required: true
      schema:
        type: integer
    get:
      summary: show contact
      tags:
      - Contacts
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Contact found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  contact:
                    "$ref": "#/components/schemas/Contact"
        '404':
          description: Contact not found
        '401':
          description: Unauthorized
    put:
      summary: update contact
      tags:
      - Contacts
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Contact updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  contact:
                    "$ref": "#/components/schemas/Contact"
        '404':
          description: Contact not found
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                "$ref": "#/components/schemas/Contact"
        required: true
    delete:
      summary: delete contact
      tags:
      - Contacts
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Contact deleted (soft delete)
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  contact:
                    "$ref": "#/components/schemas/Contact"
        '404':
          description: Contact not found
        '401':
          description: Unauthorized
  "/v1/documents/{id}/billing_amount":
    parameters:
    - name: id
      in: path
      description: Document ID
      required: true
      schema:
        type: integer
    patch:
      summary: update a billing amount on a document
      tags:
      - Documents
      security:
      - OAuthToken: []
      description: Update the value of a specific billing line item on a document.
        Values can be fixed amounts (e.g. '100.50') or percentages (e.g. '10%').
      parameters:
      - name: billing_id
        in: query
        required: true
        description: The billing item ID to update
        schema:
          type: integer
      - name: value
        in: query
        required: true
        description: New value — a number (e.g. '100.50') or percentage (e.g. '10%')
        schema:
          type: string
      - name: create_if_missing
        in: query
        required: false
        default: true
        description: Create the billing item on the document if it doesn't exist
        schema:
          type: boolean
      responses:
        '200':
          description: Billing amount updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  document:
                    "$ref": "#/components/schemas/DocumentBillingResponse"
        '404':
          description: Document or billing not found
        '422':
          description: Invalid value format
        '401':
          description: Unauthorized
  "/v1/events":
    get:
      summary: list events
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
      - name: show_financial
        in: query
        required: false
        default: false
        description: Include financial data in response
        schema:
          type: boolean
      - name: include_deleted
        in: query
        required: false
        default: false
        description: Include soft-deleted events
        schema:
          type: boolean
      responses:
        '200':
          description: Events found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Event"
        '401':
          description: Unauthorized
    post:
      summary: create an event
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Event created
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  event:
                    "$ref": "#/components/schemas/Event"
        '422':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/EventCreateRequest"
  "/v1/events/search":
    get:
      summary: search events
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: location_ids
        in: query
        items:
          type: integer
        required: false
        schema:
          type: array
      - name: event_created_start_date
        in: query
        format: date
        required: false
        schema:
          type: string
      - name: event_created_end_date
        in: query
        format: date
        required: false
        schema:
          type: string
      - name: query
        in: query
        required: false
        description: Search query to match event names
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: "Field to order results by:\n * `created_at` \n * `updated_at`
          \n * `name` \n * `event_start` \n "
        enum:
        - created_at
        - updated_at
        - name
        - event_start
        schema:
          type: string
      - name: sort_direction
        in: query
        required: false
        description: Sort direction
        enum:
        - asc
        - desc
        schema:
          type: string
      - name: event_start_date
        in: query
        format: date
        required: false
        description: Filter events whose start time falls on or after this date. Both
          event_start_date and event_end_date filter by the event's start time only.
          For overlap-based filtering, use date_range_start and date_range_end instead.
        schema:
          type: string
      - name: event_end_date
        in: query
        format: date
        required: false
        description: Filter events whose start time falls on or before this date.
          Both event_start_date and event_end_date filter by the event's start time
          only. For overlap-based filtering, use date_range_start and date_range_end
          instead.
        schema:
          type: string
      - name: event_updated_start_date
        in: query
        format: date
        required: false
        description: Filter events updated after this date
        schema:
          type: string
      - name: event_updated_end_date
        in: query
        format: date
        required: false
        description: Filter events updated before this date
        schema:
          type: string
      - name: date_range_start
        in: query
        format: date
        required: false
        description: Filter events that overlap with a date range. Returns any event
          whose time span touches the range. Use with date_range_end for a bounded
          range, or alone to find events ending on or after this date.
        schema:
          type: string
      - name: date_range_end
        in: query
        format: date
        required: false
        description: Filter events that overlap with a date range. Returns any event
          whose time span touches the range. Use with date_range_start for a bounded
          range, or alone to find events starting on or before this date.
        schema:
          type: string
      - name: room_ids
        in: query
        required: false
        description: Filter by room IDs (comma-separated)
        schema:
          type: string
      - name: status
        in: query
        required: false
        description: Filter by event status
        enum:
        - PROSPECT
        - TENTATIVE
        - DEFINITE
        - CLOSED
        - LOST
        schema:
          type: string
      - name: show_financial
        in: query
        required: false
        default: false
        description: Include financial data in response
        schema:
          type: boolean
      - name: include_deleted
        in: query
        required: false
        default: false
        description: Include soft-deleted events
        schema:
          type: boolean
      responses:
        '200':
          description: Events found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Event"
        '401':
          description: Unauthorized
  "/v1/events/{id}":
    get:
      summary: show an event
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      - name: show_financial
        in: query
        required: false
        default: false
        schema:
          type: boolean
      responses:
        '200':
          description: Event found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  event:
                    "$ref": "#/components/schemas/Event"
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
        '404':
          description: Event not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
    put:
      summary: update an event
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Event updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  event:
                    "$ref": "#/components/schemas/Event"
        '422':
          description: Event not updated
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/EventUpdateRequest"
    delete:
      summary: delete an event
      tags:
      - Events
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Event deleted
  "/v1/guest_room_blocks":
    get:
      summary: list guest room blocks
      tags:
      - Guest Room Blocks
      security:
      - OAuthToken: []
      parameters:
      - name: location_id
        in: query
        required: true
        description: Location ID (required)
        schema:
          type: integer
      - name: start_date
        in: query
        format: date
        required: false
        description: Filter blocks starting on or after this date
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        required: false
        description: Filter blocks ending on or before this date
        schema:
          type: string
      - name: status
        in: query
        required: false
        description: Filter by block status
        schema:
          type: string
      - name: pms_group_code
        in: query
        required: false
        description: Filter by PMS group code
        schema:
          type: string
      - name: pms_group_id
        in: query
        required: false
        description: Filter by PMS group ID
        schema:
          type: string
      - name: pms_rate_code
        in: query
        required: false
        description: Filter by PMS rate code
        schema:
          type: string
      responses:
        '200':
          description: Guest room blocks found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  guest_room_blocks:
                    type: array
                    items:
                      "$ref": "#/components/schemas/GuestRoomBlock"
        '422':
          description: Missing location_id
        '401':
          description: Unauthorized
    post:
      summary: create a guest room block
      tags:
      - Guest Room Blocks
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '201':
          description: Guest room block created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/GuestRoomBlock"
        '422':
          description: Validation errors
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/GuestRoomBlockCreateRequest"
  "/v1/guest_room_blocks/{id}":
    parameters:
    - name: id
      in: path
      description: Guest room block ID
      required: true
      schema:
        type: integer
    get:
      summary: retrieve a guest room block
      tags:
      - Guest Room Blocks
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Guest room block found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  guest_room_block:
                    "$ref": "#/components/schemas/GuestRoomBlock"
        '404':
          description: Guest room block not found
        '401':
          description: Unauthorized
    put:
      summary: update a guest room block
      tags:
      - Guest Room Blocks
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Guest room block updated
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  guest_room_block:
                    "$ref": "#/components/schemas/GuestRoomBlock"
        '404':
          description: Guest room block not found
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/GuestRoomBlockUpdateRequest"
  "/v1/lead_forms":
    get:
      summary: list lead forms
      tags:
      - Lead Forms
      description: Returns a list of lead forms (both legacy and dynamic) for the
        authenticated customer
      operationId: getLeadForms
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: location_id
        in: query
        required: false
        description: Filter forms by location ID
        schema:
          type: integer
      - name: active
        in: query
        required: false
        description: Filter by active status
        schema:
          type: boolean
      - name: paginated
        in: query
        required: false
        description: Return paginated format with full details
        schema:
          type: boolean
      responses:
        '200':
          description: Lead forms found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/LeadForm"
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/lead_forms/{id}":
    get:
      summary: show lead form
      tags:
      - Lead Forms
      description: Returns details for a specific lead form including fields
      operationId: getLeadForm
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: Lead form ID
        schema:
          type: integer
      - name: form_type
        in: query
        required: false
        enum:
        - legacy
        - dynamic
        description: "Filter by form type to disambiguate when IDs collide:\n * `legacy`
          \n * `dynamic` \n "
        schema:
          type: string
      responses:
        '200':
          description: Lead form found
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/LeadForm"
        '404':
          description: Lead form not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/leads":
    get:
      summary: list leads
      tags:
      - Leads
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Leads found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Lead"
        '401':
          description: Unauthorized
    post:
      summary: create a lead
      tags:
      - Leads
      security:
      - OAuthToken: []
        PublicApiKey: []
      parameters:
      - name: lead_form_id
        in: query
        required: false
        description: ID of the lead form being submitted
        schema:
          type: integer
      - name: validate_only
        in: query
        required: false
        description: If present, only validate the lead without saving
        schema:
          type: string
      - name: simple_error_messages
        in: query
        required: false
        description: Return simplified error messages
        schema:
          type: string
      - name: website
        in: query
        required: false
        description: Honeypot field for spam detection - should be left blank
        schema:
          type: string
      responses:
        '200':
          description: Lead created
          content:
            application/json:
              schema:
                type: object
                properties:
                  lead_id:
                    type: integer
                  success_message:
                    type: string
                additionalProperties: false
        '400':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/LeadCreateRequest"
  "/v1/leads/search":
    get:
      summary: search leads
      tags:
      - Leads
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Page number for pagination
        schema:
          type: integer
      - name: query
        in: query
        required: false
        description: Search query for lead name
        schema:
          type: string
      - name: order
        in: query
        required: false
        description: "Field to order results by:\n * `created_at` \n * `updated_at`
          \n * `first_name` \n * `last_name` \n * `company` \n "
        enum:
        - created_at
        - updated_at
        - first_name
        - last_name
        - company
        schema:
          type: string
      - name: sort_direction
        in: query
        required: false
        description: Sort direction
        enum:
        - asc
        - desc
        schema:
          type: string
      - name: email_opt_in
        in: query
        required: false
        description: Filter by email opt-in status
        schema:
          type: boolean
      - name: lead_status
        in: query
        required: false
        description: Filter by lead status
        schema:
          type: string
      - name: created_after
        in: query
        format: date
        required: false
        description: Filter leads created after this date
        schema:
          type: string
      - name: created_before
        in: query
        format: date
        required: false
        description: Filter leads created before this date
        schema:
          type: string
      responses:
        '200':
          description: Leads found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Lead"
        '401':
          description: Unauthorized
  "/v1/leads/{id}":
    get:
      summary: show lead
      tags:
      - Leads
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: Lead ID
        schema:
          type: integer
      responses:
        '200':
          description: Lead found
          content:
            application/json:
              schema:
                type: object
                properties:
                  lead:
                    "$ref": "#/components/schemas/Lead"
        '404':
          description: Lead not found
        '401':
          description: Unauthorized
    put:
      summary: update lead
      tags:
      - Leads
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: Lead ID
        schema:
          type: integer
      responses:
        '200':
          description: Lead updated with task ownership reassignment
          content:
            application/json:
              schema:
                type: object
                properties:
                  lead:
                    "$ref": "#/components/schemas/Lead"
        '422':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
        '404':
          description: Lead not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/LeadUpdateRequest"
    delete:
      summary: delete lead
      tags:
      - Leads
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: Lead ID
        schema:
          type: integer
      responses:
        '200':
          description: Lead deleted
          content:
            application/json:
              schema:
                type: object
                properties:
                  lead:
                    "$ref": "#/components/schemas/Lead"
        '404':
          description: Lead not found
        '401':
          description: Unauthorized
  "/v1/leads/create":
    post:
      summary: create an lead
      security:
      - OAuthToken: []
        PublicApiKey: []
      parameters:
      - name: public_key
        in: query
        required: false
        description: Public API key for authentication
        schema:
          type: string
      responses:
        '200':
          description: Lead created with public key
          content:
            application/json:
              schema:
                type: object
                properties:
                  lead_id:
                    type: integer
                  success_message:
                    type: string
                additionalProperties: false
        '401':
          description: Unauthorized without any authentication
        '400':
          description: invalid or missing fields
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnprocessableEntityError"
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Lead"
  "/v1/locations":
    get:
      summary: list locations with public API key
      tags:
      - Locations
      description: Returns a list of locations using public API key authentication
      operationId: getLocationsWithPublicKey
      security:
      - PublicApiKey: []
      parameters:
      - name: public_key
        in: query
        required: true
        description: Public API key for authentication
        schema:
          type: string
      - name: include_public_listing
        in: query
        required: false
        description: Set to '1' to include public listing data
        schema:
          type: string
      responses:
        '200':
          description: Locations found
          content:
            application/json:
              schema:
                type: array
                items:
                  "$ref": "#/components/schemas/LocationWrapped"
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/locations/{id}":
    get:
      summary: show location with public API key
      tags:
      - Locations
      description: Returns details for a specific location using public API key authentication
      operationId: getLocationWithPublicKey
      security:
      - PublicApiKey: []
      parameters:
      - name: id
        in: path
        required: true
        description: Location ID
        schema:
          type: integer
      - name: public_key
        in: query
        required: true
        description: Public API key for authentication
        schema:
          type: string
      - name: include_public_listing
        in: query
        required: false
        description: Set to '1' to include public listing data
        schema:
          type: string
      responses:
        '200':
          description: Location found
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/LocationWrapped"
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
        '404':
          description: Location not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
  "/v1/events/{event_id}/menu_item_selections":
    get:
      summary: the event's menu item selecitions
      tags:
      - Events
      parameters:
      - name: event_id
        in: path
        required: true
        schema:
          type: integer
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Menu item selections found
          content:
            application/json:
              schema:
                type: object
                properties:
                  menu_item_selections:
                    type: array
                    items:
                      "$ref": "#/components/schemas/MenuItemSelection"
  "/v1/events/{event_id}/menu_item_selections/{id}":
    get:
      summary: the event's menu item selection
      tags:
      - Events
      parameters:
      - name: event_id
        in: path
        required: true
        schema:
          type: integer
      - name: id
        in: path
        required: true
        schema:
          type: integer
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Menu item selections found
          content:
            application/json:
              schema:
                type: object
                properties:
                  menu_item_selection:
                    "$ref": "#/components/schemas/MenuItemSelection"
  "/v1/menu_update":
    post:
      summary: submit a menu update
      tags:
      - Menu Updates
      security:
      - OAuthToken: []
      description: Submit menu data for a location. The menu is processed asynchronously.
        Use the returned request_id to poll for completion status.
      parameters:
      - name: location
        in: query
        required: true
        description: Location identifier (matched using location_match_field)
        schema:
          type: string
      - name: location_match_field
        in: query
        required: false
        enum:
        - id
        - name
        description: "How to match the location parameter: 'id' (default), 'name',
          or 'cf.{custom_field_id}':\n * `id` \n * `name` \n "
        schema:
          type: string
      - name: callback_url
        in: query
        required: false
        description: URL to call back when the menu update completes
        schema:
          type: string
      - name: menu_format
        in: query
        required: false
        description: Format type for the menu data
        schema:
          type: string
      responses:
        '200':
          description: Menu update task created
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  request_id:
                    type: string
                    format: uuid
        '400':
          description: Location not found
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Raw JSON menu data payload
  "/v1/menu_update/{uuid}":
    parameters:
    - name: uuid
      in: path
      format: uuid
      description: Menu update task request ID
      required: true
      schema:
        type: string
    get:
      summary: check menu update status
      tags:
      - Menu Updates
      security:
      - OAuthToken: []
      description: Poll for the completion status of a previously submitted menu update
        task.
      responses:
        '200':
          description: Menu update task found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  menu_update_task:
                    "$ref": "#/components/schemas/MenuUpdateTaskResponse"
        '404':
          description: Menu update task not found
        '401':
          description: Unauthorized
  "/v1/menus":
    get:
      summary: all menus for the current site or customer
      tags:
      - Menus
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        schema:
          type: integer
      - name: per_page
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Menu item selections found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/Menu"
        '401':
          description: Unauthorized
  "/v1/menus/{id}":
    get:
      summary: the specified menu
      tags:
      - Menus
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Menu found
          content:
            application/json:
              schema:
                type: object
                properties:
                  menu:
                    "$ref": "#/components/schemas/Menu"
        '404':
          description: Menu not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
        '401':
          description: Unauthorized
  "/v1/accounts/{account_id}/notes":
    parameters:
    - name: account_id
      in: path
      description: Account ID
      required: true
      schema:
        type: integer
    get:
      summary: list account notes
      tags:
      - Accounts
      description: Returns a paginated list of notes for an account
      operationId: getAccountNotes
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: integer
      - name: per_page
        in: query
        description: 'Items per page (default: 50)'
        schema:
          type: integer
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    post:
      summary: create account note
      tags:
      - Accounts
      description: Creates a new note for an account
      operationId: createAccountNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: silently drops created_by when user is missing
        '401':
          description: unauthorized
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteCreateRequest"
  "/v1/accounts/{account_id}/notes/{id}":
    parameters:
    - name: account_id
      in: path
      description: Account ID
      required: true
      schema:
        type: integer
    - name: id
      in: path
      description: Note ID
      required: true
      schema:
        type: integer
    get:
      summary: show account note
      tags:
      - Accounts
      description: Returns a specific note for an account
      operationId: getAccountNote
      security:
      - OAuthToken: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    put:
      summary: update account note
      tags:
      - Accounts
      description: Updates a specific note for an account
      operationId: updateAccountNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteUpdateRequest"
    delete:
      summary: delete account note
      tags:
      - Notes
      description: Deletes a specific note for an account
      operationId: deleteAccountNote
      security:
      - OAuthToken: []
      responses:
        '204':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
  "/v1/contacts/{contact_id}/notes":
    parameters:
    - name: contact_id
      in: path
      description: Contact ID
      required: true
      schema:
        type: integer
    get:
      summary: list contact notes
      tags:
      - Contacts
      description: Returns a paginated list of notes for a contact
      operationId: getContactNotes
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: integer
      - name: per_page
        in: query
        description: 'Items per page (default: 50)'
        schema:
          type: integer
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    post:
      summary: create contact note
      tags:
      - Contacts
      description: Creates a new note for a contact
      operationId: createContactNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteCreateRequest"
  "/v1/contacts/{contact_id}/notes/{id}":
    parameters:
    - name: contact_id
      in: path
      description: Contact ID
      required: true
      schema:
        type: integer
    - name: id
      in: path
      description: Note ID
      required: true
      schema:
        type: integer
    get:
      summary: show contact note
      tags:
      - Contacts
      description: Returns a specific note for a contact
      operationId: getContactNote
      security:
      - OAuthToken: []
      responses:
        '200':
          description: successful
    put:
      summary: update contact note
      tags:
      - Contacts
      description: Updates a specific note for a contact
      operationId: updateContactNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteUpdateRequest"
    delete:
      summary: delete contact note
      tags:
      - Contacts
      description: Deletes a specific note for a contact
      operationId: deleteContactNote
      security:
      - OAuthToken: []
      responses:
        '204':
          description: successful
  "/v1/bookings/{booking_id}/notes":
    parameters:
    - name: booking_id
      in: path
      description: Booking ID
      required: true
      schema:
        type: integer
    get:
      summary: list booking notes
      tags:
      - Bookings
      description: Returns a paginated list of notes for a booking
      operationId: getBookingNotes
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: integer
      - name: per_page
        in: query
        description: 'Items per page (default: 50)'
        schema:
          type: integer
      responses:
        '200':
          description: successful
    post:
      summary: create booking note
      tags:
      - Bookings
      description: Creates a new note for a booking
      operationId: createBookingNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteCreateRequest"
  "/v1/bookings/{booking_id}/notes/{id}":
    parameters:
    - name: booking_id
      in: path
      description: Booking ID
      required: true
      schema:
        type: integer
    - name: id
      in: path
      description: Note ID
      required: true
      schema:
        type: integer
    get:
      summary: show booking note
      tags:
      - Bookings
      description: Returns a specific note for a booking
      operationId: getBookingNote
      security:
      - OAuthToken: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    put:
      summary: update booking note
      tags:
      - Bookings
      description: Updates a specific note for a booking
      operationId: updateBookingNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteUpdateRequest"
    delete:
      summary: delete booking note
      tags:
      - Bookings
      description: Deletes a specific note for a booking
      operationId: deleteBookingNote
      security:
      - OAuthToken: []
      responses:
        '204':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
  "/v1/events/{event_id}/notes":
    parameters:
    - name: event_id
      in: path
      description: Event ID
      required: true
      schema:
        type: integer
    get:
      summary: list event notes
      tags:
      - Events
      description: Returns a paginated list of notes for an event
      operationId: getEventNotes
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: integer
      - name: per_page
        in: query
        description: 'Items per page (default: 50)'
        schema:
          type: integer
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    post:
      summary: create event note
      tags:
      - Events
      description: Creates a new note for an event
      operationId: createEventNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteCreateRequest"
  "/v1/events/{event_id}/notes/{id}":
    parameters:
    - name: event_id
      in: path
      description: Event ID
      required: true
      schema:
        type: integer
    - name: id
      in: path
      description: Note ID
      required: true
      schema:
        type: integer
    get:
      summary: show event note
      tags:
      - Events
      description: Returns a specific note for an event
      operationId: getEventNote
      security:
      - OAuthToken: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    put:
      summary: update event note
      tags:
      - Events
      description: Updates a specific note for an event
      operationId: updateEventNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteUpdateRequest"
    delete:
      summary: delete event note
      tags:
      - Notes
      description: Deletes a specific note for an event
      operationId: deleteEventNote
      security:
      - OAuthToken: []
      responses:
        '204':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
  "/v1/leads/{lead_id}/notes":
    parameters:
    - name: lead_id
      in: path
      description: Lead ID
      required: true
      schema:
        type: integer
    get:
      summary: list lead notes
      tags:
      - Leads
      description: Returns a paginated list of notes for a lead
      operationId: getLeadNotes
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        description: 'Page number (default: 1)'
        schema:
          type: integer
      - name: per_page
        in: query
        description: 'Items per page (default: 50)'
        schema:
          type: integer
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    post:
      summary: create lead note
      tags:
      - Leads
      description: Creates a new note for a lead
      operationId: createLeadNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteCreateRequest"
  "/v1/leads/{lead_id}/notes/{id}":
    parameters:
    - name: lead_id
      in: path
      description: Lead ID
      required: true
      schema:
        type: integer
    - name: id
      in: path
      description: Note ID
      required: true
      schema:
        type: integer
    get:
      summary: show lead note
      tags:
      - Leads
      description: Returns a specific note for a lead
      operationId: getLeadNote
      security:
      - OAuthToken: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
    put:
      summary: update lead note
      tags:
      - Leads
      description: Updates a specific note for a lead
      operationId: updateLeadNote
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
        '422':
          description: unprocessable entity
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/NoteUpdateRequest"
    delete:
      summary: delete lead note
      tags:
      - Leads
      description: Deletes a specific note for a lead
      operationId: deleteLeadNote
      security:
      - OAuthToken: []
      responses:
        '204':
          description: successful
        '401':
          description: unauthorized
        '404':
          description: not found
  "/v1/payments/transaction_report.csv":
    get:
      summary: payment transaction report CSV
      tags:
      - Payment Reports
      description: Generate a CSV transaction report for payments within a specified
        date range
      operationId: getPaymentTransactionReportCSV
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: use_modified_date
        in: query
        description: "Use payment modified date instead of paid date:\n * `0` \n *
          `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: Include room information in the report
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: cc_only
        in: query
        description: Include only credit card payments
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: custom_fields
        in: query
        description: Comma-separated list of custom field types to include (location,booking,event)
        required: false
        schema:
          type: string
      - name: columns
        in: query
        description: Comma-separated list of specific columns to include in CSV export
        required: false
        schema:
          type: string
      - name: separator
        in: query
        description: 'CSV separator character (default: comma)'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful CSV response
        '400':
          description: bad request - missing date parameters
          content:
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            text/csv:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/payments/transaction_report":
    get:
      summary: payment transaction report
      tags:
      - Payment Reports
      description: Generate a transaction report for payments within a specified date
        range
      operationId: getPaymentTransactionReport
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: use_modified_date
        in: query
        description: "Use payment modified date instead of paid date:\n * `0` \n *
          `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: Include room information in the report
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: cc_only
        in: query
        description: Include only credit card payments
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: custom_fields
        in: query
        description: Comma-separated list of custom field types to include (location,booking,event)
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful with date range
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        rowid:
                          type: string
                        payment_method:
                          type: string
                          nullable: true
                        payable_type:
                          type: string
                        payable_id:
                          type: integer
                        payable:
                          type: string
                        payable_date:
                          type: string
                          format: date-time
                          nullable: true
                        payable_status:
                          type: string
                        location_id:
                          type: integer
                        location:
                          type: string
                        payment_id:
                          type: integer
                        paid_at:
                          type: string
                          format: date-time
                          nullable: true
                        card_type:
                          type: string
                          nullable: true
                        card_last4:
                          type: string
                          nullable: true
                        card_holder_name:
                          type: string
                          nullable: true
                        amount:
                          type: number
                          format: decimal
                        transaction_id:
                          type: string
                          nullable: true
                        card_id:
                          type: string
                          nullable: true
                        auth_code:
                          type: string
                          nullable: true
                        reference:
                          type: string
                          nullable: true
                        last_modified:
                          type: string
                          format: date-time
        '400':
          description: bad request - missing date parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/payments/refund_report.csv":
    get:
      summary: payment refund report CSV
      tags:
      - Payment Reports
      description: Generate a CSV refund report for payments within a specified date
        range
      operationId: getPaymentRefundReportCSV
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: "Include room information in the report:\n * `0` \n * `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: cc_only
        in: query
        description: Include only credit card payments
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: all_methods
        in: query
        description: Include all payment methods (overrides credit card filter)
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: custom_fields
        in: query
        description: Comma-separated list of custom field types to include (location,booking,event)
        required: false
        schema:
          type: string
      - name: columns
        in: query
        description: Comma-separated list of specific columns to include in CSV export
        required: false
        schema:
          type: string
      - name: separator
        in: query
        description: 'CSV separator character (default: comma)'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful CSV response
        '400':
          description: bad request - missing date parameters
          content:
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            text/csv:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/payments/refund_report":
    get:
      summary: payment refund report
      tags:
      - Payment Reports
      description: Generate a refund report for payments within a specified date range
      operationId: getPaymentRefundReport
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: "Include room information in the report:\n * `0` \n * `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: cc_only
        in: query
        description: Include only credit card payments
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: all_methods
        in: query
        description: Include all payment methods (overrides credit card filter)
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: custom_fields
        in: query
        description: Comma-separated list of custom field types to include (location,booking,event)
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful with date range
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        rowid:
                          type: string
                        payment_method:
                          type: string
                          nullable: true
                        payable_type:
                          type: string
                        payable_id:
                          type: integer
                        payable:
                          type: string
                        payable_date:
                          type: string
                          format: date-time
                          nullable: true
                        payable_status:
                          type: string
                        location_id:
                          type: integer
                        location:
                          type: string
                        payment_id:
                          type: integer
                        paid_at:
                          type: string
                          format: date-time
                          nullable: true
                        card_type:
                          type: string
                          nullable: true
                        card_last4:
                          type: string
                          nullable: true
                        card_holder_name:
                          type: string
                          nullable: true
                        original_amount:
                          type: number
                          format: decimal
                        original_transaction_id:
                          type: string
                          nullable: true
                        card_id:
                          type: string
                          nullable: true
                        auth_code:
                          type: string
                          nullable: true
                        refunded_at:
                          type: string
                          format: date-time
                        refund_amount:
                          type: number
                          format: decimal
                        refund_reason:
                          type: string
                          nullable: true
                        user_id:
                          type: integer
                          nullable: true
                        reference:
                          type: string
                          nullable: true
        '400':
          description: bad request - missing date parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/credit_cards/transaction_report":
    get:
      summary: credit card transaction report
      tags:
      - Payment Reports
      description: Generate a transaction report specifically for credit card payments
      operationId: getCreditCardTransactionReport
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: use_modified_date
        in: query
        description: "Use payment modified date instead of paid date:\n * `0` \n *
          `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: all_methods
        in: query
        description: Include all payment methods (not just credit cards)
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: Include room information in the report
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful credit card transaction report
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
        '400':
          description: bad request - missing date parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
            text/csv:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/credit_cards/refund_report":
    get:
      summary: credit card refund report
      tags:
      - Payment Reports
      description: Generate a refund report specifically for credit card payments
      operationId: getCreditCardRefundReport
      security:
      - OAuthToken: []
      parameters:
      - name: date
        in: query
        format: date
        description: Single date for the report (alternative to start_date/end_date)
        required: false
        schema:
          type: string
      - name: start_date
        in: query
        format: date
        description: Start date for the report range
        required: false
        schema:
          type: string
      - name: end_date
        in: query
        format: date
        description: End date for the report range
        required: false
        schema:
          type: string
      - name: all_methods
        in: query
        description: "Include all payment methods (not just credit cards):\n * `0`
          \n * `1` \n "
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_rooms
        in: query
        description: Include room information in the report
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      - name: include_category_totals
        in: query
        description: Include line item category totals
        enum:
        - '0'
        - '1'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful credit card refund report
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  data:
                    type: array
        '400':
          description: bad request - missing date parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
            text/csv:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  error:
                    type: string
        '401':
          description: unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
            text/csv:
              schema:
                "$ref": "#/components/schemas/ErrorResponse"
  "/v1/pms/inventory":
    post:
      summary: push inventory data
      tags:
      - PMS
      security:
      - OAuthToken: []
      description: Push daily room inventory data for a location. Each entry specifies
        availability counts by room type and date. Entries are created or updated
        as needed.
      parameters:
      - name: location_id
        in: query
        required: true
        description: Location ID
        schema:
          type: integer
      responses:
        '200':
          description: Inventory processed
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  success:
                    type: boolean
                  results:
                    "$ref": "#/components/schemas/PmsBatchResults"
        '422':
          description: Invalid parameters
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/PmsInventoryRequest"
  "/v1/pms/rates":
    post:
      summary: push rate data
      tags:
      - PMS
      security:
      - OAuthToken: []
      description: Push room rate data for a location. Supports BAR (Best Available
        Rate) and MAR (Minimum Acceptable Rate) rate plans. Rates are set per room
        type and date.
      parameters:
      - name: location_id
        in: query
        required: true
        description: Location ID
        schema:
          type: integer
      responses:
        '200':
          description: Rates processed
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  success:
                    type: boolean
                  results:
                    "$ref": "#/components/schemas/PmsBatchResults"
        '422':
          description: Invalid parameters
        '401':
          description: Unauthorized
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/PmsRatesRequest"
  "/v1/pms/room_types":
    get:
      summary: list room types for a location
      tags:
      - PMS
      security:
      - OAuthToken: []
      description: List configured guest room types for a location, ordered by position
        then name. Excludes Run of House room types.
      parameters:
      - name: location_id
        in: query
        required: true
        description: Location ID
        schema:
          type: integer
      - name: page
        in: query
        required: false
        default: 1
        description: Page number
        schema:
          type: integer
      - name: per_page
        in: query
        required: false
        default: 50
        description: Results per page (max 100)
        schema:
          type: integer
      responses:
        '200':
          description: Room types found
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
                properties:
                  success:
                    type: boolean
                  room_types:
                    type: array
                    items:
                      "$ref": "#/components/schemas/PmsRoomType"
                  pagination:
                    type: object
                    properties:
                      page:
                        type: integer
                      per_page:
                        type: integer
                      total_count:
                        type: integer
                      total_pages:
                        type: integer
        '422':
          description: Missing location_id
        '404':
          description: Location not found
        '401':
          description: Unauthorized
  "/v1/rooms":
    get:
      summary: list rooms
      tags:
      - Rooms
      description: Returns a paginated list of rooms with their hierarchical relationships
        (parent/child rooms)
      operationId: getRooms
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        description: 'Page number for pagination (default: 1, 50 items per page)'
        schema:
          type: integer
      - name: location_id
        in: query
        required: false
        description: Filter by location ID (single or comma-separated list)
        schema:
          type: string
      - name: listed
        in: query
        required: false
        description: Filter by publicly listed rooms
        schema:
          type: boolean
      - name: room_type
        in: query
        required: false
        description: Filter by room type (Normal, Unassigned)
        schema:
          type: string
      responses:
        '200':
          description: Rooms found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                    description: Total number of pages
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        room:
                          type: object
                          properties:
                            id:
                              type: integer
                              description: Room identifier
                            name:
                              type: string
                              description: Room name
                            capacity:
                              type: integer
                              description: Guest capacity
                              nullable: true
                            description:
                              type: string
                              description: Room description
                              nullable: true
                            customer_id:
                              type: integer
                              description: Customer identifier
                              nullable: true
                            site_id:
                              type: integer
                              description: Site identifier
                            location_id:
                              type: integer
                              description: Location identifier
                            is_unassigned:
                              type: boolean
                              description: Whether this is an Unassigned room
                            room_type:
                              type: string
                              description: Room type (Normal, Unassigned)
                            rate_type:
                              type: string
                              description: Rental rate type (Hourly, Flat Rate)
                              nullable: true
                            calendar_color:
                              type: string
                              description: Hex color for calendar display
                            position:
                              type: integer
                              description: Display order within location
                              nullable: true
                            listed:
                              type: boolean
                              description: Whether room is publicly listed
                            allow_onpremise:
                              type: boolean
                              description: Supports on-premise events
                            allow_largeparty:
                              type: boolean
                              description: Supports large party events
                            created_at:
                              type: string
                              format: date-time
                              description: Room creation timestamp
                            updated_at:
                              type: string
                              format: date-time
                              description: Room last update timestamp
                            parent_rooms:
                              type: array
                              description: Array of parent rooms (rooms this room
                                belongs to)
                              items:
                                type: object
                                properties:
                                  id:
                                    type: integer
                                  name:
                                    type: string
                                  location_id:
                                    type: integer
                            child_rooms:
                              type: array
                              description: Array of child rooms (subdivisions of this
                                room)
                              items:
                                type: object
                                properties:
                                  id:
                                    type: integer
                                  name:
                                    type: string
                                  capacity:
                                    type: integer
                                    nullable: true
                                  location_id:
                                    type: integer
                          required:
                          - id
                          - name
                          - location_id
                      required:
                      - room
                required:
                - total_pages
                - results
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/rooms/{id}":
    get:
      summary: show room
      tags:
      - Rooms
      description: Returns details for a specific room including its hierarchical
        relationships
      operationId: getRoom
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: Room ID
        schema:
          type: integer
      responses:
        '200':
          description: Room found
          content:
            application/json:
              schema:
                type: object
                properties:
                  room:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Room identifier
                      name:
                        type: string
                        description: Room name
                      capacity:
                        type: integer
                        description: Guest capacity
                        nullable: true
                      description:
                        type: string
                        description: Room description
                        nullable: true
                      customer_id:
                        type: integer
                        description: Customer identifier
                        nullable: true
                      site_id:
                        type: integer
                        description: Site identifier
                      location_id:
                        type: integer
                        description: Location identifier
                      is_unassigned:
                        type: boolean
                        description: Whether this is an Unassigned room
                      room_type:
                        type: string
                        description: Room type (Normal, Unassigned)
                      rate_type:
                        type: string
                        description: Rental rate type (Hourly, Flat Rate)
                        nullable: true
                      calendar_color:
                        type: string
                        description: Hex color for calendar display
                      position:
                        type: integer
                        description: Display order within location
                        nullable: true
                      listed:
                        type: boolean
                        description: Whether room is publicly listed
                      allow_onpremise:
                        type: boolean
                        description: Supports on-premise events
                      allow_largeparty:
                        type: boolean
                        description: Supports large party events
                      created_at:
                        type: string
                        format: date-time
                        description: Room creation timestamp
                      updated_at:
                        type: string
                        format: date-time
                        description: Room last update timestamp
                      parent_rooms:
                        type: array
                        description: Array of parent rooms
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                            location_id:
                              type: integer
                      child_rooms:
                        type: array
                        description: Array of child rooms
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            name:
                              type: string
                            capacity:
                              type: integer
                              nullable: true
                            location_id:
                              type: integer
                    required:
                    - id
                    - name
                    - location_id
                required:
                - room
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
        '404':
          description: Room not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
  "/v1/sites":
    get:
      summary: list sites
      tags:
      - Sites
      description: Returns a list of sites for the authenticated customer. Sites are
        top-level containers that hold locations, events, and other business data.
      operationId: getSites
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Sites found
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  additionalProperties: true
                  properties:
                    site:
                      type: object
                      additionalProperties: true
        '401':
          description: Unauthorized
  "/v1/accounts/{account_id}/tasks":
    parameters:
    - name: account_id
      in: path
      required: true
      schema:
        type: integer
    post:
      summary: Create a task for an account
      parameters: []
      tags:
      - Accounts
      security:
      - OAuthToken: []
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/TaskResponse"
        '404':
          description: Account not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Task"
  "/v1/bookings/{booking_id}/tasks":
    parameters:
    - name: booking_id
      in: path
      required: true
      schema:
        type: integer
    post:
      summary: Create a task for a booking
      parameters: []
      tags:
      - Bookings
      security:
      - OAuthToken: []
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/TaskResponse"
        '404':
          description: Booking not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Task"
  "/v1/contacts/{contact_id}/tasks":
    parameters:
    - name: contact_id
      in: path
      required: true
      schema:
        type: integer
    post:
      summary: Create a task for a contact
      parameters: []
      tags:
      - Contacts
      security:
      - OAuthToken: []
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/TaskResponse"
        '404':
          description: Contact not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Task"
  "/v1/events/{event_id}/tasks":
    parameters:
    - name: event_id
      in: path
      required: true
      schema:
        type: integer
    post:
      summary: Create a task for an event
      parameters: []
      tags:
      - Events
      security:
      - OAuthToken: []
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/TaskResponse"
        '404':
          description: Event not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Task"
  "/v1/leads/{lead_id}/tasks":
    parameters:
    - name: lead_id
      in: path
      required: true
      schema:
        type: integer
    post:
      summary: Create a task for a lead
      parameters: []
      tags:
      - Leads
      security:
      - OAuthToken: []
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/TaskResponse"
        '404':
          description: Lead not found
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/Task"
  "/v1/users":
    get:
      summary: list users
      tags:
      - Users
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Results are limited to 50 per page
        schema:
          type: integer
      - name: customer_id
        in: query
        required: false
        schema:
          type: integer
      responses:
        '200':
          description: Users found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/User"
        '401':
          description: Unauthorized
  "/v1/users/search":
    get:
      summary: search users
      tags:
      - Users
      security:
      - OAuthToken: []
      parameters:
      - name: page
        in: query
        required: false
        default: 1
        description: Page number for pagination
        schema:
          type: integer
      - name: query
        in: query
        required: false
        description: Search query for user name
        schema:
          type: string
      responses:
        '200':
          description: Users found
          content:
            application/json:
              schema:
                type: object
                properties:
                  total_pages:
                    type: integer
                  results:
                    type: array
                    items:
                      "$ref": "#/components/schemas/User"
        '401':
          description: Unauthorized
  "/v1/users/{id}":
    get:
      summary: show user
      tags:
      - Users
      security:
      - OAuthToken: []
      parameters:
      - name: id
        in: path
        required: true
        description: User ID
        schema:
          type: integer
      responses:
        '200':
          description: User found
          content:
            application/json:
              schema:
                type: object
                properties:
                  user:
                    "$ref": "#/components/schemas/User"
        '404':
          description: User not found
        '401':
          description: Unauthorized
  "/v1/users/bulk_suspend":
    post:
      summary: bulk suspend users
      tags:
      - Users
      security:
      - OAuthToken: []
      parameters:
      - name: emails
        in: query
        items:
          type: string
        required: false
        description: Array of email addresses to suspend
        schema:
          type: array
      - name: logins
        in: query
        items:
          type: string
        required: false
        description: Array of login names to suspend
        schema:
          type: array
      - name: user_ids
        in: query
        items:
          type: integer
        required: false
        description: Array of user IDs to suspend
        schema:
          type: array
      responses:
        '200':
          description: Users suspended
          content:
            application/json:
              schema:
                type: object
                properties:
                  suspended_users:
                    type: array
                    items:
                      "$ref": "#/components/schemas/User"
                additionalProperties: true
        '401':
          description: Unauthorized
  "/v1/users/user_audit_report.csv":
    get:
      summary: generate user audit report
      tags:
      - Users
      security:
      - OAuthToken: []
      responses:
        '200':
          description: CSV report generated
          content:
            text/csv:
              schema:
                type: string
                format: binary
                description: CSV file containing user audit report
        '401':
          description: Unauthorized
  "/v1/sites/{site_id}/webhook_endpoints":
    parameters:
    - name: site_id
      in: path
      required: true
      description: Site ID
      schema:
        type: integer
    get:
      summary: list webhook endpoints
      tags:
      - Webhooks
      description: Returns all active webhook endpoints for the specified site
      operationId: getWebhookEndpoints
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Webhook endpoints found
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                      description: Webhook endpoint identifier
                    site_id:
                      type: integer
                      description: Site identifier
                    target_url:
                      type: string
                      description: URL that receives webhook HTTP POST requests
                    failed_count:
                      type: integer
                      description: Number of consecutive delivery failures
                    disabled_at:
                      type: string
                      nullable: true
                      description: Timestamp when the endpoint was disabled (null
                        if active)
                    created_at:
                      type: string
                      description: Creation timestamp
                    updated_at:
                      type: string
                      description: Last update timestamp
                    deleted_at:
                      type: string
                      nullable: true
                      description: Deletion timestamp
                    include_event_financials:
                      type: boolean
                      description: Whether to include payment and line item info in
                        event webhook payloads
                    signing_key:
                      type: string
                      description: HMAC signing key for verifying webhook request
                        authenticity
                    trigger_actions:
                      type: object
                      description: Map of trigger action names to boolean enabled/disabled
                        values
                      additionalProperties:
                        type: boolean
                  required:
                  - id
                  - site_id
                  - target_url
                  - signing_key
                  - trigger_actions
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
    post:
      summary: create webhook endpoint
      tags:
      - Webhooks
      description: Creates a new webhook endpoint for the specified site. You must
        provide a target URL and at least one trigger action.
      operationId: createWebhookEndpoint
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Webhook endpoint created
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                webhook_endpoint:
                  type: object
                  properties:
                    target_url:
                      type: string
                      description: URL that will receive webhook HTTP POST requests
                    include_event_financials:
                      type: boolean
                      description: Include payment and line item info in event webhook
                        payloads
                    trigger_actions:
                      type: object
                      description: Map of trigger action names to boolean values.
                        At least one must be true.
                      additionalProperties:
                        type: boolean
                  required:
                  - target_url
                  - trigger_actions
              required:
              - webhook_endpoint
        required: true
  "/v1/sites/{site_id}/webhook_endpoints/{id}":
    parameters:
    - name: site_id
      in: path
      required: true
      description: Site ID
      schema:
        type: integer
    - name: id
      in: path
      required: true
      description: Webhook endpoint ID
      schema:
        type: integer
    get:
      summary: show webhook endpoint
      tags:
      - Webhooks
      description: Returns details for a specific webhook endpoint
      operationId: getWebhookEndpoint
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Webhook endpoint found
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
        '404':
          description: Webhook endpoint not found
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/NotFoundError"
    put:
      summary: update webhook endpoint
      tags:
      - Webhooks
      description: Updates an existing webhook endpoint. Updating an endpoint resets
        its failed_count and re-enables it if it was disabled.
      operationId: updateWebhookEndpoint
      security:
      - OAuthToken: []
      parameters: []
      responses:
        '200':
          description: Webhook endpoint updated
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                webhook_endpoint:
                  type: object
                  properties:
                    target_url:
                      type: string
                      description: New target URL
                    include_event_financials:
                      type: boolean
                      description: Include payment and line item info
                    trigger_actions:
                      type: object
                      description: Map of trigger action names to boolean values
                      additionalProperties:
                        type: boolean
              required:
              - webhook_endpoint
        required: true
    delete:
      summary: delete webhook endpoint
      tags:
      - Webhooks
      description: Permanently deletes a webhook endpoint. This cannot be undone.
      operationId: deleteWebhookEndpoint
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Webhook endpoint deleted
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/sites/{site_id}/webhook_endpoints/{id}/enable":
    parameters:
    - name: site_id
      in: path
      required: true
      description: Site ID
      schema:
        type: integer
    - name: id
      in: path
      required: true
      description: Webhook endpoint ID
      schema:
        type: integer
    post:
      summary: enable webhook endpoint
      tags:
      - Webhooks
      description: Re-enables a disabled webhook endpoint and resets its failure count
        to zero
      operationId: enableWebhookEndpoint
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Webhook endpoint enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/v1/sites/{site_id}/webhook_endpoints/{id}/disable":
    parameters:
    - name: site_id
      in: path
      required: true
      description: Site ID
      schema:
        type: integer
    - name: id
      in: path
      required: true
      description: Webhook endpoint ID
      schema:
        type: integer
    post:
      summary: disable webhook endpoint
      tags:
      - Webhooks
      description: Disables a webhook endpoint. Disabled endpoints will not receive
        any webhook deliveries.
      operationId: disableWebhookEndpoint
      security:
      - OAuthToken: []
      responses:
        '200':
          description: Webhook endpoint disabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_endpoint:
                    type: object
                    properties:
                      id:
                        type: integer
                        description: Webhook endpoint identifier
                      site_id:
                        type: integer
                        description: Site identifier
                      target_url:
                        type: string
                        description: URL that receives webhook HTTP POST requests
                      failed_count:
                        type: integer
                        description: Number of consecutive delivery failures
                      disabled_at:
                        type: string
                        nullable: true
                        description: Timestamp when the endpoint was disabled (null
                          if active)
                      created_at:
                        type: string
                        description: Creation timestamp
                      updated_at:
                        type: string
                        description: Last update timestamp
                      deleted_at:
                        type: string
                        nullable: true
                        description: Deletion timestamp
                      include_event_financials:
                        type: boolean
                        description: Whether to include payment and line item info
                          in event webhook payloads
                      signing_key:
                        type: string
                        description: HMAC signing key for verifying webhook request
                          authenticity
                      trigger_actions:
                        type: object
                        description: Map of trigger action names to boolean enabled/disabled
                          values
                        additionalProperties:
                          type: boolean
                    required:
                    - id
                    - site_id
                    - target_url
                    - signing_key
                    - trigger_actions
                required:
                - webhook_endpoint
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                "$ref": "#/components/responses/UnauthorizedError"
  "/oauth2/token":
    post:
      summary: Request an OAuth2 access token
      tags:
      - Authentication
      description: |
        Exchange credentials for an OAuth2 access token. Two grant types are supported:

        **authorization_code** — Standard OAuth2 authorization code flow. Direct the user to
        `/oauth2/authorize` to grant access, then exchange the resulting short-lived code for
        an access token. Requires `code` and `redirect_uri`.

        **oauth1_exchange** — Migrate existing OAuth1 credentials to OAuth2. Exchange an OAuth1
        consumer key and secret for an OAuth2 access token and refresh token. The issued token
        inherits the OAuth2 application's configured scopes and is owned by the customer's
        site creator.
      security: []
      parameters: []
      responses:
        '200':
          description: access token issued
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: OAuth2 bearer access token
                  token_type:
                    type: string
                    example: Bearer
                  expires_in:
                    type: integer
                    description: Token lifetime in seconds
                  refresh_token:
                    type: string
                    description: Refresh token (issued for oauth1_exchange grant)
                  scope:
                    type: string
                    description: Space-separated list of granted scopes
                  created_at:
                    type: integer
                    description: Token creation time as a Unix timestamp
                required:
                - access_token
                - token_type
                - expires_in
                - created_at
        '400':
          description: invalid request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: invalid_request
                    description: Error code — e.g. `invalid_request`, `invalid_scope`
                  error_description:
                    description: Human-readable error description (string or object
                      depending on error type)
                required:
                - error
        '401':
          description: invalid client credentials
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: invalid_client
                    description: Error code — e.g. `invalid_client`, `unauthorized_client`
                  error_description:
                    type: string
                required:
                - error
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  enum:
                  - authorization_code
                  - oauth1_exchange
                  description: The OAuth2 grant type
                client_id:
                  type: string
                  description: The application's client ID
                client_secret:
                  type: string
                  description: The application's client secret
                code:
                  type: string
                  description: Authorization code — required for `authorization_code`
                    grant
                redirect_uri:
                  type: string
                  description: Redirect URI used during authorization — required for
                    `authorization_code` grant
                scope:
                  type: string
                  description: Space-separated list of scopes to request
                consumer_key:
                  type: string
                  description: OAuth1 consumer key — required for `oauth1_exchange`
                    grant
                consumer_secret:
                  type: string
                  description: OAuth1 consumer secret — required for `oauth1_exchange`
                    grant
              required:
              - grant_type
              - client_id
              - client_secret
        required: true
tags:
- name: Accounts
  description: |
    Accounts represent companies or organizations in Tripleseat. Each account can have multiple contacts, events, and bookings associated with it.

    **Tip:** Use the search endpoint's date filters (`account_created_start_date`, `account_updated_start_date`, etc.) to sync only recently changed accounts rather than paginating through everything.
- name: Bookings
  description: |
    Bookings represent individual scheduled functions within an event. An event can have multiple bookings — for example, a wedding might have a "Ceremony", "Cocktail Hour", and "Reception" booking, each with its own time, room, and guest count.

    **Tip:** Bookings can be managed directly via these endpoints, or created as nested attributes through the Events endpoints when you need to set up an entire event with bookings in a single request.
- name: Contacts
  description: |
    Contacts are people associated with accounts and events. A contact can be linked to one or more accounts and may serve as the primary contact for events.

    **Tip:** When creating a contact, pass `account_id` to link them to an existing account. Contacts can also be searched by date range to sync recent changes.
- name: Events
  description: |
    Events are the core entity in Tripleseat — representing a customer's event (wedding, corporate meeting, fundraiser, etc.) containing one or more bookings, each with its own date, room, and financial details.

    ### Nested bookings

    Create a booking alongside an event by passing a `booking` object in the request body with at minimum a `name`, `start_date`, `start_time`, `end_time`, and `room_id`. Bookings can also be managed directly via the Bookings endpoints.

    ### Financial data

    Financial details (pricing, tax, service charges, payments, balances) are excluded by default to keep responses small. Pass `show_financial=true` to include them.

    ### Soft-deleted events

    Cancelled or removed events are hidden by default. Pass `include_deleted=true` if you need them for audit trails or sync operations.
- name: Lead Forms
  description: |
    Lead Forms are embeddable forms that capture event inquiries from your website. Tripleseat supports two types: **legacy** forms and **dynamic** forms with configurable fields.

    Use these read-only endpoints to list available forms and retrieve their field configurations for custom integrations.
- name: Leads
  description: |
    Leads represent incoming event inquiries — submitted via lead forms, email, or manual entry. A lead can be converted into a full event once qualified.

    **Public API key support:** The create endpoint (`POST /v1/leads/create`) accepts a `public_key` query parameter instead of OAuth, making it suitable for website lead form submissions where OAuth is not practical.
- name: Locations
  description: 'Locations represent physical venues or properties within a Tripleseat
    customer account. Each location has its own rooms, menus, and settings. Most list
    endpoints accept a `location_id` filter to scope results to a specific venue.

    '
- name: Menus
  description: 'Menus define food and beverage packages available at each location.
    Each menu contains items with pricing and categories. Use the menu item selections
    endpoints under Events to assign menus to specific bookings.

    '
- name: Notes
  description: 'Notes are internal comments attached to accounts, contacts, bookings,
    events, or leads. Each resource type has its own set of note endpoints nested
    under the parent (e.g., `/v1/events/{event_id}/notes`).

    '
- name: Payment Reports
  description: |
    Financial reporting endpoints for transaction and refund data. Available in both JSON and CSV formats. Use date-range filters for reconciliation and accounting sync.

    **Note:** These endpoints cover payment processor transactions. For event-level financial data (pricing, tax, balances), use the Events endpoints with `show_financial=true`.
- name: Rooms
  description: 'Rooms are bookable spaces within a location (e.g., "Grand Ballroom",
    "Patio", "Private Dining Room"). Each room has a capacity setting and can be assigned
    to bookings.

    '
- name: Sites
  description: 'Sites represent individual venue accounts within a Tripleseat customer.
    A customer may have multiple sites, each operating as an independent venue with
    its own locations, users, and settings.

    '
- name: Users
  description: 'Users are team members who manage events, leads, and bookings within
    Tripleseat. The bulk suspend endpoint allows deactivating multiple users at once.
    The audit report (CSV) provides a full history of user activity.

    '
- name: Webhooks
  description: |
    Webhook endpoints let you receive real-time HTTP POST notifications at a URL you specify whenever events occur in Tripleseat.

    Webhooks can also be manually configured on the [Webhooks tab](#webhooks) of your API Settings page.

    ## How Webhooks Work

    1. **Register an endpoint** — provide a target URL and select one or more trigger actions.
    2. **Receive notifications** — when a matching action occurs (e.g., an event is created, a booking is updated, or a payment is recorded), Tripleseat sends an HTTP POST request to your URL with a JSON payload describing the change.
    3. **Verify authenticity** — each endpoint is assigned a unique **signing key**. Tripleseat includes an HMAC signature in the request headers so you can verify that the payload originated from Tripleseat and was not tampered with.

    ## Trigger Categories

    You can subscribe to triggers across the following categories:

    - **Event Actions** — create, update, delete events; reassign location, areas, ownership, contact, or account; status changes; guest count and date/time changes; document creation/updates; direct booking accept/reject/create/terms accepted; AI lead agent booking create/accept/reject.
    - **Lead Actions** — create lead, create internal lead, convert lead, lead turned down.
    - **Room Actions** — create, update, delete rooms.
    - **Booking Actions** — create, update, delete bookings; date changes; lead-to-booking conversion; document and note creation; task creation; account/contact/location/ownership reassignment; status changes; document updates/deletion.
    - **Account Actions** — update account.
    - **Contact Actions** — create, update, delete contacts.
    - **Guest Room Block Actions** — create, update, delete guest room blocks.
    - **Document Actions** — shared document, document signed.
    - **Payment Actions** — payment shared, payment paid.

    ## Endpoint Lifecycle

    - Endpoints can be **enabled** or **disabled**. Disabled endpoints do not receive deliveries.
    - If deliveries to an endpoint fail repeatedly, the `failed_count` increments. After too many failures the endpoint may be automatically disabled.
    - **Enabling** an endpoint resets the failure count to zero.
    - You can optionally include **event financial data** (payment and line item information) in event-related webhook payloads by setting `include_event_financials` to `true`.
- name: Guest Room Blocks
  description: |
    Manage guest room blocks and their nightly allocations for events. Guest room blocks track agreed, forecast, blocked, and picked-up room counts across multiple room types and dates.

    Each block can contain **guest room allocations** — nightly breakdowns by room type with single, double, triple, and quad occupancy counts and rates.
- name: Documents
  description: 'Update billing line-item amounts on event and booking documents. Use
    the billing amount endpoint to set fixed-dollar or percentage values for specific
    billing items on a document.

    '
- name: Menu Updates
  description: 'Import menu data from external systems via asynchronous tasks. Submit
    a menu payload for a location and poll for completion status using the returned
    request ID.

    '
- name: PMS
  description: |
    Property Management System integration endpoints for managing hotel inventory, room rates, and room type configuration.

    - **Inventory** — push daily room availability (total rooms, transient protected/sold, out of order/inventory).
    - **Rates** — push BAR (Best Available Rate) or MAR (Minimum Acceptable Rate) by room type and date.
    - **Room Types** — list configured guest room types for a location.
servers:
- description: Local Dev Server
  url: "{defaultHost}"
  variables:
    defaultHost:
      default: http://api.dev.tripleseat.com:3000
- description: NGROK
  url: https://{ngrokHost}.ngrok.io
  variables:
    ngrokHost:
      default: tripleseat
      enum:
      - tripleseat
      - tripleseat2
- description: Staging Server
  url: https://staging9.tripleseat.net
security: []
components:
  parameters:
    paginationCount:
      name: count
      in: query
      required: false
      schema:
        type: integer
        format: integer
        minimum: 1
        maximum: 200
        default: 50
    paginationOffset:
      name: offset
      in: query
      required: false
      schema:
        type: integer
        format: integer
        minimum: 0
        maximum: 1000000000000
        default: 0
        example: 10
  schemas:
    Account:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        name:
          type: string
        description:
          type: string
          nullable: true
        owned_by:
          type: integer
        created_at:
          type: string
        updated_at:
          type: string
        deleted_at:
          type: string
          nullable: true
        customer_id:
          type: integer
        site_id:
          type: integer
        market_segment:
          type: string
          nullable: true
        websites:
          type: array
          items:
            "$ref": "#/components/schemas/Website"
        phone_numbers:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumber"
        addresses:
          type: array
          items:
            "$ref": "#/components/schemas/Address"
        custom_fields:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValue"
    AccountCreateRequest:
      type: object
      required:
      - name
      additionalProperties: false
      properties:
        name:
          type: string
          description: The name of the account. Must be unique within a site.
        description:
          type: string
          nullable: true
          description: Description of the account
        owned_by:
          type: integer
          nullable: true
          description: The id of the user that owns this account.
        phone_numbers_attributes:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumberAttributes"
          description: A list of phone numbers to associate with this account.
        addresses_attributes:
          type: array
          items:
            "$ref": "#/components/schemas/AddressAttributes"
          description: A list of addresses to associate with this account.
        websites_attributes:
          type: array
          items:
            "$ref": "#/components/schemas/WebsiteAttributes"
          description: A list of websites to associate with this account.
    AccountUpdateRequest:
      allOf:
      - "$ref": "#/components/schemas/AccountCreateRequest"
      - type: object
        properties:
          phone_numbers_attributes:
            type: array
            items:
              "$ref": "#/components/schemas/PhoneNumberUpdateAttributes"
            description: A list of phone numbers to associate with this account.
          addresses_attributes:
            type: array
            items:
              "$ref": "#/components/schemas/AddressUpdateAttributes"
            description: A list of addresses to associate with this account.
          websites_attributes:
            type: array
            items:
              "$ref": "#/components/schemas/WebsiteUpdateAttributes"
            description: A list of websites to associate with this account.
    Address:
      type: object
      properties:
        id:
          type: integer
        address1:
          type: string
          nullable: true
          description: The first line of the address
        address2:
          type: string
          nullable: true
          description: The second line of the address
        city:
          type: string
          nullable: true
          description: The city or municipality
        state:
          type: string
          nullable: true
          description: For US and Canada, the state or province
        country:
          type: string
          nullable: true
          description: The country
        zip_code:
          type: string
          nullable: true
          description: The postal code
        address_type:
          type: string
          nullable: true
          enum:
          - Main
          - Work
          - Home
          - Other
          - Delivery
          - Offsite
          description: The type of address
    AddressAttributes:
      type: object
      properties:
        address1:
          type: string
          description: The first line of the address
          maxLength: 100
        address2:
          type: string
          description: The second line of the address
          maxLength: 100
        city:
          type: string
          description: The city or municipality
          maxLength: 50
        state:
          type: string
          description: For US and Canada, the state or province
          maxLength: 50
        zip_code:
          type: string
          description: The postal code
          maxLength: 20
        country:
          type: string
          description: The country
          maxLength: 50
        address_type:
          type: string
          enum:
          - Main
          - Work
          - Home
          - Other
          - Delivery
          - Offsite
          description: The type of address
    AddressUpdateAttributes:
      allOf:
      - "$ref": "#/components/schemas/AssociationTrackingAttrs"
      - "$ref": "#/components/schemas/AddressAttributes"
    AssociationTrackingAttrs:
      type: object
      description: Attributes for tracking associations when updating nested records
      properties:
        id:
          type: integer
          description: When updating an existing record via an association on another
            object, the id must be supplied to update the existing record. If the
            id is not supplied, a new record will be added to the association.
        _destroy:
          type: boolean
          description: When updating an existing record via an association on another
            object, setting _destroy to true will delete the associated record.
    BasePaymentsProvider:
      type: object
      required:
      - id
      - type
      - client
      - status
      - name
      - payments_provider_id
      properties:
        id:
          "$ref": "#/components/schemas/ResourceIdentifier"
        type:
          "$ref": "#/components/schemas/ProviderSlug"
        client:
          type: string
          enum:
          - tripleseat
        status:
          type: string
        name:
          type: string
        payments_provider_id:
          "$ref": "#/components/schemas/PaymentsTSID"
          nullable: true
    Booking:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        status:
          type: string
          enum:
          - PROSPECT
          - TENTATIVE
          - DEFINITE
          - CLOSED
          - LOST
          nullable: true
        location_id:
          type: integer
        start_date:
          type: string
          format: date
        end_date:
          type: string
          format: date
        account_id:
          type: integer
        contact_id:
          type: integer
        created_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        updated_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        deleted_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        customer_id:
          type: integer
        site_id:
          type: integer
        location:
          "$ref": "#/components/schemas/Location"
        account:
          "$ref": "#/components/schemas/Account"
        contact:
          "$ref": "#/components/schemas/Contact"
        events:
          type: array
          items:
            "$ref": "#/components/schemas/Event"
        custom_field_values:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValue"
        secondary_contacts:
          type: array
          items:
            "$ref": "#/components/schemas/Contact"
        market_segment:
          "$ref": "#/components/schemas/MarketSegment"
          nullable: true
        payment_sets:
          type: array
          items:
            "$ref": "#/components/schemas/PaymentSet"
        booking_status_changes:
          type: array
          items:
            "$ref": "#/components/schemas/StatusChange"
        selected_lead_sources:
          type: array
          items:
            "$ref": "#/components/schemas/SelectedLeadSource"
        documents:
          type: array
          items:
            "$ref": "#/components/schemas/Document"
        guest_room_blocks:
          type: array
          items:
            "$ref": "#/components/schemas/GuestRoomBlock"
        lead:
          "$ref": "#/components/schemas/Lead"
          nullable: true
        creator:
          "$ref": "#/components/schemas/User"
          nullable: true
        owner:
          "$ref": "#/components/schemas/User"
          nullable: true
        updator:
          "$ref": "#/components/schemas/User"
          nullable: true
    BookingCreateRequest:
      type: object
      required:
      - name
      - status
      - location_id
      - start_date
      - end_date
      - account_id
      - contact_id
      additionalProperties: false
      properties:
        name:
          type: string
          description: The name of the booking
        status:
          type: string
          enum:
          - PROSPECT
          - TENTATIVE
          - DEFINITE
          - CLOSED
          - LOST
          description: The status of the booking
        location_id:
          type: integer
          description: The id of the location to associate with this booking
        start_date:
          type: string
          format: date
          description: The date the booking starts
        end_date:
          type: string
          format: date
          description: The date the booking ends
        account_id:
          type: integer
          description: The id of the account to associate with this booking
        contact_id:
          type: integer
          description: The id of the contact to associate with this booking
        custom_field_values:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValueAttributes"
          description: A list of custom field values to associate with this booking.
        selected_lead_sources_attributes:
          type: array
          items:
            type: object
            properties:
              lead_source_id:
                type: integer
                description: The id of the lead source
              lead_source_other:
                type: string
                description: Other lead source description
          description: A list of lead sources to associate with this booking
    BookingUpdateRequest:
      type: object
      required:
      - name
      - status
      - location_id
      - start_date
      - end_date
      - account_id
      - contact_id
      additionalProperties: false
      properties:
        name:
          type: string
          description: The name of the booking
        status:
          type: string
          enum:
          - PROSPECT
          - TENTATIVE
          - DEFINITE
          - CLOSED
          - LOST
          description: The status of the booking
        location_id:
          type: integer
          description: The id of the location to associate with this booking
        start_date:
          type: string
          format: date
          description: The date the booking starts
        end_date:
          type: string
          format: date
          description: The date the booking ends
        account_id:
          type: integer
          description: The id of the account to associate with this booking
        contact_id:
          type: integer
          description: The id of the contact to associate with this booking
        custom_field_values:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValueUpdateAttributes"
          description: A list of custom field values to associate with this booking.
        selected_lead_sources_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              lead_source_id:
                type: integer
                description: The id of the lead source
              lead_source_other:
                type: string
                description: Other lead source description
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: A list of lead sources to associate with this booking
    ClientData:
      type: object
      description: JSON object containing client-provided metadata
    Contact:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        first_name:
          type: string
        last_name:
          type: string
        title:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        account_id:
          type: integer
          nullable: true
        owned_by:
          type: integer
          nullable: true
        email_opt_in:
          type: boolean
          nullable: true
        twitter_account:
          type: string
          nullable: true
        facebook_account:
          type: string
          nullable: true
        instagram_account:
          type: string
          nullable: true
        linkedin_account:
          type: string
          nullable: true
        created_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        updated_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        deleted_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        customer_id:
          type: integer
          nullable: true
        contact_type:
          type: string
          nullable: true
        site_id:
          type: integer
          nullable: true
        email_addresses:
          type: array
          items:
            "$ref": "#/components/schemas/EmailAddress"
        phone_numbers:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumber"
        addresses:
          type: array
          items:
            "$ref": "#/components/schemas/Address"
        websites:
          type: array
          items:
            "$ref": "#/components/schemas/Website"
        custom_fields:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValue"
    ContactCreateRequest:
      type: object
      required:
      - first_name
      - last_name
      - account_id
      additionalProperties: false
      properties:
        first_name:
          type: string
          description: The given name of the contact
          maxLength: 50
        last_name:
          type: string
          description: The family name of the contact
          maxLength: 50
        title:
          type: string
          description: The title of the contact
          maxLength: 100
        account_id:
          type: integer
          description: The id of the account to associate with this contact. Required
            when creating a new contact.
        description:
          type: string
          description: Description of the contact
          maxLength: 1000
        owned_by:
          type: integer
          description: The id of the user that owns this contact
        email_opt_in:
          type: boolean
          description: Whether the contact has opted in to receive email communications
        email_addresses_attributes:
          type: array
          items:
            type: object
            required:
            - address
            properties:
              address:
                type: string
                format: email
                description: The email address
                maxLength: 255
          description: A list of email addresses to associate with this contact
        phone_numbers_attributes:
          type: array
          items:
            type: object
            properties:
              number:
                type: string
                description: The phone number without extension
                maxLength: 50
              extension:
                type: string
                description: The phone number extension
                maxLength: 10
              phone_number_type:
                type: string
                enum:
                - Main
                - Work
                - Home
                - Mobile
                - Fax
                - Pager
                - Skype
                description: The type of phone number
          description: A list of phone numbers to associate with this contact
        addresses_attributes:
          type: array
          items:
            type: object
            properties:
              address1:
                type: string
                description: The first line of the address
                maxLength: 100
              address2:
                type: string
                description: The second line of the address
                maxLength: 100
              city:
                type: string
                description: The city or municipality
                maxLength: 50
              state:
                type: string
                description: For US and Canada, the state or province
                maxLength: 50
              zip_code:
                type: string
                description: The postal code
                maxLength: 20
              country:
                type: string
                description: The country
                maxLength: 50
              address_type:
                type: string
                enum:
                - Main
                - Work
                - Home
                - Other
                - Delivery
                - Offsite
                description: The type of address
          description: A list of addresses to associate with this contact
        websites_attributes:
          type: array
          items:
            type: object
            properties:
              url:
                type: string
                format: uri
                description: The URL of the website
                maxLength: 255
          description: A list of websites to associate with this contact
    ContactUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        first_name:
          type: string
          description: The given name of the contact
          maxLength: 50
        last_name:
          type: string
          description: The family name of the contact
          maxLength: 50
        title:
          type: string
          description: The title of the contact
          maxLength: 100
        account_id:
          type: integer
          description: The id of the account to associate with this contact
        description:
          type: string
          description: Description of the contact
          maxLength: 1000
        owned_by:
          type: integer
          description: The id of the user that owns this contact
        email_opt_in:
          type: boolean
          description: Whether the contact has opted in to receive email communications
        email_addresses_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              address:
                type: string
                format: email
                description: The email address
                maxLength: 255
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: A list of email addresses to associate with this contact
        phone_numbers_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              number:
                type: string
                description: The phone number without extension
                maxLength: 50
              extension:
                type: string
                description: The phone number extension
                maxLength: 10
              phone_number_type:
                type: string
                enum:
                - Main
                - Work
                - Home
                - Mobile
                - Fax
                - Pager
                - Skype
                description: The type of phone number
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: A list of phone numbers to associate with this contact
        addresses_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              address1:
                type: string
                description: The first line of the address
                maxLength: 100
              address2:
                type: string
                description: The second line of the address
                maxLength: 100
              city:
                type: string
                description: The city or municipality
                maxLength: 50
              state:
                type: string
                description: For US and Canada, the state or province
                maxLength: 50
              zip_code:
                type: string
                description: The postal code
                maxLength: 20
              country:
                type: string
                description: The country
                maxLength: 50
              address_type:
                type: string
                enum:
                - Main
                - Work
                - Home
                - Other
                - Delivery
                - Offsite
                description: The type of address
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: A list of addresses to associate with this contact
        websites_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              url:
                type: string
                format: uri
                description: The URL of the website
                maxLength: 255
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: A list of websites to associate with this contact
    CustomFieldValue:
      type: object
      properties:
        id:
          type: integer
        custom_field_id:
          type: integer
        value:
          type: string
        custom_field_name:
          type: string
        custom_field_required:
          type: boolean
        custom_field_slug:
          type: string
    CustomFieldValueAttributes:
      type: object
      required:
      - custom_field_id
      - value
      properties:
        custom_field_id:
          type: integer
          description: The id of the custom field to associate with this value
        value:
          type: string
          description: The value of the custom field
    CustomFieldValueUpdateAttributes:
      allOf:
      - "$ref": "#/components/schemas/AssociationTrackingAttrs"
      - "$ref": "#/components/schemas/CustomFieldValueAttributes"
    Document:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        document_type:
          type: string
    DocumentBillingResponse:
      type: object
      additionalProperties: true
      properties:
        id:
          type: integer
        title:
          type: string
          nullable: true
        template_document_id:
          type: integer
          nullable: true
        documentable_id:
          type: integer
        documentable_type:
          type: string
        billing_widget:
          type: object
          additionalProperties: true
        financials:
          type: object
          additionalProperties: true
        billing_totals:
          type: array
          items:
            type: object
            additionalProperties: true
        category_totals:
          type: array
          items:
            type: object
            additionalProperties: true
    EmailAddress:
      type: object
      properties:
        id:
          type: integer
        address:
          "$ref": "#/components/schemas/EmailAddressField"
    EmailAddressAttributes:
      type: object
      required:
      - address
      properties:
        address:
          type: string
          format: email
          description: The email address
          maxLength: 255
    EmailAddressField:
      type: string
      format: email
      maxLength: 255
      example: jdoe@tripleseat.com
      pattern: "^$|^[\\w\\-\\.]+@[\\w\\-\\.]+\\.[\\w\\-]{2,}$"
      description: RFC 5322 email address
    EmailAddressUpdateAttributes:
      allOf:
      - "$ref": "#/components/schemas/AssociationTrackingAttrs"
      - "$ref": "#/components/schemas/EmailAddressAttributes"
    ErrorList:
      type: object
      example:
        type:
        - is not included in the list
    ErrorMessage:
      type: object
      properties:
        error:
          type: string
          maxLength: 300
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Error message
        message:
          type: string
          description: Detailed error message
    Event:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        status:
          type: string
          enum:
          - PROSPECT
          - TENTATIVE
          - DEFINITE
          - CLOSED
          - LOST
        location_id:
          type: integer
        booking_id:
          type: integer
          nullable: true
        event_date:
          type: string
          format: MM/DD/YYYY
        event_date_iso8601:
          type: string
          format: date
        event_start:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        event_end:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        event_start_iso8601:
          type: string
          format: date-time
        event_end_iso8601:
          type: string
          format: date-time
        event_start_time:
          type: string
          format: hh:mm AM/PM
        event_end_time:
          type: string
          format: hh:mm AM/PM
        setup_time:
          type: integer
          format: int32
        teardown_time:
          type: integer
          format: int32
        event_start_time_with_setup_time:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        event_end_time_with_teardown_time:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        event_start_time_with_setup_time_iso8601:
          type: string
          format: date-time
        event_end_time_with_teardown_time_iso8601:
          type: string
          format: date-time
        event_timezone:
          type: string
        event_style:
          type: string
          enum:
          - onpremise
          - dropoff
          - pickup
          - catering
          - largeparty
          nullable: true
        account_id:
          type: integer
        contact_id:
          type: integer
        secondary_contact_ids:
          type: array
          items:
            type: integer
        room_ids:
          type: array
          items:
            type: integer
        owned_by:
          type: integer
        managing_user_ids:
          type: array
          items:
            type: integer
        event_type_id:
          type: integer
          nullable: true
        setup_type_id:
          type: integer
          nullable: true
        setup_type_name:
          type: string
          nullable: true
        guest_count:
          type: integer
          format: int32
          nullable: true
        guaranteed_guest_count:
          type: integer
          format: int32
          nullable: true
        food_and_beverage_min:
          type: string
          format: decimal
          nullable: true
        rental_fee:
          type: string
          format: decimal
          nullable: true
        deposit_amount:
          type: string
          format: decimal
          nullable: true
        grand_total:
          type: string
          format: decimal
          nullable: true
        actual_amount:
          type: string
          format: decimal
          nullable: true
        amount_due:
          type: string
          format: decimal
          nullable: true
        price_per_person:
          type: string
          format: decimal
          nullable: true
        description:
          type: string
          nullable: true
        created_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        updated_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        deleted_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        offsite_address:
          "$ref": "#/components/schemas/EventOffsiteAddress"
          nullable: true
    EventCreateRequest:
      type: object
      required:
      - name
      - status
      - location_id
      - event_start
      - event_end
      - account_id
      - contact_id
      additionalProperties: false
      properties:
        name:
          type: string
          description: The name of the event
        status:
          type: string
          enum:
          - PROSPECT
          - TENTATIVE
          - DEFINITE
          - CLOSED
          - LOST
          description: The status of the event
        location_id:
          type: integer
          description: The id of the location to associate with this event
        booking_id:
          type: integer
          description: If this event is being added to an existing booking this should
            be the id of the associated booking. If a booking id is not supplied a
            new booking will be created for this event.
        booking:
          type: object
          description: Attributes for the booking that will be created for this event.
            This should not be supplied if `booking_id` is non-null.
          properties:
            name:
              type: string
              description: The name of the booking
            location_id:
              type: integer
              description: The id of the location to associate with this booking
            start_date:
              type: string
              format: date
              description: The date the booking starts
            end_date:
              type: string
              format: date
              description: The date the booking ends
            account_id:
              type: integer
              description: The id of an existing account to associate with this booking
            contact_id:
              type: integer
              description: The id of an existing contact to associate with this booking
        event_start:
          type: string
          format: date-time
          description: The date and time the event starts
        event_end:
          type: string
          format: date-time
          description: The date and time the event ends
        setup_time:
          type: integer
          format: int32
          description: The number of minutes prior to the event start that the setup
            period begins
        teardown_time:
          type: integer
          format: int32
          description: The number of minutes after the event end that the teardown
            period ends
        account_id:
          type: integer
          description: The id of an existing account to associate with this event
        contact_id:
          type: integer
          description: The id of an existing contact to associate with this event
        secondary_contact_ids:
          type: array
          items:
            type: integer
          description: A list of additional contact ids to associate with this event
        room_ids:
          type: array
          items:
            type: integer
          description: A list of room ids to associate with this event
        owned_by:
          type: integer
          description: The id of the user that owns this event
        managing_user_ids:
          type: array
          items:
            type: integer
          description: A list of user ids that are managing this event
        event_type_id:
          type: integer
          description: The id of the event type to associate with this event
        guest_count:
          type: integer
          format: int32
          description: The number of guests expected to attend the event
        guaranteed_guest_count:
          type: integer
          format: int32
          description: The number of guests that are guaranteed to attend the event
        food_and_beverage_min:
          type: string
          format: decimal
          description: The minimum amount of food and beverage revenue expected for
            the event
        rental_fee:
          type: string
          format: decimal
          description: The expected rental fee for the event
        deposit_amount:
          type: string
          format: decimal
          description: The amount of the first deposit for this event
        grand_total:
          type: string
          format: decimal
          description: The event grand total inclusive of taxes, fees, and gratuity
        actual_amount:
          type: string
          format: decimal
          description: The event actual amount net of taxes, fees, and gratuity
        amount_due:
          type: string
          format: decimal
          description: The outstanding balance due for the event
        price_per_person:
          type: string
          format: decimal
          description: The price per person for the event
        description:
          type: string
          description: A description of the event
        custom_field_values:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValueAttributes"
          description: A list of custom field values to associate with this event.
    EventOffsiteAddress:
      description: Offsite address with optional venue details. When the event has
        an associated offsite venue, venue_name, delivery_instructions, and phone_number
        are included.
      allOf:
      - "$ref": "#/components/schemas/Address"
      - type: object
        properties:
          venue_name:
            type: string
            nullable: true
            description: Name of the offsite venue
          delivery_instructions:
            type: string
            nullable: true
            description: Delivery instructions for the offsite venue
          phone_number:
            type: string
            nullable: true
            description: Phone number of the offsite venue
    EventUpdateRequest:
      allOf:
      - "$ref": "#/components/schemas/EventCreateRequest"
      - type: object
        required:
        - name
        - status
        - location_id
        - event_start
        - event_end
        - account_id
        - contact_id
        - room_ids
        properties:
          booking_id:
            type: integer
            description: To reassign an event to a different booking, supply the id
              of the new booking.
          booking:
            type: object
            description: Update the attributes for the associated booking. This should
              not be supplied if `booking_id` is changed.
            properties:
              name:
                type: string
                description: The name of the booking
              location_id:
                type: integer
                description: The id of the location to associate with this booking
              start_date:
                type: string
                format: date
                description: The date the booking starts
              end_date:
                type: string
                format: date
                description: The date the booking ends
              account_id:
                type: integer
                description: The id of an existing account to associate with this
                  booking
              contact_id:
                type: integer
                description: The id of an existing contact to associate with this
                  booking
          custom_field_values:
            type: array
            items:
              "$ref": "#/components/schemas/CustomFieldValueUpdateAttributes"
            description: A list of custom field values to associate with this event.
    FiservPaymentProvider:
      description: Fiserv (AKA Bluepay) Payment Provider
      allOf:
      - "$ref": "#/components/schemas/BasePaymentsProvider"
      - type: object
        required:
        - remote_id
        - access_token
        properties:
          remote_id:
            type: string
            maxLength: 255
          access_token:
            type: string
            maxLength: 255
    ForecastEvent:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        event_type_id:
          type: integer
          nullable: true
        forecast_event_blueprint_id:
          type: integer
          nullable: true
        estimated_guest_count:
          type: integer
          nullable: true
        forecast_event_estimates:
          type: array
          items:
            "$ref": "#/components/schemas/ForecastEventEstimate"
    ForecastEventEstimate:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        forecast_event_id:
          type: integer
        category:
          type: string
          nullable: true
        estimated_value:
          type: number
          format: float
          nullable: true
        pricing_mode:
          type: string
          nullable: true
        amount:
          type: number
          format: float
          nullable: true
        total:
          type: number
          format: float
          nullable: true
        user_overridden_value:
          type: boolean
          nullable: true
        line_item_category_id:
          type: integer
    GuestRoomAllocation:
      type: object
      additionalProperties: false
      properties:
        guest_room_type_id:
          type: integer
        date:
          type: string
        agreed_rooms_single:
          type: integer
          nullable: true
        forecast_rooms_single:
          type: integer
          nullable: true
        rate_single:
          type: number
          format: float
          nullable: true
        created_at:
          type: string
        updated_at:
          type: string
        created_by:
          type: string
          nullable: true
        updated_by:
          type: string
          nullable: true
        grc_entry_id:
          type: integer
          nullable: true
        blocked_rooms_single:
          type: integer
          nullable: true
        pickup_single:
          type: integer
          nullable: true
        agreed_rooms_double:
          type: integer
          nullable: true
        forecast_rooms_double:
          type: integer
          nullable: true
        blocked_rooms_double:
          type: integer
          nullable: true
        rate_double:
          type: number
          format: float
          nullable: true
        pickup_double:
          type: integer
          nullable: true
        agreed_rooms_triple:
          type: integer
          nullable: true
        forecast_rooms_triple:
          type: integer
          nullable: true
        blocked_rooms_triple:
          type: integer
          nullable: true
        rate_triple:
          type: number
          format: float
          nullable: true
        pickup_triple:
          type: integer
          nullable: true
        agreed_rooms_quad:
          type: integer
          nullable: true
        forecast_rooms_quad:
          type: integer
          nullable: true
        blocked_rooms_quad:
          type: integer
          nullable: true
        rate_quad:
          type: number
          format: float
          nullable: true
        pickup_quad:
          type: integer
          nullable: true
        agreed_rooms:
          type: integer
          nullable: true
        forecast_rooms:
          type: integer
          nullable: true
        blocked_rooms:
          type: integer
          nullable: true
        pickup:
          type: integer
          nullable: true
        extended_rate_agreed:
          type: number
          format: float
          nullable: true
        extended_rate_forecast:
          type: number
          format: float
          nullable: true
        extended_rate_blocked:
          type: number
          format: float
          nullable: true
        extended_rate_pickup:
          type: number
          format: float
          nullable: true
    GuestRoomAllocationAttributes:
      type: object
      properties:
        guest_room_type_id:
          type: integer
          description: The guest room type ID
        date:
          type: string
          format: date
          description: The allocation date
        agreed_rooms_single:
          type: integer
          nullable: true
        forecast_rooms_single:
          type: integer
          nullable: true
        rate_single:
          type: number
          format: float
          nullable: true
        blocked_rooms_single:
          type: integer
          nullable: true
        pickup_single:
          type: integer
          nullable: true
        agreed_rooms_double:
          type: integer
          nullable: true
        forecast_rooms_double:
          type: integer
          nullable: true
        blocked_rooms_double:
          type: integer
          nullable: true
        rate_double:
          type: number
          format: float
          nullable: true
        pickup_double:
          type: integer
          nullable: true
        agreed_rooms_triple:
          type: integer
          nullable: true
        forecast_rooms_triple:
          type: integer
          nullable: true
        blocked_rooms_triple:
          type: integer
          nullable: true
        rate_triple:
          type: number
          format: float
          nullable: true
        pickup_triple:
          type: integer
          nullable: true
        agreed_rooms_quad:
          type: integer
          nullable: true
        forecast_rooms_quad:
          type: integer
          nullable: true
        blocked_rooms_quad:
          type: integer
          nullable: true
        rate_quad:
          type: number
          format: float
          nullable: true
        pickup_quad:
          type: integer
          nullable: true
    GuestRoomBlock:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        customer_id:
          type: integer
        site_id:
          type: integer
        location_id:
          type: integer
        booking_id:
          type: integer
          nullable: true
        account_id:
          type: integer
          nullable: true
        contact_id:
          type: integer
          nullable: true
        status:
          type: string
        name:
          type: string
          nullable: true
        lost_reason_details:
          type: string
          nullable: true
        lost_reason_id:
          type: integer
          nullable: true
        start_date:
          type: string
          nullable: true
        end_date:
          type: string
          nullable: true
        extended_start_date:
          type: string
          nullable: true
        extended_end_date:
          type: string
          nullable: true
        block_release_date:
          type: string
          nullable: true
        created_at:
          type: string
        updated_at:
          type: string
        deleted_at:
          type: string
          nullable: true
        created_by:
          type: integer
          nullable: true
        updated_by:
          type: integer
          nullable: true
        owned_by:
          type: integer
          nullable: true
        agreed_rooms:
          type: integer
          nullable: true
        extended_rate_agreed:
          type: string
          nullable: true
        blocked_rooms:
          type: integer
          nullable: true
        extended_rate_blocked:
          type: string
          nullable: true
        forecast_rooms:
          type: integer
          nullable: true
        extended_rate_forecast:
          type: string
          nullable: true
        pickup:
          type: integer
          nullable: true
        extended_rate_pickup:
          type: string
          nullable: true
        requested_rooms:
          type: integer
          nullable: true
        reservation_method:
          type: string
          nullable: true
        billing_definition:
          type: string
          nullable: true
        commission_type:
          type: string
          nullable: true
        commission_amount:
          type: number
          format: float
          nullable: true
        pms_booking_number:
          type: string
          nullable: true
        pms_group_code:
          type: string
          nullable: true
        pms_rate_code:
          type: string
          nullable: true
        pms_group_id:
          type: string
          nullable: true
        pms_error:
          type: string
          nullable: true
        disable_pms_send:
          type: boolean
        guest_room_allocations:
          type: array
          items:
            "$ref": "#/components/schemas/GuestRoomAllocation"
    GuestRoomBlockCreateRequest:
      type: object
      required:
      - location_id
      - booking_id
      additionalProperties: false
      properties:
        location_id:
          type: integer
          description: The location ID for this guest room block
        booking_id:
          type: integer
          description: The booking ID to associate with this guest room block
        status:
          type: string
          description: The status of the guest room block
        name:
          type: string
          description: Name of the guest room block
        start_date:
          type: string
          format: date
          description: Block start date
        end_date:
          type: string
          format: date
          description: Block end date
        extended_start_date:
          type: string
          format: date
          nullable: true
          description: Extended start date for pre-block arrivals
        extended_end_date:
          type: string
          format: date
          nullable: true
          description: Extended end date for post-block departures
        block_release_date:
          type: string
          format: date
          nullable: true
          description: Date when unbooked rooms are released
        lost_reason_details:
          type: string
          nullable: true
        lost_reason_id:
          type: integer
          nullable: true
        pms_booking_number:
          type: string
          nullable: true
        pms_group_code:
          type: string
          nullable: true
        pms_rate_code:
          type: string
          nullable: true
        pms_group_id:
          type: string
          nullable: true
        pms_error:
          type: string
          nullable: true
        pms_status:
          type: string
          nullable: true
        pms_posting_account_id:
          type: string
          nullable: true
        disable_pms_send:
          type: boolean
        reservation_method:
          type: string
          nullable: true
        billing_definition:
          type: string
          nullable: true
        commission_type:
          type: string
          nullable: true
        commission_amount:
          type: number
          format: float
          nullable: true
        guest_room_allocations:
          type: array
          items:
            "$ref": "#/components/schemas/GuestRoomAllocationAttributes"
          description: Nightly room allocations by room type
    GuestRoomBlockUpdateRequest:
      type: object
      description: All fields are optional for updates
      additionalProperties: false
      properties:
        location_id:
          type: integer
          description: The location ID for this guest room block
        booking_id:
          type: integer
          description: The booking ID to associate with this guest room block
        status:
          type: string
          description: The status of the guest room block
        name:
          type: string
          description: Name of the guest room block
        start_date:
          type: string
          format: date
          description: Block start date
        end_date:
          type: string
          format: date
          description: Block end date
        extended_start_date:
          type: string
          format: date
          nullable: true
          description: Extended start date for pre-block arrivals
        extended_end_date:
          type: string
          format: date
          nullable: true
          description: Extended end date for post-block departures
        block_release_date:
          type: string
          format: date
          nullable: true
          description: Date when unbooked rooms are released
        lost_reason_details:
          type: string
          nullable: true
        lost_reason_id:
          type: integer
          nullable: true
        pms_booking_number:
          type: string
          nullable: true
        pms_group_code:
          type: string
          nullable: true
        pms_rate_code:
          type: string
          nullable: true
        pms_group_id:
          type: string
          nullable: true
        pms_error:
          type: string
          nullable: true
        pms_status:
          type: string
          nullable: true
        pms_posting_account_id:
          type: string
          nullable: true
        disable_pms_send:
          type: boolean
        reservation_method:
          type: string
          nullable: true
        billing_definition:
          type: string
          nullable: true
        commission_type:
          type: string
          nullable: true
        commission_amount:
          type: number
          format: float
          nullable: true
        guest_room_allocations:
          type: array
          items:
            "$ref": "#/components/schemas/GuestRoomAllocationAttributes"
          description: Nightly room allocations by room type
    Lead:
      type: object
      properties:
        id:
          type: integer
        first_name:
          type: string
        last_name:
          type: string
        company:
          type: string
          nullable: true
        email_address:
          type: string
        phone_number:
          type: string
          nullable: true
        owned_by:
          type: integer
          nullable: true
        phone_number_extension:
          type: string
          nullable: true
        event_description:
          type: string
          nullable: true
        event_date:
          type: string
          format: date
          nullable: true
        start_time:
          type: string
          format: time
          nullable: true
        end_time:
          type: string
          format: time
          nullable: true
        guest_count:
          type: integer
          nullable: true
        additional_information:
          type: string
          nullable: true
        contact_preference:
          type: string
          enum:
          - Phone
          - Email
          - Text
          nullable: true
        email_opt_in:
          type: boolean
          nullable: true
        booking_lead:
          type: boolean
          nullable: true
        campaign_source:
          type: string
          nullable: true
        campaign_medium:
          type: string
          nullable: true
        campaign_name:
          type: string
          nullable: true
        campaign_term:
          type: string
          nullable: true
        campaign_content:
          type: string
          nullable: true
        location:
          "$ref": "#/components/schemas/Location"
          nullable: true
        account:
          "$ref": "#/components/schemas/Account"
          nullable: true
        contact:
          "$ref": "#/components/schemas/Contact"
          nullable: true
        booking:
          "$ref": "#/components/schemas/Booking"
          nullable: true
        event:
          "$ref": "#/components/schemas/Event"
          nullable: true
        lead_form:
          "$ref": "#/components/schemas/LeadForm"
          nullable: true
        selected_lead_sources:
          type: array
          items:
            "$ref": "#/components/schemas/SelectedLeadSource"
        lead_booking_events:
          type: array
          items:
            "$ref": "#/components/schemas/LeadBookingEvent"
        offsite_address:
          "$ref": "#/components/schemas/Address"
          nullable: true
        custom_fields:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValue"
        creator:
          "$ref": "#/components/schemas/User"
          nullable: true
        owner:
          "$ref": "#/components/schemas/User"
          nullable: true
        updator:
          "$ref": "#/components/schemas/User"
          nullable: true
        created_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        updated_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        deleted_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        converted_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        turned_down_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
        viewed_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
          nullable: true
    LeadBookingEvent:
      type: object
      properties:
        id:
          type: integer
        start_time:
          type: string
          format: time
        end_time:
          type: string
          format: time
        event_date:
          type: string
          format: date
        guest_count:
          type: integer
        event_description:
          type: string
    LeadCreateRequest:
      type: object
      required:
      - first_name
      - last_name
      additionalProperties: false
      properties:
        first_name:
          type: string
          description: The first name of the lead
        last_name:
          type: string
          description: The last name of the lead
        company:
          type: string
          description: The company name
        email_address:
          type: string
          format: email
          description: The email address
        phone_number:
          type: string
          description: The phone number
        phone_number_extension:
          type: string
          description: The phone number extension
        event_description:
          type: string
          description: Description of the event
        event_date:
          type: string
          format: date
          description: The event date
        start_time:
          type: string
          format: time
          description: Event start time
        end_time:
          type: string
          format: time
          description: Event end time
        guest_count:
          type: integer
          description: Number of guests
        additional_information:
          type: string
          description: Additional information about the event
        contact_preference:
          type: string
          enum:
          - Phone
          - Email
          - Text
          description: Preferred contact method
        campaign_source:
          type: string
          description: UTM campaign source
        campaign_medium:
          type: string
          description: UTM campaign medium
        campaign_name:
          type: string
          description: UTM campaign name
        campaign_term:
          type: string
          description: UTM campaign term
        campaign_content:
          type: string
          description: UTM campaign content
        gclid:
          type: string
          nullable: true
        location_id:
          type: integer
          description: The location ID for this lead
        lead_form_id:
          type: integer
          description: The lead form ID if submitted via form
        selected_lead_sources_attributes:
          type: array
          items:
            type: object
            properties:
              lead_source_id:
                type: integer
                description: The ID of the lead source
              lead_source_other:
                type: string
                description: Other lead source description
          description: Lead sources to associate with this lead
        lead_booking_events_attributes:
          type: array
          items:
            type: object
            properties:
              start_time:
                type: string
                format: time
                description: Event start time
              end_time:
                type: string
                format: time
                description: Event end time
              event_date:
                type: string
                format: date
                description: Event date
              guest_count:
                type: integer
                description: Number of guests for this event
              event_description:
                type: string
                description: Description of this specific event
          description: Events for booking leads
        offsite_address_attributes:
          "$ref": "#/components/schemas/AddressAttributes"
          description: Offsite address for the event
    LeadForm:
      type: object
      properties:
        id:
          type: integer
          description: Unique identifier for the lead form
        name:
          type: string
          description: Form name/slug
        title:
          type: string
          nullable: true
          description: Display title
        description:
          type: string
          nullable: true
          description: Form description
        active:
          type: boolean
          description: Whether form is active
        booking:
          type: boolean
          description: Whether form is for bookings
        language:
          type: string
          description: Form language code (e.g., 'en')
        form_type:
          type: string
          enum:
          - legacy
          - dynamic
          description: Type of lead form - 'legacy' for LeadForm, 'dynamic' for DynamicLeadForm
        locations:
          type: array
          items:
            "$ref": "#/components/schemas/LeadFormLocation"
          description: Locations associated with this form
        fields:
          type: array
          items:
            "$ref": "#/components/schemas/LeadFormField"
          description: Form fields (empty array for legacy forms)
    LeadFormField:
      type: object
      properties:
        id:
          type: string
          description: Field identifier (component ID from form configuration)
        name:
          type: string
          description: Field name/slug
        field_type:
          type: string
          description: Type of field (text_field, email_field, etc.)
        required:
          type: boolean
          description: Whether field is required
        visible:
          type: boolean
          description: Whether field is visible
        position:
          type: integer
          description: Display order
        section:
          type: string
          nullable: true
          description: Section grouping
        fieldset:
          type: string
          nullable: true
          description: Fieldset grouping
        properties:
          type: object
          additionalProperties: true
          description: Field configuration (label, placeholder, options)
        validation_rules:
          type: object
          additionalProperties: true
          description: Validation configuration
        help_text:
          type: string
          nullable: true
          description: Help text for the field
    LeadFormLocation:
      type: object
      properties:
        id:
          type: integer
          description: Location ID
        name:
          type: string
          description: Location name
    LeadSource:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
    LeadUpdateRequest:
      type: object
      additionalProperties: false
      properties:
        first_name:
          type: string
          description: The first name of the lead
        last_name:
          type: string
          description: The last name of the lead
        company:
          type: string
          description: The company name
        email_address:
          type: string
          format: email
          description: The email address
        phone_number:
          type: string
          description: The phone number
        phone_number_extension:
          type: string
          description: The phone number extension
        event_description:
          type: string
          description: Description of the event
        event_date:
          type: string
          format: date
          description: The event date
        start_time:
          type: string
          format: time
          description: Event start time
        end_time:
          type: string
          format: time
          description: Event end time
        guest_count:
          type: integer
          description: Number of guests
        additional_information:
          type: string
          description: Additional information about the event
        contact_preference:
          type: string
          enum:
          - Phone
          - Email
          - Text
          description: Preferred contact method
        campaign_source:
          type: string
          description: UTM campaign source
        campaign_medium:
          type: string
          description: UTM campaign medium
        campaign_name:
          type: string
          description: UTM campaign name
        campaign_term:
          type: string
          description: UTM campaign term
        campaign_content:
          type: string
          description: UTM campaign content
        location_id:
          type: integer
          description: The location ID for this lead
        lead_form_id:
          type: integer
          description: The lead form ID if submitted via form
        reassign_task_ownership:
          type: boolean
          description: Whether to reassign task ownership
        owned_by:
          type: integer
          description: User ID to assign ownership to
        selected_lead_sources_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              lead_source_id:
                type: integer
                description: The ID of the lead source
              lead_source_other:
                type: string
                description: Other lead source description
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: Lead sources to associate with this lead
        lead_booking_events_attributes:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
                description: ID for updating existing record
              start_time:
                type: string
                format: time
                description: Event start time
              end_time:
                type: string
                format: time
                description: Event end time
              event_date:
                type: string
                format: date
                description: Event date
              guest_count:
                type: integer
                description: Number of guests for this event
              event_description:
                type: string
                description: Description of this specific event
              _destroy:
                type: boolean
                description: Set to true to delete the associated record
          description: Events for booking leads
        offsite_address_attributes:
          "$ref": "#/components/schemas/AddressUpdateAttributes"
          description: Offsite address for the event
        custom_field_values_attributes:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValueUpdateAttributes"
          description: Custom field values to set on the lead
    Location:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        description:
          type: string
          nullable: true
        slug:
          type: string
        public_token:
          type: string
        status:
          type: string
          enum:
          - Active
          - Trial
          - Free
          - Included
          - Included, No Reporting
          - Disabled
          - Disabled - Nonpayment
        plan:
          type: string
          enum:
          - Leads
          - Calendar
          - Full
          - Hotel
          - TripleseatDirect
        currency_code:
          type: string
        delivery_options:
          type: string
        delivery_radius:
          type: string
          format: decimal
          nullable: true
        allow_delivery:
          type: boolean
        allow_inhouse:
          type: boolean
        allow_pickup:
          type: boolean
        calendar_color:
          type: string
        listed:
          type: boolean
        real_timezone:
          type: string
        created_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        updated_at:
          type: string
          format: MM/DD/YYYY hh:mm AM/PM
        customer_id:
          type: integer
        site_id:
          type: integer
        phone_numbers:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumber"
        addresses:
          type: array
          items:
            "$ref": "#/components/schemas/Address"
        custom_fields:
          type: array
          items:
            "$ref": "#/components/schemas/CustomFieldValue"
        rooms:
          type: array
          items:
            "$ref": "#/components/schemas/Room"
        public_listings:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              venue_types:
                type: array
                items:
                  type: string
              event_types:
                type: array
                items:
                  type: string
              amenities:
                type: array
                items:
                  type: string
    LocationWrapped:
      type: object
      additionalProperties: false
      properties:
        location:
          "$ref": "#/components/schemas/Location"
    MarketSegment:
      type: object
      properties:
        name:
          type: string
    Menu:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        site_id:
          type: integer
        location_ids:
          type: array
          items:
            type: integer
        created_at:
          type: string
        updated_at:
          type: string
        deleted_at:
          type: string
          nullable: true
        external_id:
          type: string
          nullable: true
        internal_name:
          type: string
        display_name:
          type: string
        description:
          type: string
        delivery_options:
          type: string
        disabled:
          type: boolean
        menu_items:
          type: array
          items:
            "$ref": "#/components/schemas/MenuItem"
    MenuItem:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        site_id:
          type: integer
        location_ids:
          type: array
          items:
            type: integer
        current_version_id:
          type: integer
        created_at:
          type: string
        updated_at:
          type: string
        deleted_at:
          type: string
          nullable: true
        display_name:
          type: string
        internal_name:
          type: string
        description:
          type: string
        price:
          type: string
        sku:
          type: string
        line_item_id:
          type: integer
          nullable: true
        line_item_category_id:
          type: integer
        disabled:
          type: boolean
        internal_description:
          type: string
          nullable: true
        package:
          type: boolean
        priced_per_person:
          type: boolean
        modifier_groups:
          type: array
          items:
            "$ref": "#/components/schemas/ModifierGroup"
          nullable: true
    MenuItemInput:
      type: object
      additionalProperties: false
      properties:
        display_name:
          type: string
          description: Display name of the menu item
        internal_name:
          type: string
          description: Internal name of the menu item
        internal_description:
          type: string
          description: Internal description of the menu item
        description:
          type: string
          description: Public description of the menu item
        sku:
          type: string
          description: SKU code for the menu item
        price:
          type: number
          format: decimal
          description: Price of the menu item
        package:
          type: boolean
          description: Whether this menu item is a package
        priced_per_person:
          type: boolean
          description: Whether this menu item is priced per person
        selected_by_default:
          type: boolean
          description: Whether this menu item is selected by default
        line_item_category_id:
          type: integer
          description: ID of the line item category
        location_ids:
          type: array
          items:
            type: integer
          description: Array of location IDs where this menu item is available
        modifier_groups:
          type: array
          items:
            "$ref": "#/components/schemas/ModifierGroupInput"
          description: Array of modifier groups for this menu item. Supports nested
            structures where modifiers can have their own modifier groups.
      required:
      - display_name
      example:
        display_name: Menu Item with Nested Modifier Groups
        internal_name: menu-item-with-nested-modifier-groups
        description: A menu item with modifiers that have their own nested modifier
          groups
        sku: MENU-NESTED-001
        price: 45.99
        priced_per_person: true
        selected_by_default: false
        line_item_category_id: 123
        location_ids:
        - 456
        modifier_groups:
        - id: 1
          display_name: Choose Your Base Options
          internal_name: base-selection
          description: Select from the available base options with additional customizations
          min_selections: 1
          max_selections: 2
          quantity_on_modifiers: false
          order: 1
          modifiers:
          - id: 789
            order: 1
            modifier_groups:
            - display_name: Size Options
              internal_name: size-selection
              description: Choose size for your base option
              min_selections: 1
              max_selections: 1
              quantity_on_modifiers: false
              order: 1
              modifiers:
              - id: 101
                order: 1
                modifier_groups: []
    MenuItemSelection:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        parent_type:
          type: string
        parent_id:
          type: integer
        menu_item_id:
          type: integer
        menu_item_version_id:
          type: integer
          nullable: true
        site_id:
          type: integer
        quantity:
          type: integer
        price:
          type: string
        total_price:
          type: string
        line_item_category_id:
          type: integer
        internal_name:
          type: string
        display_name:
          type: string
        sku:
          type: string
        internal_description:
          type: string
        user_set_quantity:
          type: boolean
        line_item_id:
          type: integer
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        menu_modifier_selections:
          type: array
          items:
            "$ref": "#/components/schemas/MenuModifierSelection"
    MenuModifierSelection:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        menu_item_selection_id:
          type: integer
        site_id:
          type: integer
        line_item_category_id:
          type: integer
          nullable: true
        modifier_id:
          type: string
        group_id:
          type: string
          nullable: true
        depth:
          type: integer
        quantity:
          type: integer
          nullable: true
        price:
          type: string
          nullable: true
        internal_name:
          type: string
        display_name:
          type: string
        internal_description:
          type: string
          nullable: true
        sku:
          type: string
          nullable: true
        external_id:
          type: string
          nullable: true
        is_freehand:
          type: boolean
          nullable: true
        modifier_group_display_name:
          type: string
          nullable: true
        modifier_group_description:
          type: string
          nullable: true
        effective_price:
          type: string
        total_price:
          type: string
    MenuUpdateTaskResponse:
      type: object
      additionalProperties: false
      properties:
        request_id:
          type: string
          format: uuid
        status:
          type: string
        created_at:
          type: string
        completed_at:
          type: string
          nullable: true
        error:
          type: string
          nullable: true
    Modifier:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        uuid:
          type: string
        display_name:
          type: string
        internal_name:
          type: string
        description:
          type: string
          nullable: true
        internal_description:
          type: string
          nullable: true
        sku:
          type: string
          nullable: true
        price:
          type: string
          nullable: true
        selected_by_default:
          type: boolean
        priced_per_person:
          type: boolean
        line_item_category_id:
          type: integer
          nullable: true
        site_id:
          type: integer
        order:
          type: integer
          nullable: true
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        locations:
          type: array
          items:
            type: integer
        modifier_groups:
          type: array
          items:
            "$ref": "#/components/schemas/ModifierGroup"
          nullable: true
    ModifierGroup:
      type: object
    ModifierGroupInput:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          description: Optional ID for existing modifier group, omit for new groups
        display_name:
          type: string
          description: Display name of the modifier group
        internal_name:
          type: string
          description: Internal name of the modifier group
        description:
          type: string
          description: Description of the modifier group
          nullable: true
        min_selections:
          type: integer
          description: Minimum number of selections required
        max_selections:
          type: integer
          description: Maximum number of selections allowed
        quantity_on_modifiers:
          type: boolean
          description: Whether quantity is applied on individual modifiers
        order:
          type: integer
          description: Display order of the modifier group
        modifiers:
          type: array
          items:
            "$ref": "#/components/schemas/ModifierInput"
          description: Array of modifiers in this group
          nullable: true
      required:
      - display_name
      - min_selections
      - max_selections
      - quantity_on_modifiers
      - order
    ModifierInput:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
          description: ID of existing modifier to reference
        order:
          type: integer
          description: Display order of the modifier within the group
        modifier_groups:
          type: array
          items:
            "$ref": "#/components/schemas/ModifierGroupInput"
          description: Nested modifier groups for this modifier
          nullable: true
      required:
      - id
    Note:
      type: object
      properties:
        id:
          type: integer
        body:
          type: string
        created_by:
          type: integer
          nullable: true
        updated_by:
          type: integer
          nullable: true
        created_at:
          type: string
          format: datetime
          nullable: true
        updated_at:
          type: string
          format: datetime
          nullable: true
      additionalProperties: true
    NoteCreateRequest:
      type: object
      properties:
        note:
          type: object
          properties:
            body:
              type: string
            created_by:
              type: integer
          required:
          - body
      required:
      - note
    NoteUpdateRequest:
      type: object
      properties:
        note:
          type: object
          properties:
            body:
              type: string
            created_by:
              type: integer
          required:
          - body
      required:
      - note
    Payment:
      type: object
      additionalProperties: true
      properties:
        id:
          type: integer
        amount:
          type: number
          format: decimal
        state:
          type: string
          enum:
          - new
          - sent
          - deleted
          - processing_charge
          - processing_refund
          - paid
          - refunded
          - partially_refunded
          - charging_error
        custom_title:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        due_at:
          type: string
          format: date
          nullable: true
        paid_at:
          type: string
          format: date-time
          nullable: true
        unpaid_at:
          type: string
          format: date-time
          nullable: true
        payable_by_guest:
          type: boolean
        billing_kind:
          type: string
          nullable: true
        payment_method:
          type: string
          nullable: true
        credit_card_type:
          type: string
          nullable: true
        refunded_at:
          type: string
          format: date-time
          nullable: true
        amount_refunded:
          type: number
          format: decimal
          nullable: true
        refund_reason:
          type: string
          nullable: true
        paid_by:
          type: string
          nullable: true
        reference:
          type: string
          nullable: true
        internal_note:
          type: string
          nullable: true
    PaymentCreateRequest:
      type: object
      required:
      - amount
      additionalProperties: false
      properties:
        amount:
          type: number
          format: decimal
          description: Payment amount
        due_at:
          type: string
          format: date
          nullable: true
          description: Payment due date
        custom_title:
          type: string
          nullable: true
          description: Custom payment title
        reference:
          type: string
          nullable: true
          description: Payment reference
        internal_note:
          type: string
          nullable: true
          description: Internal note
    PaymentMethod:
      type: object
      additionalProperties: true
      properties:
        id:
          type: integer
        name:
          type: string
        position:
          type: integer
        site_id:
          type: integer
          nullable: true
    PaymentPayRequest:
      type: object
      additionalProperties: false
      properties:
        payment_method_id:
          type: integer
          nullable: true
          description: Payment method ID
        paid_at:
          type: string
          format: date
          nullable: true
          description: Payment date
        reference:
          type: string
          nullable: true
          description: Payment reference
    PaymentProvider:
      oneOf:
      - "$ref": "#/components/schemas/StripePaymentProvider"
      - "$ref": "#/components/schemas/SquarePaymentProvider"
      - "$ref": "#/components/schemas/FiservPaymentProvider"
      - "$ref": "#/components/schemas/TilledPaymentProvider"
      discriminator:
        propertyName: type
        mapping:
          stripe: "#/components/schemas/StripePaymentProvider"
          square: "#/components/schemas/SquarePaymentProvider"
          fiserv: "#/components/schemas/FiservPaymentProvider"
          tilled: "#/components/schemas/TilledPaymentProvider"
    PaymentSet:
      type: object
      additionalProperties: true
      properties:
        amount_due:
          type: number
          format: decimal
        running_balance:
          type: number
          format: decimal
        remaining_payment_amount:
          type: number
          format: decimal
        document_name:
          type: string
        payments:
          type: array
          items:
            "$ref": "#/components/schemas/Payment"
    PaymentsTSID:
      type: string
      maxLength: 255
      example: ts_1234567890
    PaymentsWrapped:
      type: object
      additionalProperties: false
      properties:
        payments:
          type: array
          items:
            "$ref": "#/components/schemas/Payment"
    PaymentWrapped:
      type: object
      additionalProperties: false
      properties:
        payment:
          "$ref": "#/components/schemas/Payment"
    PhoneNumber:
      type: object
      properties:
        id:
          type: integer
        number:
          type: string
          nullable: true
          description: The phone number without extension
        phone_number_type:
          type: string
          nullable: true
          enum:
          - Main
          - Work
          - Home
          - Mobile
          - Fax
          - Pager
          - Skype
          description: The type of phone number
        extension:
          type: string
          nullable: true
          description: The phone number extension
    PhoneNumberAttributes:
      type: object
      properties:
        number:
          type: string
          description: The phone number without extension
          maxLength: 50
        extension:
          type: string
          description: The phone number extension
          maxLength: 10
        phone_number_type:
          type: string
          enum:
          - Main
          - Work
          - Home
          - Mobile
          - Fax
          - Pager
          - Skype
          description: The type of phone number
    PhoneNumberUpdateAttributes:
      allOf:
      - "$ref": "#/components/schemas/AssociationTrackingAttrs"
      - "$ref": "#/components/schemas/PhoneNumberAttributes"
    PmsBatchFailedEntry:
      type: object
      properties:
        item_number:
          type: integer
        date:
          type: string
          nullable: true
        guest_room_type_id:
          type: integer
          nullable: true
        errors:
          type: array
          items:
            type: string
    PmsBatchResults:
      type: object
      properties:
        successful_entries:
          type: array
          items:
            "$ref": "#/components/schemas/PmsBatchSuccessEntry"
        failed_entries:
          type: array
          items:
            "$ref": "#/components/schemas/PmsBatchFailedEntry"
        total_processed:
          type: integer
        success_count:
          type: integer
        failure_count:
          type: integer
    PmsBatchSuccessEntry:
      type: object
      properties:
        item_number:
          type: integer
        date:
          type: string
        guest_room_type_id:
          type: integer
        grc_entry_id:
          type: integer
          nullable: true
        updated_fields:
          type: array
          items:
            type: string
        action:
          type: string
          enum:
          - created
          - updated
    PmsInventoryItem:
      type: object
      required:
      - date
      - guest_room_type_id
      properties:
        date:
          type: string
          format: date
          description: The date for this inventory entry
        guest_room_type_id:
          type: integer
          description: The guest room type ID
        total_rooms:
          type: integer
          nullable: true
          description: Total room count
        transient_protected:
          type: integer
          nullable: true
          description: Transient protected rooms
        transient_sold:
          type: integer
          nullable: true
          description: Transient sold rooms
        out_of_order:
          type: integer
          nullable: true
          description: Out of order rooms
        out_of_inventory:
          type: integer
          nullable: true
          description: Out of inventory rooms
        pms_available:
          type: integer
          nullable: true
          description: PMS available rooms
    PmsInventoryRequest:
      type: object
      required:
      - inventory
      additionalProperties: false
      properties:
        inventory:
          type: array
          items:
            "$ref": "#/components/schemas/PmsInventoryItem"
          description: Array of inventory entries to create or update
    PmsRateItem:
      type: object
      required:
      - date
      - guest_room_type_id
      properties:
        date:
          type: string
          format: date
          description: The date for this rate entry
        guest_room_type_id:
          type: integer
          description: The guest room type ID
        rate_single:
          type: number
          format: float
          nullable: true
        rate_double:
          type: number
          format: float
          nullable: true
        rate_triple:
          type: number
          format: float
          nullable: true
        rate_quad:
          type: number
          format: float
          nullable: true
    PmsRatesRequest:
      type: object
      required:
      - rate_plan
      - rates
      additionalProperties: false
      properties:
        rate_plan:
          type: string
          enum:
          - BAR
          - MAR
          description: 'Rate plan type: BAR (Best Available Rate) or MAR (Minimum
            Acceptable Rate)'
        rates:
          type: array
          items:
            "$ref": "#/components/schemas/PmsRateItem"
          description: Array of rate entries to create or update
    PmsRoomType:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        site_id:
          type: integer
        location_id:
          type: integer
        position:
          type: integer
        name:
          type: string
        description:
          type: string
          nullable: true
        created_by:
          type: string
          nullable: true
        updated_by:
          type: string
          nullable: true
        created_at:
          type: string
        updated_at:
          type: string
        deleted_at:
          type: string
          nullable: true
        default_transient_protected_0:
          type: integer
          nullable: true
        default_rate_0:
          type: string
          nullable: true
        default_transient_protected_1:
          type: integer
          nullable: true
        default_rate_1:
          type: string
          nullable: true
        default_transient_protected_2:
          type: integer
          nullable: true
        default_rate_2:
          type: string
          nullable: true
        default_transient_protected_3:
          type: integer
          nullable: true
        default_rate_3:
          type: string
          nullable: true
        default_transient_protected_4:
          type: integer
          nullable: true
        default_rate_4:
          type: string
          nullable: true
        default_transient_protected_5:
          type: integer
          nullable: true
        default_rate_5:
          type: string
          nullable: true
        default_transient_protected_6:
          type: integer
          nullable: true
        default_rate_6:
          type: string
          nullable: true
        total_rooms:
          type: integer
        default_minimum_acceptable_rate_0:
          type: string
          nullable: true
        default_minimum_acceptable_rate_1:
          type: string
          nullable: true
        default_minimum_acceptable_rate_2:
          type: string
          nullable: true
        default_minimum_acceptable_rate_3:
          type: string
          nullable: true
        default_minimum_acceptable_rate_4:
          type: string
          nullable: true
        default_minimum_acceptable_rate_5:
          type: string
          nullable: true
        default_minimum_acceptable_rate_6:
          type: string
          nullable: true
        allow_overbooking:
          type: boolean
        virtual_room:
          type: boolean
    ProviderSlug:
      type: string
      enum:
      - stripe
      - square
      - tilled
      - fiserv
      - freedompay
      - shift4
      - cybersource
      - aurus
    ResourceIdentifier:
      type: integer
      format: bigint
    Room:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        capacity:
          type: integer
          nullable: true
        description:
          type: string
          nullable: true
        customer_id:
          type: integer
        site_id:
          type: integer
        location_id:
          type: integer
        is_unassigned:
          type: boolean
        descendants:
          type: array
          items:
            oneOf:
            - "$ref": "#/components/schemas/Room"
            - type: array
              items:
                "$ref": "#/components/schemas/Room"
    SelectedLeadSource:
      type: object
      properties:
        id:
          type: integer
        lead_source_id:
          type: integer
          nullable: true
        lead_source_other:
          type: string
          nullable: true
        lead_source:
          "$ref": "#/components/schemas/LeadSource"
    Site:
      type: object
      additionalProperties: true
      properties:
        id:
          type: integer
        customer_id:
          type: integer
        name:
          type: string
        subdomain:
          type: string
          nullable: true
        timezone:
          type: string
          nullable: true
        currency_code:
          type: string
          nullable: true
        billings:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              internal_name:
                type: string
                nullable: true
              inclusive:
                type: boolean
                nullable: true
              billing_locations:
                type: array
                items:
                  type: object
                  properties:
                    location_id:
                      type: integer
                    value:
                      type: string
                      nullable: true
        line_item_categories:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        contact_types:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        event_types:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        lead_sources:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        task_types:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        referral_sources:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        payment_methods:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
    SiteWrapped:
      type: object
      additionalProperties: true
      properties:
        site:
          "$ref": "#/components/schemas/Site"
    SquarePaymentProvider:
      description: Square Payment Provider
      allOf:
      - "$ref": "#/components/schemas/BasePaymentsProvider"
      - type: object
        required:
        - remote_id
        - access_token
        - refresh_token
        - access_token_expires_at
        properties:
          remote_id:
            type: string
            maxLength: 255
          access_token:
            type: string
            maxLength: 255
          refresh_token:
            type: string
            maxLength: 255
          access_token_expires_at:
            type: string
            format: date-time
            maxLength: 255
    StatusChange:
      type: object
      properties:
        id:
          type: integer
        old_status:
          type: string
        new_status:
          type: string
        changed_at:
          type: string
          format: date-time
        user_id:
          type: integer
    StripePaymentProvider:
      description: Stripe Payment Provider
      allOf:
      - "$ref": "#/components/schemas/BasePaymentsProvider"
      - type: object
        required:
        - remote_id
        - access_token
        - refresh_token
        - stripe_publishable_key
        - stripe_context
        properties:
          remote_id:
            type: string
            maxLength: 255
          access_token:
            type: string
            maxLength: 255
          access_token_expires_at:
            type: string
            format: date-time
            maxLength: 255
            nullable: true
          refresh_token:
            type: string
            maxLength: 255
          stripe_publishable_key:
            type: string
            maxLength: 255
          stripe_context:
            type: string
            enum:
            - gather
            - attendease
            nullable: true
    SuccessNoBody:
      description: Successful Operation
    Task:
      type: object
      required:
      - description
      - assignee_id
      additionalProperties: false
      properties:
        body:
          type: string
          description: Task Description
        assignee_id:
          type: array
          items:
            type: integer
          description: 'Assignee ID: Restricted to the event owner and/or  manager'
        due_date:
          type: string
          format: date-time
          description: 'Due Date: ISO 8601 format'
        priority:
          type: integer
          description: 'Priority Level: 1 = Low, 2 = Medium, 3 = High'
        task_type_id:
          type: integer
    TaskResponse:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        name:
          type: string
        body:
          type: string
        due_date:
          type: string
          format: date-time
        completed:
          type: boolean
        completed_at:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        taskable_id:
          type: integer
        taskable_type:
          type: string
    TilledPaymentProvider:
      description: Tilled Payment Provider
      allOf:
      - "$ref": "#/components/schemas/BasePaymentsProvider"
      - type: object
        required:
        - remote_id
        - tilled_cc_pricing_template_id
        - tilled_ach_pricing_template_id
        - contact_information
        properties:
          remote_id:
            type: string
            maxLength: 255
          tilled_cc_pricing_template_id:
            type: string
            maxLength: 255
          tilled_ach_pricing_template_id:
            type: string
            maxLength: 255
          contact_information:
            type: object
            required:
            - email_address
            properties:
              email_address:
                "$ref": "#/components/schemas/EmailAddressField"
    Url:
      type: string
      format: url
      maxLength: 2000
    User:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        email:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        title:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        created_at:
          type: string
        updated_at:
          type: string
        phone_numbers:
          type: array
          items:
            "$ref": "#/components/schemas/PhoneNumber"
    UserToken:
      type: string
      format: jwt
      pattern: "(?-mix:(^[A-Za-z0-9\\-_]*\\.[A-Za-z0-9\\-_]*\\.[A-Za-z0-9\\-_]*$))"
    Website:
      type: object
      additionalProperties: false
      properties:
        id:
          type: integer
        url:
          type: string
          format: uri
    WebsiteAttributes:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: The URL of the website
          maxLength: 255
    WebsiteUpdateAttributes:
      allOf:
      - "$ref": "#/components/schemas/AssociationTrackingAttrs"
      - "$ref": "#/components/schemas/WebsiteAttributes"
  requestBodies: {}
  securitySchemes:
    OAuthToken:
      type: http
      scheme: bearer
      description: OAuth 2.0 Bearer Token. Obtain a token via the Authorization Code
        or Client Credentials grant at `POST https://api.tripleseat.com/oauth2/token`.
        Tokens expire after 2 hours (7200 seconds). Use the refresh_token to obtain
        a new access token without re-authorizing.
    PublicApiKey:
      type: apiKey
      in: query
      name: public_key
      description: Public API Key for lead form submissions and location lookups.
        Find your key on the [API tab](#overview).
  responses:
    UnexpectedError:
      description: An unexpected error has occurred
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ErrorMessage"
    UnprocessableEntityError:
      description: Invalid or missing fields
      content:
        application/json:
          schema:
            "$ref": "#/components/schemas/ErrorList"
    UnauthorizedError:
      description: Access token is missing or invalid
      content:
        application/json:
          example:
            errorMessage: Access token is missing or invalid
          schema:
            "$ref": "#/components/schemas/ErrorMessage"
    ForbiddenError:
      description: You do not have access to the requested resource.
      content:
        application/json:
          example:
            errorMessage: You do not have access to the requested resource.
          schema:
            "$ref": "#/components/schemas/ErrorMessage"
    NotFoundError:
      description: Entity not found
      content:
        application/json:
          example:
            errorMessage: Payment Intent ID not found for the given ID
          schema:
            "$ref": "#/components/schemas/ErrorMessage"
    TooManyRequestsError:
      description: Too many requests
      content:
        application/json:
          example:
            errorMessage: Too many requests.
          schema:
            "$ref": "#/components/schemas/ErrorMessage"
