Outdoorsy Conversations API

The conversations API from Outdoorsy — 4 operation(s) for conversations.

OpenAPI Specification

outdoorsy-conversations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'The Outdoorsy API (or simply "API") is organized around REST. It uses

    predictable, resource-oriented URLs and implements standard HTTP response

    codes, verbs, authentication mechanisms, and a variety of request encodings.


    ## Versioning


    The API implements semantic versioning.'
  title: Outdoorsy API Documentation Conversations API
  version: 0.0.1
servers:
- url: /v0
security:
- Bearer:
  - '[]'
- API-Key:
  - '[]'
tags:
- name: conversations
paths:
  /admin/ai-reply-suggestions:
    get:
      description: 'Returns a paginated list of AI-generated reply suggestions for the specified conversation.

        Suggestions are ordered by creation date in descending order (newest first).

        Requires conversation_id query parameter. Supports pagination via offset and limit.

        Filter by confidence level with threshold_min and threshold_max (inclusive); if omitted,

        threshold_min defaults to 0 and threshold_max defaults to 1.

        Admin access required.'
      tags:
      - conversations
      summary: List AI reply suggestions for a conversation.
      operationId: listAiReplySuggestions
      parameters:
      - name: Offset
        in: query
        schema:
          type: integer
          format: int64
      - name: Limit
        in: query
        schema:
          type: integer
          format: int64
      - name: ThresholdMin
        in: query
        schema:
          type: number
          format: double
      - name: ThresholdMax
        in: query
        schema:
          type: number
          format: double
      - x-go-name: ConversationID
        name: conversation_id
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/aiReplySuggestionsResponse'
        '400':
          $ref: '#/components/responses/badRequestError'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        default:
          $ref: '#/components/responses/genericError'
  /conversations:
    get:
      description: Lists conversations
      tags:
      - conversations
      operationId: listConversations
      parameters:
      - x-go-name: UserID
        name: user_id
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: LocationIDs
        name: location_ids
        in: query
        schema:
          type: string
      - x-go-name: Single
        name: single
        in: query
        schema:
          type: boolean
      - x-go-name: Statuses
        name: booking_status
        in: query
        schema:
          type: string
      - x-go-name: Archived
        name: archived
        in: query
        schema:
          type: boolean
      - x-go-name: RenterID
        name: renter_id
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: HasMessages
        name: has_messages
        in: query
        schema:
          type: boolean
      - x-go-name: Order
        name: order
        in: query
        schema:
          type: string
      - x-go-name: Offset
        name: offset
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: Limit
        name: limit
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: OnlyNew
        name: new
        in: query
        schema:
          type: boolean
      - x-go-name: ExcludeBookings
        name: exclude_bookings
        in: query
        schema:
          type: boolean
      responses:
        '200':
          $ref: '#/components/responses/listConversationResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        default:
          $ref: '#/components/responses/genericError'
    post:
      description: Creates a new conversation between two users
      tags:
      - conversations
      operationId: createConversation
      responses:
        '200':
          $ref: '#/components/responses/conversationResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        default:
          $ref: '#/components/responses/genericError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConversationBody'
  /conversations/{id}:
    get:
      description: Get conversation by id
      tags:
      - conversations
      operationId: getConversationById
      parameters:
      - x-go-name: Offset
        name: offset
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: Limit
        name: limit
        in: query
        schema:
          type: integer
          format: int64
      - x-go-name: OrderBy
        name: order_by
        in: query
        schema:
          type: string
      - x-go-name: Active
        description: 'false -> bookings: MinBooking, true -> bookings: Booking'
        name: active
        in: query
        schema:
          type: boolean
      - x-go-name: WithoutBookings
        description: when true, bookings array will be empty
        name: without_bookings
        in: query
        schema:
          type: boolean
      - x-go-name: MinBookings
        description: when true, bookings array will only contain the most relevant booking
        name: min_bookings
        in: query
        schema:
          type: boolean
      - x-go-name: IncludeSystem
        description: when true, system messages will be included in the messages array
        name: include_system
        in: query
        schema:
          type: boolean
      - x-go-name: IncludeCurrent
        description: when true, bookings array will contain bookings with status negotiating, approved, imminent, handed_off
        name: include_current
        in: query
        schema:
          type: boolean
      - x-go-name: ID
        name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          $ref: '#/components/responses/conversationResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        default:
          $ref: '#/components/responses/genericError'
    put:
      description: Update conversation by id
      tags:
      - conversations
      operationId: updateConversation
      responses:
        '200':
          $ref: '#/components/responses/conversationResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        default:
          $ref: '#/components/responses/genericError'
    delete:
      description: Archive a conversation
      tags:
      - conversations
      operationId: archiveConversation
      parameters:
      - x-go-name: ID
        name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '204':
          $ref: '#/components/responses/noContentResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
  /conversations/{id}/ai-reply-suggestion:
    get:
      description: 'This endpoint returns an AI-generated reply suggestion based on the conversation history.

        The suggestion is cached, so subsequent requests for the same message will return the cached suggestion.

        Only conversation owners can access this endpoint.'
      tags:
      - conversations
      summary: Get AI-generated reply suggestion for a conversation.
      operationId: getReplySuggestion
      parameters:
      - x-go-name: ID
        name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          $ref: '#/components/responses/conversationSuggestionResponse'
        '401':
          $ref: '#/components/responses/unauthorizedError'
        '403':
          $ref: '#/components/responses/forbiddenError'
        '404':
          $ref: '#/components/responses/notFoundError'
        default:
          $ref: '#/components/responses/genericError'
components:
  responses:
    notFoundError:
      description: Not found error
    conversationResponse:
      description: HTTP status code 200 and conversation model
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Conversation'
    conversationSuggestionResponse:
      description: HTTP status code 200 and conversation suggestion response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ConversationSuggestionResponse'
    noContentResponse:
      description: Everything went as planned
    genericError:
      description: An unknown, unexpected error.
    aiReplySuggestionsResponse:
      description: HTTP status code 200 and array of AI reply suggestion models with messages
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/AiReplySuggestion'
    unauthorizedError:
      description: Unauthorized error
    listConversationResponse:
      description: HTTP status code 200 and array of conversation models
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Conversation'
    badRequestError:
      description: Invalid input or state means you're bad
      headers:
        Error:
          schema:
            type: string
    forbiddenError:
      description: Forbidden error
  schemas:
    Plan:
      type: object
      properties:
        allow_unregistered:
          type: boolean
          x-go-name: AllowUnregistered
        approved_vehicle_types:
          $ref: '#/components/schemas/DBStringSlice'
        bundle_required:
          type: boolean
          x-go-name: BundleRequired
        claims_number:
          type: string
          x-go-name: ClaimsNumber
        comp_policy_url:
          type: string
          x-go-name: CompPolicyURL
        comprehensive_coverage:
          type: boolean
          x-go-name: ComprehensiveCoverage
        comprehensive_maximum:
          type: string
          x-go-name: ComprehensiveMaximum
        country:
          type: string
          x-go-name: Country
        created:
          type: string
          x-go-name: Created
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        created_by_id:
          type:
          - integer
          - 'null'
          format: int64
        dealer_only:
          type: boolean
          x-go-name: DealerOnly
        hidden:
          type: boolean
          x-go-name: Hidden
        id:
          description: 'The fields below are returned in the minimum response when this

            insurance plan is an element inside a rental'
          type: integer
          format: int64
          x-go-name: ID
        insurance_address_1:
          type: string
          x-go-name: InsuranceAddress1
        insurance_city:
          type: string
          x-go-name: InsuranceCity
        insurance_end_date:
          type: string
          x-go-name: InsuranceEndDate
        insurance_name:
          type: string
          x-go-name: InsuranceName
        insurance_plan_override:
          $ref: '#/components/schemas/PlanOverride'
        insurance_policy_number:
          type: string
          x-go-name: InsurancePolicyNumber
        insurance_start_date:
          type: string
          x-go-name: InsuranceStartDate
        insurance_state:
          type: string
          x-go-name: InsuranceState
        insurance_zip:
          type: string
          x-go-name: InsuranceZip
        insured_address_1:
          type: string
          x-go-name: InsuredAddress1
        insured_city:
          type: string
          x-go-name: InsuredCity
        insured_name:
          type: string
          x-go-name: InsuredName
        insured_state:
          type: string
          x-go-name: InsuredState
        insured_zip:
          type: string
          x-go-name: InsuredZip
        label:
          type: string
          x-go-name: Label
        last_updated_by_id:
          type:
          - integer
          - 'null'
          format: int64
        liability_coverage:
          type: boolean
          x-go-name: LiabilityCoverage
        liability_maximum:
          type: string
          x-go-name: LiabilityMaximum
        liability_policy_url:
          type: string
          x-go-name: LiabilityPolicyURL
        locality:
          type: string
          x-go-name: Locality
        minimum_daily_fee:
          type: integer
          format: uint64
          x-go-name: MinimumDailyFee
        minimum_year:
          type: integer
          format: int64
          x-go-name: MinimumYear
        owner_comprehensive_deductible:
          type: string
          x-go-name: OwnerComprehensiveDeductible
        owner_fee_percentage:
          type: number
          format: double
          x-go-name: OwnerFeePercentage
        owner_liability_deductible:
          type: string
          x-go-name: OwnerLiabilityDeductible
        owner_liability_maximum:
          type: string
          x-go-name: OwnerLiabilityMaximum
        rental_category:
          type: string
          x-go-name: RentalCategory
        renter_comprehensive_deductible:
          type: string
          x-go-name: RenterComprehensiveDeductible
        renter_fee_percentage:
          type: number
          format: double
          x-go-name: RenterFeePercentage
        renter_liability_deductible:
          type: string
          x-go-name: RenterLiabilityDeductible
        renter_liability_maximum:
          type: string
          x-go-name: RenterLiabilityMaximum
        requires_driver_verification:
          type: boolean
          x-go-name: RequiresDriverVerification
        tiered:
          type: boolean
          x-go-name: Tiered
        updated:
          type: string
          x-go-name: Updated
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
      x-go-package: github.com/outdoorsy/api/internal/insurance
    bookingConsignment:
      type: object
      properties:
        keep_amt_cc_fee:
          type: integer
          format: int64
          x-go-name: KeepAmountCCFee
        keep_amt_insurance_fee:
          type: integer
          format: int64
          x-go-name: KeepAmountInsuranceFee
        keep_pct_cc_fee:
          type: number
          format: double
          x-go-name: KeepPctCCFee
        keep_pct_insurance_fee:
          type: number
          format: double
          x-go-name: KeepPctInsuranceFee
        pay_amt_total:
          type: integer
          format: int64
          x-go-name: PayAmountTotal
        pay_pct_generator:
          type: number
          format: double
          x-go-name: PayPctGenerator
        pay_pct_mileage:
          description: Consigned owner support - copied rental data
          type: number
          format: double
          x-go-name: PayPctMileage
        payout_id:
          $ref: '#/components/schemas/ConsignedPayout'
      x-go-package: github.com/outdoorsy/api/model
    Conversation:
      type: object
      properties:
        all_statuses:
          type: string
          x-go-name: AllStatuses
        archived:
          type: boolean
          x-go-name: Archived
        bookings:
          type: array
          items:
            $ref: '#/components/schemas/Booking'
          x-go-name: Bookings
        created:
          type: string
          x-go-name: Created
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        created_by_id:
          type: integer
          format: int64
        id:
          type: integer
          format: int64
          x-go-name: ID
        last_location_id:
          type: integer
          format: int64
          x-go-name: LastLocationID
        messages:
          type: array
          items:
            $ref: '#/components/schemas/Message'
          x-go-name: Messages
        num_messages:
          type: integer
          format: uint64
          x-go-name: NumMessages
        owner_id:
          type: integer
          format: int64
        owner_sms_proxy_id:
          type:
          - string
          - 'null'
        owner_summary:
          x-go-name: OwnerSummary
        read:
          type: boolean
          x-go-name: Read
        renter_id:
          type: integer
          format: int64
        renter_sms_proxy_id:
          type:
          - string
          - 'null'
        renter_summary:
          description: Generated in memory
          x-go-name: RenterSummary
        sms_proxy_closed:
          type:
          - boolean
          - 'null'
        sms_proxy_session_id:
          type:
          - string
          - 'null'
        time_to_first_action:
          type:
          - integer
          - 'null'
          format: int64
        updated:
          type: string
          x-go-name: Updated
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
      x-go-package: github.com/outdoorsy/api/model
    SearchFilters:
      type: object
      properties:
        festival_friendly:
          type: boolean
          x-go-name: FestivalFriendly
        make:
          type: string
          x-go-name: Make
        model:
          type: array
          items:
            type: string
          x-go-name: Model
        pet_friendly:
          type: boolean
          x-go-name: PetFriendly
        smoking_allowed:
          type: boolean
          x-go-name: SmokingAllowed
        tailgate_friendly:
          type: boolean
          x-go-name: TailgateFriendly
        towing_capacity:
          type: integer
          format: int64
          x-go-name: TowingCapacity
        towing_vehicle_make:
          type: string
          x-go-name: TowingVehicleMake
        towing_vehicle_model:
          type: string
          x-go-name: TowingVehicleModel
        towing_vehicle_year:
          type: integer
          format: int64
          x-go-name: TowingVehicleYear
        travelers:
          type: integer
          format: int64
          x-go-name: Travelers
        year_max:
          type: integer
          format: int64
          x-go-name: YearMax
        year_min:
          type: integer
          format: int64
          x-go-name: YearMin
      x-go-package: github.com/outdoorsy/api/types
    SiblingBooking:
      description: 'SiblingBooking embedded struct to get around Booking struct issues where we only render the first

        instance in the response then simply render the booking ID.

        See `func (b *Booking) ResponseElementData(options objx.Map)` for more details.'
      type: object
      properties:
        abandoned:
          type: boolean
          x-go-name: Abandoned
        addons:
          type: array
          items:
            $ref: '#/components/schemas/BookingItem'
          x-go-name: Addons
        adults:
          type: integer
          format: int64
          x-go-name: Adults
        affirm_details:
          $ref: '#/components/schemas/AffirmDetails'
        affirm_total:
          description: Dynamically calculated. Not stored in DB
          type: integer
          format: int64
          x-go-name: AffirmTotal
        applicable_tos_version:
          type: string
          x-go-name: ApplicableToSVersion
        attention:
          type: array
          items:
            $ref: '#/components/schemas/AttentionItem'
          x-go-name: Attention
        auto_assign_group:
          type:
          - boolean
          - 'null'
        auto_insurance_type:
          type: string
          x-go-name: AutoInsuranceType
        bid_id:
          type: integer
          format: int64
          x-go-name: BidID
        block_discount_code:
          type: boolean
          x-go-name: BlockDiscountCode
        booked:
          description: Not Mutable
          type: string
          x-go-name: Booked
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        booking_agent:
          type: string
          x-go-name: BookingAgentID
        booking_color:
          type:
          - string
          - 'null'
        booking_token:
          type: string
          x-go-name: BookingToken
        bundle_id:
          description: 'calculated field that holds the result of whether the rental has this assigned

            if not, will look at the user/owner'
          type: string
          x-go-name: BundleID
        calculated_day_price:
          type: integer
          format: uint64
          x-go-name: CalculatedDayPrice
        calculated_total_paid:
          type: integer
          format: uint64
          x-go-name: CalculatedTotalPaid
        campaign:
          description: dealer only
          type: string
          x-go-name: Campaign
        campground_booking_url:
          description: Contains the booking id so ember can call /bookings/:id/default-selections
          type: string
          x-go-name: CampgroundBookingURL
        campground_data:
          $ref: '#/components/schemas/SiblingBookingCampgroundData'
        can_add_ending_generator_values:
          type: boolean
          x-go-name: CanAddEndingGeneratorValues
        can_add_ending_mileage_values:
          type: boolean
          x-go-name: CanAddEndingMileageValues
        can_add_starting_generator_values:
          type: boolean
          x-go-name: CanAddStartingGeneratorValues
        can_add_starting_mileage_values:
          type: boolean
          x-go-name: CanAddStartingMileageValues
        can_add_trip_protection:
          description: CanAddTransaction is used to check if the guest can add a trip protection
          type: boolean
          x-go-name: CanAddTripProtection
        can_apply_credits:
          type: boolean
          x-go-name: CanApplyCredits
        can_cancel_trip_protection:
          description: CanCancelTripProtection is used to check if the guest can cancel a trip protection
          type: boolean
          x-go-name: CanCancelTripProtection
        can_charge_overage_fees:
          type: boolean
          x-go-name: CanChargeOverageFees
        can_file_claim:
          type: boolean
          x-go-name: CanFileClaim
        can_generate_weather_quote:
          type: boolean
          x-go-name: CanGenerateWeatherQuote
        can_manage_security_deposit:
          type: boolean
          x-go-name: CanManageSecurityDeposit
        can_manage_tax_rates:
          description: used by dashboard to disable tax editing
          type: boolean
          x-go-name: CanManageTaxRates
        can_renter_review:
          type: boolean
          x-go-name: CanRenterReview
        can_renter_review_until:
          type: string
          x-go-name: CanRenterReviewUntil
        can_see_contract:
          type: boolean
          x-go-name: CanSeeContract
        can_suggest_date_change:
          type: boolean
          x-go-name: CanSuggestDateChange
        can_suggest_delivery_change:
          type: boolean
          x-go-name: CanSuggestDeliveryChange
        cancel_metadata:
          $ref: '#/components/schemas/CancelMetadata'
        cancel_policy:
          type: string
          x-go-name: CancelPolicy
        cancel_reason:
          type: string
          x-go-name: CancelReason
        canceled:
          type: string
          x-go-name: Canceled
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        cancellation_cutoff_date:
          type: string
        cancellation_refund_breakdown:
          $ref: '#/components/schemas/CancellationRefundBreakdown'
        cancellation_refund_percentage:
          type: number
          format: double
          x-go-name: CancellationRefundPercentage
        cc_fee_percentage:
          description: Copied rental data - don't want rental changes to affect this booking
          type: number
          format: double
          x-go-name: CCFeePercentage
        checkin_stamp:
          description: Internal
          type: string
          x-go-name: CheckinStamp
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        checkout_questions:
          $ref: '#/components/schemas/DBMSISlice'
        checkout_stamp:
          type: string
          x-go-name: CheckoutStamp
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        checkout_steps_id:
          type: integer
          format: int64
          x-go-name: CheckoutStepsID
        children:
          type: integer
          format: int64
          x-go-name: Children
        coachnet_id:
          type: integer
          format: int64
          x-go-name: CoachnetID
        coachnet_premium:
          type: integer
          format: uint64
          x-go-name: CoachnetPremium
        consignment:
          $ref: '#/components/schemas/bookingConsignment'
        conversation_id:
          type: integer
          format: int64
        created:
          type: string
        created_by_id:
          type: integer
          format: int64
        created_stamp:
          type: string
          x-go-name: CreatedStamp
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        custom_insurance_text:
          type:
          - string
          - 'null'
        dealer_minimum_days:
          description: used to display information if a booking is below the dealers minimum days
          type: integer
          format: uint64
          x-go-name: DealerMinimumDays
        decline_reason:
          type: string
          x-go-name: DeclineReason
        default_insurance_coverage:
          type: string
          x-go-name: DefaultInsuranceCoverage
        deliverable_campground:
          $ref: '#/components/schemas/ExternalCampground'
        delivery:
          $ref: '#/components/schemas/BookingDelivery'
        delivery_item:
          $ref: '#/components/schemas/BookingItem'
        delivery_usage_item:
          x-go-name: DeliveryUsageItemJSON
        delivery_usage_item_id:
          type: integer
          format: int64
        deposit_percentage:
          type: number
          format: double
          x-go-name: DepositPercentage
        destination:
          type: string
          x-go-name: Destination
        destination_lat:
          type: number
          format: double
          x-go-name: DestinationLat
        destination_lng:
          type: number
          format: double
          x-go-name: DestinationLng
        details:
          $ref: '#/components/schemas/DBInterfaceMap'
        device_id:
          type: string
          x-go-name: DeviceID
        discount_code:
          description: Copied discount code data, not allowed in request data.
          type: string
          x-go-name: DiscountCode
        discount_code_amount:
          type: integer
          format: uint64
          x-go-name: DiscountCodeAmount
        discount_code_applied_to:
          type: string
          x-go-name: DiscountCodeAppliedTo
        discount_code_message:
          type: string
          x-go-name: DiscountCodeMessage
        display_insurance:
          type: string
          x-go-name: DisplayInsurance
        display_source:
          type: string
          x-go-name: DisplaySource
        display_status:
          type: string
          x-go-name: DisplayStatus
        display_status_style:
          type: string
          x-go-name: DisplayStatusStyle
        documents:
          $ref: '#/components/schemas/BookingDocuments'
        dropoff:
          $ref: '#/components/schemas/BookingDropoff'
        duration:
          type: integer
          format: uint64
          x-go-name: Duration
        esign_enabled:
          type: boolean
          x-go-name: EsignEnabled
        esign_pending:
          type: boolean
          x-go-name: EsignPending
        expire_reason:
          type: string
          x-go-name: ExpireReason
        express_checkout_id:
          type: integer
          format: int64
          x-go-name: ExpressCheckoutID
        external:
          type:
          - boolean
          - 'null'
        external_gift_card_details:
          $ref: '#/components/schemas/ExternalGiftCardDetails'
        external_gift_card_details_v2:
          type: array
          items:
            $ref: '#/components/schemas/ExternalGiftCardDetails'
          x-go-name: ExternalGiftCardDetailsV2
        fees_locked:
          type: boolean
          x-go-name: FeesLocked
        fees_total:
          type: integer
          format: uint64
          x-go-name: FeesTotal
        final_payment_due_days:
          type: integer
          format: int64
          x-go-name: FinalPaymentDueDays
        followup_archived:
          type: boolean
          x-go-name: FollowupArchived
        formatted:
          $ref: '#/components/schemas/BookingDisplayFormatted'
        formatted_total_overage_fee:
          type: string
          x-go-name: FormattedTotalOverageFee
        fraudulent:
          type: boolean
          x-go-name: Fraudulent
        free_cancellation_available:
          type: boolean
          x-go-name: FreeCancellationAvailable
        free_cancellation_period:
          type: integer
          format: int64
          x-go-name: FreeCancellationPeriod
        from:
          type: string
        from_time:
          type: integer
          format: int64
          x-go-name: FromTime
        fx_fee_paid:
          type: integer
          format: int64
          x-go-name: FXFeePaid
        generator:
          $ref: '#/components/schemas/BookingGenerator'
        generator_item:
          $ref: '#/components/schemas/BookingItem'
        generator_usage_item:
          x-go-name: GeneratorUsageItemJSON
        generator_usage_item_id:
          type: integer
          format: int64
        grace_period_ends_at:
          type: string
          x-go-name: GracePeriodEndsAt
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        handoff_summary:
          $ref: '#/components/schemas/BookingHandoff'
        has_approved_drivers:
          type: boolean
          x-go-name: HasApprovedDrivers
        has_setup_intent_enabled:
          type: boolean
          x-go-name: HasSetupIntentEnabled
        hold_sales_tax:
          type: boolean
          x-go-name: HoldSalesTax
        house_rules:
          type: string
          x-go-name: HouseRules
        id:
          type: integer
          format: int64
          x-go-name: ID
        import_id:
          type: string
          x-go-name: ImportID
        imported:
          description: owner only
          type: boolean
          x-go-name: Imported
        include_coachnet:
          type: boolean
          x-go-name: IncludeCoachnet
        infants:
          type: integer
          format: int64
          x-go-name: Infants
        initial_duration:
          type: integer
          format: uint64
          x-go-name: InitialDuration
        instamatch:
          type:
          - boolean
          - 'null'
        instant_book:
          type: boolean
          x-go-name: InstantBook
        insurance:
          type: string
          x-go-name: Insurance
        insurance_approved:
          type: boolean
          x-go-name: InsuranceApproved
        insurance_approved_timestamp:
          type: string
          x-go-name: InsuranceApprovedTimeStamp
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        insurance_approved_updated_timestamp:
          type: string
          x-go-name: InsuranceApprovedUpdateTimeStamp
          x-go-type: github.com/outdoorsy/api/clocks.RfcTime
        insurance_bundle:
          description: Using an interface{} to avoid import cycle and from having to move structs into the models package.
          x-go-name: BookingBundle
        insurance_claim_filed:
          type: boolean
          x-go-name: InsuranceClaimFiled
        insurance_coverage:
          type: string
          x-go-name: InsuranceCoverage
        insurance_plan_id:
          $ref: '#/components/schemas/Plan'
        insurance_renter_adjustable:
          type: boolean
          x-go-name: InsuranceRenterAdjustable
        internal_notes:
          type: string
          x-go-name: InternalNotes
        is_request_less_than_minimum_days:
          type: boolean
          x-go-name: IsRequestLessThanMinimumDays
        is_within_grace_period:
          type: boolean
          x-go-name: IsWithinGracePeriod
        items:
          description: Items, calculations, payouts 

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