Outdoorsy Bookings API
The Bookings API from Outdoorsy — 9 operation(s) for bookings.
The Bookings API from Outdoorsy — 9 operation(s) for bookings.
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 Bookings API
version: 0.0.1
servers:
- url: /v0
security:
- Bearer:
- '[]'
- API-Key:
- '[]'
tags:
- name: Bookings
paths:
/bookings/soonest:
get:
description: Get the current trip or an upcoming trip or returned trip that are within 14 days
operationId: bookings
responses:
'200':
$ref: '#/components/responses/getSoonestResponse'
'401':
$ref: '#/components/responses/unauthorizedError'
tags:
- Bookings
/bookings:
get:
description: Read many bookings
tags:
- Bookings
operationId: listBookings
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
- name: FromLT
in: query
schema:
type: string
- name: FromGT
in: query
schema:
type: string
- name: ToLT
in: query
schema:
type: string
- name: ToGT
in: query
schema:
type: string
- name: UpdatedLT
in: query
schema:
type: string
- name: UpdatedGT
in: query
schema:
type: string
- name: CreatedLT
in: query
schema:
type: string
- name: CreatedGT
in: query
schema:
type: string
- name: BookedLT
in: query
schema:
type: string
- name: BookedGT
in: query
schema:
type: string
- x-go-name: CSVToken
name: csv-token
in: query
schema:
type: string
- x-go-name: Blocking
name: blocking
in: query
schema:
type: boolean
- x-go-name: Calendar
name: calendar
in: query
schema:
type: boolean
- x-go-name: OwnerID
name: owner_id
in: query
schema:
type: integer
format: int64
- x-go-name: RentalID
name: rental_id
in: query
schema:
type: integer
format: int64
- x-go-name: RentalIDsRaw
name: rental_ids
in: query
schema:
type: string
- x-go-name: IncludeCoachnet
name: include_coachnet
in: query
schema:
type: boolean
- x-go-name: CSV
name: csv
in: query
schema:
type: boolean
- x-go-name: FullObject
name: full_object
in: query
schema:
type: boolean
- x-go-name: IncludeChildren
name: include_children
in: query
schema:
type: boolean
- x-go-name: RenterID
name: renter_id
in: query
schema:
type: integer
format: int64
- x-go-name: Dealer
name: dealer
in: query
schema:
type: boolean
- x-go-name: Instamatch
name: instamatch
in: query
schema:
type: boolean
- x-go-name: HasConsignedPayout
name: has_consigned_payout
in: query
schema:
type: boolean
- x-go-name: ReturnedLT
name: returned_lt
in: query
schema:
type: string
- x-go-name: ReturnedGT
name: returned_gt
in: query
schema:
type: string
- x-go-name: Abandoned
name: abandoned
in: query
schema:
type: boolean
- x-go-name: IncludeAbandoned
name: include_abandoned
in: query
schema:
type: boolean
- x-go-name: Status
name: status
in: query
schema:
type: string
- x-go-name: Order
name: order
in: query
schema:
type: string
- x-go-name: Archived
name: archived
in: query
schema:
type: boolean
- x-go-name: NeedsReview
name: needs_review
in: query
schema:
type: boolean
- x-go-name: Refunded
name: refunded
in: query
schema:
type: boolean
- x-go-name: New
name: new
in: query
schema:
type: boolean
- x-go-name: CoachnetIDSet
name: coachnet_id_set
in: query
schema:
type: boolean
- x-go-name: ForUserID
name: for_user_id
in: query
schema:
type: integer
format: int64
- x-go-name: IDs
name: ids
in: query
schema:
type: string
- x-go-name: LocationIDs
name: location_ids
in: query
schema:
type: string
- x-go-name: IncludeShared
name: include_shared
in: query
schema:
type: boolean
- x-go-name: SharedOnly
name: shared
in: query
schema:
type: boolean
- x-go-name: Filter
name: filter
in: query
schema:
type: string
- x-go-name: Role
name: role
in: query
schema:
type: string
- x-go-name: HandoffFilter
name: handoff_filter
in: query
schema:
type: string
- x-go-name: IncludeQuoteMetadata
name: include_quote_metadata
in: query
schema:
type: boolean
- x-go-name: DeliverableCampground
name: deliverable_campground
in: query
schema:
type: boolean
- x-go-name: RentalCategory
name: rental_category
in: query
schema:
type: string
- x-go-name: Source
name: source
in: query
schema:
type: string
responses:
'200':
$ref: '#/components/responses/listBookingsResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
post:
description: Creates a booking
tags:
- Bookings
operationId: createBooking
responses:
'201':
$ref: '#/components/responses/getBookingResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BookingRequest'
/bookings/stage:
get:
description: Read Many By Stage
tags:
- Bookings
operationId: readManyByStageRequest
parameters:
- x-go-name: Archived
name: archived
in: query
schema:
type: boolean
- x-go-name: StageFilter
name: filter
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: Search
name: search
in: query
schema:
type: string
- x-go-name: OrderBy
name: order_by
in: query
schema:
type: string
- x-go-name: CreatedGT
name: created_gt
in: query
schema:
type: string
- x-go-name: CreatedLT
name: created_lt
in: query
schema:
type: string
- x-go-name: FromGT
name: from_gt
in: query
schema:
type: string
- x-go-name: FromLT
name: from_lt
in: query
schema:
type: string
- x-go-name: IncludeItems
name: include_items
in: query
schema:
type: boolean
- x-go-name: IncludePassengers
name: include_passengers
in: query
schema:
type: boolean
- x-go-name: Statuses
name: statuses
in: query
schema:
type: string
- x-go-name: LocationsRaw
name: location_ids
in: query
schema:
type: string
- x-go-name: ExcludeAbandoned
name: exclude_abandoned
in: query
schema:
type: boolean
responses:
'200':
$ref: '#/components/responses/readManyByStageResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
/bookings/{booking_id}/calculate-delivery:
post:
description: Calculate estimated delivery for booking
tags:
- Bookings
operationId: estimatedDeliveryRequest
responses:
'200':
$ref: '#/components/responses/estimatedDeliveryResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DeliveryEstimatedRequest'
/bookings/{booking_id}/collect-post-trip-charges:
post:
description: Collect post-trip charges for booking
tags:
- Bookings
operationId: collectBookingPostTripCharges
parameters:
- x-go-name: BookingID
name: booking_id
in: path
required: true
schema:
type: integer
format: int64
responses:
'201':
$ref: '#/components/responses/transactionsResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CollectPostTripChargesRequest'
/bookings/{id}:
get:
description: Read one booking
tags:
- Bookings
operationId: getBookingById
parameters:
- x-go-name: ID
name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/getBookingResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
delete:
tags:
- Bookings
summary: Archives the booking which hides it from view.
operationId: deleteBookingById
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'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
patch:
description: 'Certain changes are only allowed while the booking is in the negotiating state.
Dealers, owners, renters and admins all have different access level on what can be changed.
This often results in a recalculation of the booking total.'
tags:
- Bookings
summary: Updates the booking with requested changes.
operationId: updateBooking
parameters:
- x-go-name: ID
name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/getBookingResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BookingUpdateRequest'
/bookings/{id}/cancellation-details:
get:
description: Returns the cancellation details for the requested booking
tags:
- Bookings
operationId: getBookingCancellationDetails
parameters:
- x-go-name: ID
name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/bookingCancelDetailsResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
/bookings/{id}/collect-overage-fee:
post:
description: Collect booking overage fee
tags:
- Bookings
operationId: collectBookingOverageFee
parameters:
- x-go-name: ID
name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/transactionsResponse'
'400':
$ref: '#/components/responses/badRequestError'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CollectOverageFeeRequest'
/bookings/{id}/status:
patch:
description: 'Examples:
negotiating -> approved
approved -> handed_off
handed_off -> returned
approved -> renter_cancelled/owner_cancelled'
tags:
- Bookings
summary: Progresses the status of the booking to the requested state.
operationId: bookingChangeStatus
parameters:
- x-go-name: ID
name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
$ref: '#/components/responses/bookingResponse'
'401':
$ref: '#/components/responses/unauthorizedError'
'404':
$ref: '#/components/responses/notFoundError'
default:
$ref: '#/components/responses/genericError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/StatusChangeRequest'
components:
responses:
notFoundError:
description: Not found error
readManyByStageResponse:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/BookingsStageWithMeta'
listBookingsResponse:
description: HTTP status code 200 and array of rental models
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Booking'
getSoonestResponse:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/GetSoonestResponse'
bookingCancelDetailsResponse:
description: ''
headers:
allow_user_refund_method:
description: return numbers for display but user may not be allowed to choose
schema:
type: boolean
booking_total:
schema:
type: integer
format: uint64
cancel_policy:
schema:
type: string
cancellation_penalty_info: {}
charges:
schema:
type: array
items:
$ref: '#/components/schemas/MinRenterCharge'
from: {}
hide_refund_amounts:
schema:
type: boolean
id:
schema:
type: integer
format: int64
presentment_currency:
schema:
type: string
refund_options: {}
rental_summary: {}
service_fee:
schema:
type: integer
format: uint64
sibling_booking_group_id: {}
sibling_rental_summaries: {}
to: {}
total_cash_charges:
schema:
type: integer
format: int64
total_charges:
schema:
type: integer
format: int64
total_credit_charges:
schema:
type: integer
format: int64
content:
application/json:
schema:
$ref: '#/components/schemas/CancellationPenaltyInfoV2'
noContentResponse:
description: Everything went as planned
genericError:
description: An unknown, unexpected error.
getBookingResponse:
description: HTTP status code 200 and rental model
content:
application/json:
schema:
$ref: '#/components/schemas/Booking'
unauthorizedError:
description: Unauthorized error
badRequestError:
description: Invalid input or state means you're bad
headers:
Error:
schema:
type: string
estimatedDeliveryResponse:
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/DeliveryEstimatedResponse'
transactionsResponse:
description: ''
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Transaction'
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
PaypalChargeDetailsDetails:
type: object
properties:
billingAddress:
$ref: '#/components/schemas/PaypalAddress'
countryCode:
type: string
x-go-name: CountryCode
email:
type: string
x-go-name: Email
firstName:
type: string
x-go-name: FirstName
lastName:
type: string
x-go-name: LastName
payerId:
type: string
x-go-name: PayerID
phone:
type: string
x-go-name: Phone
shippingAddress:
$ref: '#/components/schemas/PaypalAddress'
x-go-package: github.com/outdoorsy/api/libs/payment
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:
# --- truncated at 32 KB (197 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/outdoorsy/refs/heads/main/openapi/outdoorsy-bookings-api-openapi.yml