NAV Navbar
shell
  • Introduction
  • Staging & Development
  • Authentication
  • Rentals
  • Quotes & Bookings
  • Locales and Currencies
  • Errors
  • Introduction

    Welcome to the Outdoorsy partner API! You can use this API to search for available rentals, initiate booking requests and create new listings using your Partner API token.

    Staging & Development

    Before you can go live with your integration, you'll want to develop against our staging server to enable test bookings and search requests without requiring API Authentication. To leverage staging, you'll want to replace our production endpoints listed below with the following domains:

    For generating search and availability requests on staging, you'll want to leverage https://search.staging.outdoorsy.com instead of https://search.outdoorsy.com

    Bookings and Management

    For creating and managing bookings on staging, you'll want to leverage https://api.staging.outdoorsy.com instead of https://api.outdoorsy.com

    Authentication

    Outdoorsy users tokens to allow access to the API. You can request access by contacting us here.

    To authorize your requests, please pass the following header with all requests

    Make sure to replace your-partner-token with your token.

    Partner-ID: your-partner-token

    Rentals

    The Rental Object

    Attributes

    Attribute Type Description
    id Integer The identifier for the rental
    active_options Object This is an object of relevant booking settings based on provided dates in search
    name String The name of the vehicle, created by owner
    type String Vehicle type, such as a, b, c, trailer, folding-trailer
    description String Longform vehicle description, created by owner
    summary String Vehicle summary / highlights, created by owner
    vehicle_make String Vehicle make/manufacturer
    vehicle_model String Vehicle model
    vehicle_year Integer Year manufactured
    vehicle_length Integer Length of vehicle (Unit found in locale.length_unit)
    slug String Vehicle url path on Outdoorsy.com, useful for link redirects
    owner_user_id Integer ID for user that owns this rental
    dealer Boolean Is this vehicle owned by a Wheelbase dealer
    pro Boolean Is this vehicle owned by an Outdoorsy pro
    published Boolean Is this vehicle published, can it be rented
    hidden Boolean Is this vehicle accessible on external markets (Like Outdoorsy)
    features Object Object where keys are specific features, and values are indicators of if that feature exists for this rental
    sleeps integer How many people the vehicle sleeps
    seatbelts integer How many seatbelts the vehicle has
    sleeps_adults integer How many adults the vheicle sleeps
    sleeps_children integer How many children the vehicle sleeps
    delivery Boolean Does this vehicle offer delivery
    delivery_radius Integer how far will this vehicle deliver?
    delivery_radius_unit String What unit is used to calculate delivery radius
    images Array An array of Image Objects
    items Array An array of Item Objects
    position Integer Owner provided sort ranking for this rental
    score Integer 1-5 value indicating average rating from renters
    reviews_num Integer Count of how many reviews this specific rental has received
    group_reviews_score Integer 1-5 value indicating average rating for this group of vehicles for renters. Only valid if vehicle has children
    group_reviews_num Integer Count of how many reviews have been submitted for this group of vehicles
    favorite_count Integer Indicates how many renters have favorited this vehicle
    location Object Location object
    locale Object Locale object
    cancel_text String If custom cancelation policy, this explains terms
    house_rules String Indicates any additional rules from owner
    insurance_eligible Boolean Indicates if the vehicle qualifies for insurance coverage
    custom_insurance_text String If insurance is custom, displays insurance criteria
    security_deposit Integer Indicates how much this owner is charging for a security deposit, in cents
    use_day_pricing Boolean If true, vehicle is priced per day instead of per night
    coachnet_required Boolean Indicates if Roadside assistance is required
    coachnet_ready Boolean Indicates if a rental qualifies for roadside assistance
    instant_book Boolean Indicates if a rental can be reserved immediately without owner approval
    instant_book_leeway Integer If greater than 0, it means a listing can be reserved immediately up to x days before departure, then it must be owner approved
    pickup_unavailable Object Indicates if any days of the week are unavailable for pickup
    dropoff_unavailable Object Indicates if any days of the week are unavailable for dropoff
    children_count Integer Indicates how many vehicles are in this group, 0 bound
    mileage_usage_item Object Mileage Item - indicates charges for mileage driven
    generator_usage_item Object Generator Item - indicates charges for generator usage

    Active Options Object

    Attribute Type Description
    date Date Date used to calculate active options
    day_price Integer Price per night/day for the vehicle, in cents
    week_price Integer Price for a week rental, in cents
    month_price Integer Price for a month rental, in cents
    cancel_policy String Cancelation policy for this date range
    minimum_days Integer Minimum booking length during selected date raneg
    use_day_pricing Boolean Indicates if charges are per day or per night for this date range
    use_tax_inclusive_pricing Boolean Indicates if prices include taxes
    instant_book Boolean Indicates if this rental can be reserved without owner approval

    Mileage / Generator Item Object

    Attribute Type Description
    id Integer Identifier for item
    name String Name of charge
    unit String Unit of fee, mile, kilometer or hour
    included Integer How many units are included in a booking
    unlimited Boolean If true, then unlimited units are included
    tax_rate_id Integer What tax rate item is used to calculate taxes for this item
    tiers Array Array of tiers used to calculate charges - not often used directly by users

    Location Object

    Attribute Type Description
    city String City where this vehicle resides
    state String State where this vehicle resides
    county String County where this vehicle resides
    country String Country where this vehicle resides
    zip String Zip code for this vehicle
    lat Double Latitude of vehicle
    lng Double Longitude of vehicle

    Locale Object

    Attribute Type Description
    base_currency String Currency the vehicle was listed in, useful for determining if a currency conversion is being performed
    distance_unit String miles or kilometers
    weight_unit String Indicates unit to display for weight features, kg or lbs
    length_unit String Indicates unit to display for length features, meter or feet
    liquid_unit String Indicates unit to display for liquid features, gallons or liters

    Image Object

    Attribute Type Description
    id Integer The identifier for the image
    rental_id Integer The rental the image belongs to
    primary Boolean Indicates if this image is the vehicles primary image
    position Integer Sortable field to indicate owners prefered image order
    tags String Location tag for the image
    description String Owner provided description of the image
    skip_enhance Boolean Indicates if the owner opted to remove image enhancements on this image
    video Boolean If true, then url is a youtube or vimeo video link
    url String URL for the image or video asset
    best Boolean Internal image quality score for this listing

    Working with images

    By default, image URLs are full resolution, which is very rarely something you'd want to leverage in production. You have access to the following image manipulations to speed up render times and resolve image rotation issues.

    To render optimized images, you'll want to perform a string replace with the following. replace {{FORMAT_OPTIONS}} with a selection from the table below:

    imageUrl.replace('/outdoorsy/image/upload', '/outdoorsy/image/upload/{{FORMAT_OPTIONS}}')
    
    Format String Description
    a_exif,q_auto,f_auto,w_auto,h_300,w_300,c_fill 300x300 image thumbnail
    a_exif,q_auto,f_auto,w_auto,h_300,w_450,c_fill 300x450 image - useful for search result pages
    a_exif,q_auto,f_auto,w_auto,h_600,w_900,c_fill 600x900 image - useful for larger images on listing pages

    Add-on / Item Object

    Attribute Type Description
    id Integer The identifier for the add-on
    rental_id Integer The rental the add-on belongs to
    name String Owner provided name of this add-on
    description String Owner provided description for this add-on
    required Boolean Indicates if this add-on is required for a booking
    daily Boolean If true, then the add-on price is charged per day instead of per trip

    Search Rentals

    curl "https://search.outdoorsy.com/rentals"
      -H "Partner-ID: your-partner-token"
    

    Rentals can be filtered by the following features:

    "features": {
      "air_conditioner": false,
      "audio_inputs": false,
      "awning": false,
      "backup_camera": false,
      "beds_full": 1,
      "beds_king": 1,
      "beds_queen": 1,
      "beds_twin": 1,
      "bike_rack": false,
      "burning_man_friendly": true,
      "cd_player": false,
      "ceiling_fan": false,
      "dining_table": true,
      "extra_storage": false,
      "fuel_tank": 0,
      "fuel_type": "false",
      "generator": false,
      "gray_tank": 0,
      "handicap_accessible": false,
      "heater": true,
      "hitch_weight": 0,
      "hot_water_tank": false,
      "inside_shower": false,
      "inverter": false,
      "kitchen_sink": true,
      "leveling_jacks": false,
      "microwave": true,
      "minimum_age": 0,
      "mpg": 0,
      "one_way_rentals": true,
      "outside_shower": true,
      "oven": false,
      "pet_friendly": false,
      "propane_tank": 0,
      "radio": false,
      "refrigerator": true,
      "satellite": false,
      "sewage_tank": 0,
      "skylight": true,
      "slide_outs": 0,
      "smoking_allowed": false,
      "solar": false,
      "stove": true,
      "tailgate_friendly": true,
      "toilet": true,
      "tow_hitch": false,
      "trailer_weight": 0,
      "transmission": false,
      "tv_dvd": false,
      "washer_dryer": false,
      "water_tank": 0,
      "wifi": false
    }
    

    The above command returns JSON structured like this:

    {
      "data": [{
        "id": "1916",
        "type": "rentals",
        "attributes": {
          "active_options": {
            "cancel_policy": "flexible",
            "date": "2019-01-29",
            "instant_book": false,
            "minimum_days": 0,
            "price_per_day": 10000,
            "price_per_month": 0,
            "price_per_week": 0,
            "use_day_pricing": false
          },
          "availability_set": true,
          "cancel_policy": "flexible",
          "cancel_text": "",
          "children_count": 0,
          "coachnet_ready": false,
          "coachnet_required": false,
          "created": "2015-07-15T20:48:16.584649Z",
          "current_location_id": 0,
          "dealer": false,
          "deposit_percentage": 0,
          "description": "...",
          "favorite_count": 33,
          "features": { ... },
          "generator_usage_item_id": 7479,
          "group_on_map": false,
          "group_reviews_num": 0,
          "group_reviews_score": 0,
          "hidden": false,
          "house_rules": "",
          "instant_book": false,
          "instant_book_leeway": 0,
          "insurance_coverage": "",
          "insurance_eligible": false,
          "insurance_plan": {
            "comprehensive_coverage": true,
            "comprehensive_maximum": "$75,000",
            "id": 2,
            "label": "Outdoorsy Motorhome No Liability",
            "liability_maximum": "$0",
            "owner_comprehensive_deductible": "$0",
            "owner_liability_deductible": "$0",
            "renter_comprehensive_deductible": "$1,500",
            "renter_liability_deductible": "$0",
            "requires_driver_verification": true
          },
          "insurance_renter_adjustable": false,
          "insurance_state": "",
          "last_published": "2017-08-16T07:29:03.478138Z",
          "location": {
            "city": "Broomfield",
            "country": "US",
            "county": "",
            "lat": 39.934,
            "lng": -105.105,
            "state": "CO",
            "zip": "80020"
          },
          "low_price_per_day": 0,
          "low_price_per_month": 0,
          "low_price_per_week": 0,
          "mileage_usage_item_id": 7480,
          "minimum_days": 0,
          "minimum_deposit": 0,
          "name": "91 Vansion",
          "original_url": "",
          "parent_id": 0,
          "position": 0,
          "price_per_day": 10000,
          "price_per_month": 0,
          "price_per_week": 0,
          "pro": false,
          "published": true,
          "reviews_num": 0,
          "score": 0,
          "seatbelts": 0,
          "security_deposit": 100000,
          "sleeps": 3,
          "sleeps_adults": 0,
          "sleeps_kids": 0,
          "slug": "/rv-rental/broomfield_co/1991_ford_econoline_1916-listing",
          "sort": 0.0974074074074074,
          "tags": [],
          "type": "b",
          "updated": "2018-01-30T06:07:34.269714Z",
          "use_day_pricing": false,
          "user_slug": "ryan",
          "vehicle_class": "",
          "vehicle_length": 19,
          "vehicle_make": "Ford",
          "vehicle_model": "Econoline",
          "vehicle_year": 1991
        },
        "relationships": {
          "generator_usage_item": {
            "data": {
              "id": "7479",
              "type": "usage_based_item"
            }
          },
          "images": {
            "data": [
              {
                "id": "25342",
                "type": "images"
              }, ...
            ]
          },
          "mileage_usage_item": {
            "data": {
              "id": "7480",
              "type": "usage_based_item"
            }
          },
          "owner": {
            "data": {
              "id": "3",
              "type": "users"
            }
          },
          "primary_image": {
            "data": {
              "id": "25342",
              "type": "images"
            }
          }
        }
      }],
      "included": [
        {
          "id": "25342",
          "type": "images",
          "attributes": {
            "description": "",
            "position": 0,
            "primary": true,
            "rental_id": 1916,
            "skip_enhance": false,
            "tags": "",
            "url": "https://res.cloudinary.com/outdoorsy/image/upload/v1444694359/p/rentals/1916/images/sqreusdqos4tphvjhynn.jpg",
            "video": false
          }
        }, ...
      ]
    }
    

    This endpoint lets you search for rentals

    HTTP Request

    GET https://search.outdoorsy.com/rentals

    Filter Parameters

    Parameter Type Description
    owner_id CSV Limit results to a specific owner, useful for creating sites for a specific user
    location_ids CSV Limit results to a specific location, must be used with an owner_id filter
    filter[keywords] CSV Filter results by comma seperated keywords. filter[keywords]=airstream,mercedes sprinter,westfalia
    filter[type] CSV Filter results by comma seperated vehicle types, filter[type]=a,b,c,camper-van
    filter[exclude_type] CSV Exclude results by comma seperated vehicle types, filter[exclude_type]=a,b,c,camper-van
    filter[style] string Filter results by drive vs tow, filter[style]=drive
    filter[feature] CSV Filter results by included features, available features can be to the right
    filter[vehicle_make] CSV Filter by specific vehicle makes. keyword search is often better for this
    fitler[vehicle_model] CSV Filter by specific vehicle models. keyword search is often better for this
    filter[owner_type] String dealer to include only professionally owned results
    price[min] Integer Min price for rentals, in cents. price[min]=10000 for $100 min
    price[max] Integer Max price for rentals, in cents. price[max]=20000 for $200 max
    date[from] YYYY-MM-DD Return only rentals available over specific dates, also returns accurate pricing for those dates date[from]=YYYY-MM-DD
    date[to] YYYY-MM-DD Return only rentals available over specific dates, also returns accurate pricing for those dates date[to]=YYYY-MM-DD
    page[limit] Integer How many results to return in a single query (Max 100)
    page[offset] Integer Offset to filter rentals by, useful for pagination
    sleeps Integer Filter rentals by how many travelers the vehicle sleeps
    sleeps[adults] Integer Filter by how many adults a rental sleeps
    sleeps[kids] Integer Filter by how many kids a rental sleeps
    sort String Defaults to Outdoorsy's recommended search, but can take -price and price
    length[lte] Integer Return rentals less than or equal to a given length
    length[gte] Integer Return rentals larger than or equal to a given length
    exclude CSV Filter out specific rentals, useful for showing similar rentals on a rental display page exclude=1916,3
    ids CSV Return specific rentals only
    instant_book Bool Instantly bookable rentals only
    hidden Bool Defaults to false, if true we'll return hidden rentals as well (users who don't wish to be featured on external platforms)
    locale String Defaults to en-us, allows you to request additional languages
    currency String Defaults to the listings home currency, we currently support usd, cad, eur, gbp
    include_unavailable Bool Return unavailable units as well
    full_description Bool Return full rental descriptions. Otherwise you get a shortened version
    raw_json Bool when true, json-format api is converted to more traditional json

    Location Parameters

    The following parameters are used to locate rentals nearest your users - You can use any combination of them, not all are necessary.

    Parameter Type Description
    recommended Bool If true, we'll locate rentals nearest your user using GeoIP Lookups
    near String lat,lng for your request
    bounds[ne] String lat,lng for the northeast bounds, must include ne and sw bounds if you want bounds querying
    bounds[sw] String lat,lng for the northeast bounds, must include ne and sw bounds if you want bounds querying
    address String If included, we'll geocode the string and base results on your query. address=Denver, CO
    radius Integer How much of a radius in miles to include in your query, default to radius=50
    auto_radius Bool If true, we'll continue expanding the radius until your page[limit] is reached

    Filtering by features

    Features are treated as Booleans for rentals. To filter results to only those which include specific features, you would pass in the parameters listed above with a list of features you wish to include.

    filter[feature]=wifi,air_conditioner would return units including both wifi and an air conditioner.

    Include Parameters

    Because the search api leverages JSON-API spec, you have the ability to include relations in your query as well.

    Relationship Description
    images Included by default, all search queries include images
    users If included, we'll return owner data as well include=users
    reviews If included, we'll return reviews as well include=reviews

    You also have the ability to include multiple relationships, example: include=users,reviews

    Working with images

    By default, image URLs are full resolution, which is very rarely something you'd want to leverage in production. You have access to the following image manipulations to speed up render times and resolve image rotation issues.

    To render optimized images, you'll want to perform a string replace with the following. replace {{FORMAT_OPTIONS}} with a selection from the table below:

    imageUrl.replace('/outdoorsy/image/upload', '/outdoorsy/image/upload/{{FORMAT_OPTIONS}}')

    Format String Description
    a_exif,q_auto,f_auto,w_auto,h_300,w_300,c_fill 300x300 image thumbnail
    a_exif,q_auto,f_auto,w_auto,h_300,w_450,c_fill 300x450 image - useful for search result pages
    a_exif,q_auto,f_auto,w_auto,h_600,w_900,c_fill 600x900 image - useful for larger images on listing pages

    Response Headers

    Parameter Type Description
    Total-Results Integer How many results were found matching your query
    Min-Price Integer Minimum price that matches your query in cents
    Max-Price Integer Maximum price that matches your query in cents

    Linking to Outdoorsy listings

    If you're building a search integration, but want to leverage Outdoorsy landing pages for each listing/checkout, then you'll want to levarage deep linking abilities. You can get a partner ID by emailing partners@outdoorsy.co. You can learn more on the deep linking guide, but the basic idea is that you'll construct a link with the following format:

    https://redirect.outdoorsy.com?odc_partner={{PARTNER_ID}}&odc_url={{DESTINATION}}&odc_locale={{LOCALE}}
    

    Get a Specific Rental

    curl "https://search.outdoorsy.com/rentals/1916"
      -H "Partner-ID: your-api-token"
    

    The above command returns JSON structured like this:

    {
      "data": {
        "id": "1916",
        "type": "rentals",
        "attributes": {
          "active_options": {
            "cancel_policy": "flexible",
            "date": "2019-01-29",
            "instant_book": false,
            "minimum_days": 0,
            "price_per_day": 10000,
            "price_per_month": 0,
            "price_per_week": 0,
            "use_day_pricing": false
          },
          "availability_set": true,
          "cancel_policy": "flexible",
          "cancel_text": "",
          "children_count": 0,
          "coachnet_ready": false,
          "coachnet_required": false,
          "created": "2015-07-15T20:48:16.584649Z",
          "current_location_id": 0,
          "dealer": false,
          "deposit_percentage": 0,
          "description": "...",
          "favorite_count": 33,
          "features": { ... },
          "generator_usage_item_id": 7479,
          "group_on_map": false,
          "group_reviews_num": 0,
          "group_reviews_score": 0,
          "hidden": false,
          "house_rules": "",
          "instant_book": false,
          "instant_book_leeway": 0,
          "insurance_coverage": "",
          "insurance_eligible": false,
          "insurance_plan": {
            "comprehensive_coverage": true,
            "comprehensive_maximum": "$75,000",
            "id": 2,
            "label": "Outdoorsy Motorhome No Liability",
            "liability_maximum": "$0",
            "owner_comprehensive_deductible": "$0",
            "owner_liability_deductible": "$0",
            "renter_comprehensive_deductible": "$1,500",
            "renter_liability_deductible": "$0",
            "requires_driver_verification": true
          },
          "insurance_renter_adjustable": false,
          "insurance_state": "",
          "last_published": "2017-08-16T07:29:03.478138Z",
          "location": {
            "city": "Broomfield",
            "country": "US",
            "county": "",
            "lat": 39.934,
            "lng": -105.105,
            "state": "CO",
            "zip": "80020"
          },
          "low_price_per_day": 0,
          "low_price_per_month": 0,
          "low_price_per_week": 0,
          "mileage_usage_item_id": 7480,
          "minimum_days": 0,
          "minimum_deposit": 0,
          "name": "91 Vansion",
          "original_url": "",
          "parent_id": 0,
          "position": 0,
          "price_per_day": 10000,
          "price_per_month": 0,
          "price_per_week": 0,
          "pro": false,
          "published": true,
          "reviews_num": 0,
          "score": 0,
          "seatbelts": 0,
          "security_deposit": 100000,
          "sleeps": 3,
          "sleeps_adults": 0,
          "sleeps_kids": 0,
          "slug": "/rv-rental/broomfield_co/1991_ford_econoline_1916-listing",
          "sort": 0.0974074074074074,
          "tags": [],
          "type": "b",
          "updated": "2018-01-30T06:07:34.269714Z",
          "use_day_pricing": false,
          "user_slug": "ryan",
          "vehicle_class": "",
          "vehicle_length": 19,
          "vehicle_make": "Ford",
          "vehicle_model": "Econoline",
          "vehicle_year": 1991
        },
        "relationships": {
          "generator_usage_item": {
            "data": {
              "id": "7479",
              "type": "usage_based_item"
            }
          },
          "images": {
            "data": [
              {
                "id": "25342",
                "type": "images"
              }, ...
            ]
          },
          "mileage_usage_item": {
            "data": {
              "id": "7480",
              "type": "usage_based_item"
            }
          },
          "owner": {
            "data": {
              "id": "3",
              "type": "users"
            }
          },
          "primary_image": {
            "data": {
              "id": "25342",
              "type": "images"
            }
          }
        }
      },
      "included": [
        {
          "id": "4797",
          "type": "breadcrumbs",
          "attributes": {
            "admin_level1_name": "Colorado",
            "admin_level1_slug": "rv-rental/colorado",
            "admin_level2_name": "Broomfield County",
            "admin_level2_slug": "rv-rental/colorado/broomfield-county",
            "locality_name": "Broomfield",
            "locality_slug": "rv-rental/colorado/broomfield"
          }
        },
        {
          "id": "3",
          "type": "users",
          "attributes": {
            "avatar_url": "https://res.cloudinary.com/outdoorsy/image/upload/v1444695094/p/users/3/images/fyxneiexjsce8dqi5axr.jpg",
            "business_description": "",
            "business_name": "Ryan's Rentals",
            "business_phone": "303-819-9941",
            "business_website": "https://www.outdoorsy.co/ryan",
            "cancel_policy": "flexible",
            "dealer": false,
            "description": "Grew up in a 31' class C Winnebago, now traveling full time with my wife in a 19' Coachmen van.",
            "experience": "5",
            "first_name": "Ryan",
            "guest": false,
            "last_name": "Quinn",
            "logo_url": "",
            "mast_image_url": "https://res.cloudinary.com/outdoorsy/image/upload/v1452757275/p/users/3/images/zj8bbfrfbijaxqffpwyg.jpg",
            "owner_reviews_count": 0,
            "owner_score": 0,
            "pro": false,
            "reviews_count": 0,
            "score": 0,
            "slug": "ryan",
            "social": [
              {
                "count": 0,
                "link": "http://www.rvillage.com/profile/mazondo",
                "rating": 0,
                "site": "RVillage"
              },
              {
                "count": 0,
                "link": "https://www.twitter.com/mazondo",
                "rating": 0,
                "site": "Twitter"
              }
            ],
            "time_to_first_action": 441006,
            "total_bookings": 95,
            "years_owned": 2,
            "years_r_ving": 0
          }
        },
        {
          "id": "25342",
          "type": "images",
          "attributes": {
            "description": "",
            "position": 0,
            "primary": true,
            "rental_id": 1916,
            "skip_enhance": false,
            "tags": "",
            "url": "https://res.cloudinary.com/outdoorsy/image/upload/v1444694359/p/rentals/1916/images/sqreusdqos4tphvjhynn.jpg",
            "video": false
          }
        }, ...
      ]
    }
    

    This endpoint retrieves a specific rental.

    HTTP Request

    GET https://search.outdoorsy.com/rentals/<ID>

    URL Parameters

    Parameter Description
    ID The ID of the rental to retrieve

    Get Rental Availability

    curl "https://api.outdoorsy.com/v0/availability"
      -H "Partner-ID: your-partner-token"
    

    The above command returns JSON structured like this:

    [{
      "rental_id":6948,
      "from":"2018-01-01",
      "to":"2018-02-28",
      "next_available":"2018-03-01"
    }, ... ]
    

    This endpoint returns the unavailable dates for a specific rental or all of a user's rentals.

    HTTP Request

    GET https://api.outdoorsy.com/v0/availability

    URL Parameters

    Parameter Type Description
    from YYYY-MM-DD The date to start querying from for availability
    to YYYY-MM-DD The date to end querying to for availability
    rental_id Integer The rental ID to fetch availability for
    owner_id Integer The owner ID to fetch availability for, returns all rentals for this owner

    Get Rental Add-Ons

    curl 'https://api.outdoorsy.com/v0/items?available_for_rental_id=6973'
      -H "Partner-ID: your-partner-token"
    

    The above command returns JSON structured like this:

    [
       {
          "available":0,
          "category_id":0,
          "daily":false,
          "deferred":true,
          "description":"Add-on description goes here",
          "hidden":false,
          "id":35291,
          "image_url":"https://res.cloudinary.com/outdoorsy/image/upload/v1518818658/p/add-ons/addon/images/jzkrtlanbwfxqh2xlbz7.jpg",
          "name":"Cleaning Supply Kit",
          "position":0,
          "price":10000,
          "required":true,
          "tax_rate_id":null,
          "travelers":3,
          "user_id":17075
       }, ...
    ]
    

    This endpoint returns optional and required add-ons for a given rental.

    HTTP Request

    GET https://api.outdoorsy.com/v0/items

    URL Parameters

    Parameter Type Description
    available_for_rental_id Integer rental_id you want to pull add-ons for

    Get Locations

    curl 'https://api.outdoorsy.com/v0/locations?owner_id={{OWNER_ID}}'
    

    The above command returns JSON structured like this:

    [
      {
        "id": 1, // this ID is useful for location filtering
        "name": "Your location", // a name for the location set by the user
        "availability": { /* Weekday availability for a location*/},
        "street": "1234 Somestreet Lane",
        "city": "Denver",
        "state": "CO",
        "zip": "80023",
        "country": "US",
        "owner_id": 1,
      },
      { /* ... */}
    ]
    

    Professional accounts have the ability to define multiple business locations for their rentals. In these cases, it can be useful to pull a list of locations for future filtering.

    HTTP Request

    GET https://api.outdoorsy.com/v0/locations?owner_id={{OWNER_ID}}

    URL Parameters

    Parameter Description
    owner_id The ID of the user you want locations for

    Quotes & Bookings

    Quotes can be generated as often as needed for any rental, the endpoint returns full pricing including insurance options, required add-ons, and taxes for any date range up to 2 years out. Once you're ready, you can create a booking request to initiate a booking for a user.

    Get a Quote

    curl 'https://api.outdoorsy.com/v0/quotes'
      -H "Partner-ID: your-partner-token"
      --data-binary '{"rental_id":"1916","from":"2018-03-14","to":"2018-03-22","items":[]}'
    

    The above command returns JSON structured like this:

    {
       "calculated_day_price":10000,
       "discount_code":"",
       "discount_code_amount":0,
       "discount_code_applied_to":"",
       "discount_code_message":"",
       "duration":8,
       "final_payment_amount":60000,
       "final_payment_due_date":"2018-02-28",
       "items":[
          {
             "count":1,
             "daily":false,
             "deferred":false,
             "description":"",
             "generator":false,
             "id":0,
             "image_url":"",
             "mileage":false,
             "name":"Rental Amount",
             "price":80000,
             "rental_amount":true,
             "required":false,
             "tax_amount":0,
             "tax_name":"",
             "total":80000
          }
       ],
       "outdoorsy_fee":0,
       "renter_credits_applied":0,
       "reserve_amount":32000,
       "security_deposit":100000,
       "service_fee":12000,
       "subtotal":80000,
       "tax":0,
       "total":92000,
       "use_day_price":false
    }
    

    This endpoint returns an accurate quote for any specific rental

    HTTP Request

    POST https://api.outdoorsy.com/v0/quotes

    Body Parameters

    Parameter Type Description
    from YYYY-MM-DD The date to start querying from for availability
    to YYYY-MM-DD The date to end querying to for availability
    rental_id Integer The rental ID to fetch availability for
    items Array Array of optional add-on ids to include with your quote

    Create a Booking Request

    curl 'https://api.outdoorsy.com/v0/bookings'
      -H "Partner-ID: your-partner-token"
      -X POST
      --data-binary '{"status":"negotiating","from":"2018-04-10","to":"2018-04-17","travelers":4,"message":"Your message here","rental_id":id,"renter":{"first_name":"John","last_name":"Smith","email":"test-email@test.com","phone":null},"items":[]}}'
    

    The above command returns JSON structured like this:

    {
      "id": 1
       ... full booking object
    }
    

    This endpoint returns a full booking object, which can be used to redirect the user to complete the checkout process.

    Once you've created the booking, you'll redirect the user to:

    https://www.outdoorsy.com/dashboard/checkout/{{ID}}?token={{Anon-Token}}&user_id={{Anon-User-Id}}

    HTTP Request

    POST https://api.outdoorsy.com/v0/bookings

    Body Parameters

    Parameter Type Description
    from YYYY-MM-DD The date to start querying from for availability
    to YYYY-MM-DD The date to end querying to for availability
    rental_id Integer The rental ID to fetch availability for
    items Array Array of optional add-on ids to include with your quote, example: items: [{id: 1, count: 2}]
    renter Object Renter information renter: {first_name: "Name", last_name: "Name", email: "email@email.com", phone: "333-333-3333"}
    message String A message the renter would like to include to the owner, useful for things like where they're going
    status String should always be negotiating
    travelers Integer how many travelers will be on the trip

    Response Headers

    Parameter Type Description
    Anon-Token String User ID used to continue checkout process
    Anon-User-Id String User ID used to continue checkout process
    X-Ppp-Token String Payment token used for storing card information

    Adding items to a Booking Request

    curl 'https://api.staging.outdoorsy.com/v0/bookings/{{ID}}/items/copy'
      -H "Partner-ID: your-partner-token"
      -X POST
      --data-binary '{"rental_item_id": {{ITEM_ID}}, "count": 1}'
    

    The above command returns an item JSON structure

    {
       "booking_id":933900,
       "count":2,
       "daily":false,
       "deferred":false,
       "description":"Item description goes here",
       "generator":false,
       "id":1839808,
       "image_url":"image-url",
       "mileage":false,
       "name":"Mobile Internet (while driving)",
       "original_tax_rate_id":0,
       "parent_item_id":39442,
       "premium_amount":0,
       "price":1500,
       "rental_amount":false,
       "required":false,
       "tax_amount":0,
       "tax_description":"",
       "tax_name":"",
       "tax_rate":0,
       "tax_rates":[],
       "total":3000
    }
    

    This endpoint takes an existing item from the Items for rental endpoint and lets you copy them into an existing booking.

    HTTP Request

    POST https://api.staging.outdoorsy.com/v0/bookings/{{ID}}/items/copy

    Body Parameters

    Parameter Type Description
    rental_item_id Integer Item ID for an existing rental addon, you get these using the rental items endpoint
    count Integer How many of the add-on to add

    Editing a Booking Request

    curl 'https://api.outdoorsy.com/v0/bookings'
      -H "Partner-ID: your-partner-token"
      -X POST
      --data-binary '{"status":"negotiating","from":"2018-04-10","to":"2018-04-17","travelers":4,"message":"Your message here","rental_id":id,"renter":{"first_name":"John","last_name":"Smith","email":"test-email@test.com","phone":null},"items":[]}}'
    

    The above command returns JSON structured like this:

    {
      "id": 1
       ... full booking object
    }
    

    This endpoint requires an authentication token for the user who owns the booking, or an admin. returns a full booking object.

    HTTP Request

    PATCH https://api.outdoorsy.com/v0/bookings/{{ID}}

    Body Parameters

    Parameter Type Description
    from YYYY-MM-DD The date to start querying from for availability
    to YYYY-MM-DD The date to end querying to for availability
    rental_id Integer The rental ID to fetch availability for
    items Array Array of optional add-on ids to include with your quote, example: items: [{id: 1, count: 2}]
    renter Object Renter information renter: {first_name: "Name", last_name: "Name", email: "email@email.com", phone: "333-333-3333"}
    message String A message the renter would like to include to the owner, useful for things like where they're going
    status String should always be negotiating
    travelers Integer how many travelers will be on the trip

    Response Headers

    Parameter Type Description
    X-Ppp-Token String Payment token used for storing card information

    Paying for a Booking

    Example request body

    {
      "status": "approved",
      "details": "Looking forward to the trip!",
      "save_card_token": "asdf",
      "rental_charge": {
        "card_token": ""
      },
      "security_deposit_charge": {
        "card_token": ""
      }
    }
    

    Outdoorsy leverages Stripe for payment processing. When creating or updating a booking, you'll receive a public Stripe token as part of the header response. You can use that token to pass payment information into our system.

    1. Create a booking/quote to retrieve the Stripe Public Key for your partner account
    2. Follow the Stripe documentation listed here to create 2-3 Card tokens for the users card
    3. Hit the Status endpoint with the relevant tokens for your payment information

    The endpoint will return a full booking object in response. If the booking has been pre-approved by an owner, or is an instantbookable listing, then the status should be returned as approved or imminent if the booking is scheduled to depart within 2 days. If the rental is not instant bookable, then the status will be negotiating and the renter_approved field will be true.

    HTTP Request

    PATCH https://api.outdoorsy.com/v0/bookings/{{id}}/status

    Body Parameters

    Parameter Type Description
    status String approved is the most common, see statuses for more info
    details String A message you want to include to the owner of the vehicle being rented
    save_card_token String required Card token used to pay for the booking, including payments before departure
    rental_charge Object Charge Object (see below)
    security_deposit_charge Object Charge Object (see below)

    Charge Object

    Charge objects allow you to specify a payment method other than the users default method for a specific charge. For example, if you want to charge a different card for a reservation deposit and a security deposit.

    Parameter Type Description
    card_token String Stripe token for the card

    Cancelling a booking

    Withdrawing a rental request that hasn't been approved

    {
      "status": "renter_withdrew",
      "details": "Can't make it!"
    }
    

    Canceling an approved booking

    {
      "status": "renter_cancelled",
      "details": "Can't make it!"
    }
    

    HTTP Request

    PATCH https://api.outdoorsy.com/v0/bookings/{{id}}/status

    Body Parameters

    Parameter Type Description
    status String renter_withdrew or renter_cancelled
    details String A message you want to include to the owner of the vehicle being cancelled

    Booking statuses

    During the lifecycle of a booking, it will pass through several states, here's a quick overview of the more common ones.

    HTTP Request

    PATCH https://api.outdoorsy.com/v0/bookings/{{id}}/status

    Body Parameters

    Status Description
    draft Quote has been created by the owner, but not yet sent to the renter
    negotiating Quote has been seen by both parties, but not yet approved by both, you can use the owner_accepted and renter_accepted fields to get a more detailed view
    approved The booking has been approved
    imminent The booking is approved and will depart within 2 days
    handed_off The booking is currently on vacation
    returned The booking has completed
    renter_withdrew The renter has withdrawn their request prior to approval
    renter_cancelled The renter has cancelled after their initial deposit has been paid
    owner_declined The owner has rejected a request from the renter
    owner_cancelled The owner has cancelled a request after the initial deposit has been paid

    Locales and Currencies

    There are several API params that support locales and currencies - the following is a list of possible values supported by the platform.

    Code Locale
    en-us English - United States
    en-gb English - United Kingdom
    en-ca English - Canada
    en-au English - Australia
    en-nz English - New Zealand
    fr-fr French - France
    fr-ca French - Canada
    es-es Spanish - Spain
    de-de German - Germany
    it-it Italian - Italy
    Code Currency
    usd US Dollar
    gbp British Pounds
    cad Canadian Dollar
    eur Euro
    aud Australian Dollar
    nzd New Zealand Dollars

    Errors

    Error Code Meaning
    400 Bad Request -- Your request is invalid.
    401 Unauthorized -- Your API key is wrong.
    403 Forbidden -- The endpoint requested is hidden for administrators only.
    404 Not Found -- The specified endpoint could not be found.
    406 Not Acceptable -- You requested a format that isn't json.
    500 Internal Server Error -- We had a problem with our server. Try again later.
    503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.