AirDNA Rentalizer Estimates
Rentalizer revenue estimates that project how an address could perform as a short-term rental over the next twelve months, with detailed single-address, bulk multi-address, and summarized lead-gen estimate endpoints.
Rentalizer revenue estimates that project how an address could perform as a short-term rental over the next twelve months, with detailed single-address, bulk multi-address, and summarized lead-gen estimate endpoints.
openapi: 3.0.1
info:
title: AirDNA Enterprise API
description: >-
The AirDNA Enterprise API exposes short-term rental market analytics and
individual property data for Airbnb and Vrbo. It is organized into Market
Data, Property Valuations & Comps (STR listing data and Rentalizer),
Rentalizer Lead Gen, and Smart Rates Data. All requests are authenticated
with a Bearer token obtained from AirDNA sales.
termsOfService: https://www.airdna.co/terms-of-service
contact:
name: AirDNA API Support
email: api@airdna.co
version: 2.0.0
servers:
- url: https://api.airdna.co/api/enterprise/v2
security:
- bearerAuth: []
tags:
- name: Market Data
description: Market and submarket discovery, metrics, and future pricing.
- name: STR Listing Data
description: Short-term rental listing search, details, history, and comps.
- name: Rentalizer
description: Revenue estimates for individual and bulk addresses.
- name: Rentalizer Lead Gen
description: Summarized performance estimates for lead generation.
- name: Smart Rates
description: Pricing strategy base rates and smart rates for listings.
paths:
/market/search:
post:
operationId: searchMarkets
tags:
- Market Data
summary: Search for markets or submarkets by term or coordinates.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MarketSearchRequest'
responses:
'200':
description: Matching markets and submarkets.
content:
application/json:
schema:
$ref: '#/components/schemas/MarketSearchResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}:
get:
operationId: getMarket
tags:
- Market Data
summary: Fetch details for a specific market.
parameters:
- $ref: '#/components/parameters/MarketId'
responses:
'200':
description: Market details.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/country/{countryCode}/markets:
post:
operationId: exploreCountryMarkets
tags:
- Market Data
summary: Explore markets within a country.
parameters:
- $ref: '#/components/parameters/CountryCode'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Markets within the country.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/occupancy:
post:
operationId: getMarketOccupancy
tags:
- Market Data
summary: Occupancy metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Occupancy metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/revenue:
post:
operationId: getMarketRevenue
tags:
- Market Data
summary: Average revenue metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Revenue metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/adr:
post:
operationId: getMarketAdr
tags:
- Market Data
summary: Average daily rate (ADR) metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: ADR metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/revpar:
post:
operationId: getMarketRevpar
tags:
- Market Data
summary: RevPAR metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: RevPAR metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/booking-lead-time:
post:
operationId: getMarketBookingLeadTime
tags:
- Market Data
summary: Booking lead time metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Booking lead time metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/length-of-stay:
post:
operationId: getMarketLengthOfStay
tags:
- Market Data
summary: Average length of stay metrics for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Length of stay metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/metrics/active-listings:
post:
operationId: getMarketActiveListings
tags:
- Market Data
summary: Active listings count for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Active listings metrics time series.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/pricing/future:
post:
operationId: getMarketFuturePricing
tags:
- Market Data
summary: Future daily pricing data for a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Future daily pricing.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/submarket/{submarketId}:
get:
operationId: getSubmarket
tags:
- Market Data
summary: Fetch details for a specific submarket.
parameters:
- $ref: '#/components/parameters/SubmarketId'
responses:
'200':
description: Submarket details.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/submarkets:
post:
operationId: exploreMarketSubmarkets
tags:
- Market Data
summary: Explore submarkets within a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Submarkets within the market.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listing/search:
post:
operationId: searchListings
tags:
- STR Listing Data
summary: Search listings by term or coordinates.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ListingSearchRequest'
responses:
'200':
description: Matching listings.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/market/{marketId}/listings:
post:
operationId: exploreMarketListings
tags:
- STR Listing Data
summary: Explore listings within a market.
parameters:
- $ref: '#/components/parameters/MarketId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Listings within the market.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listings/radius:
post:
operationId: exploreListingsRadius
tags:
- STR Listing Data
summary: Explore listings within a radius of coordinates.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Listings within the radius.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listing/{listingId}:
get:
operationId: getListing
tags:
- STR Listing Data
summary: Fetch details for a specific listing.
parameters:
- $ref: '#/components/parameters/ListingId'
responses:
'200':
description: Listing details.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listings/details:
post:
operationId: getListingsDetails
tags:
- STR Listing Data
summary: Fetch details for multiple listings.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
listing_ids:
type: array
items:
type: string
responses:
'200':
description: Details for the requested listings.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listing/{listingId}/metrics/historical:
post:
operationId: getListingHistoricalMetrics
tags:
- STR Listing Data
summary: Historical performance metrics for a listing.
parameters:
- $ref: '#/components/parameters/ListingId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/MetricsRequest'
responses:
'200':
description: Historical listing metrics.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listing/{listingId}/comps:
post:
operationId: getListingComps
tags:
- STR Listing Data
summary: Fetch comparable listings (comp set) for a listing.
parameters:
- $ref: '#/components/parameters/ListingId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Comparable listings for the given listing.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/listing/{listingId}/pricing/future:
post:
operationId: getListingFuturePricing
tags:
- STR Listing Data
summary: Future pricing for a listing.
parameters:
- $ref: '#/components/parameters/ListingId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Future pricing for the listing.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/rentalizer/individual:
post:
operationId: rentalizerIndividual
tags:
- Rentalizer
summary: Detailed Rentalizer performance estimate for a single address.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RentalizerRequest'
responses:
'200':
description: Rentalizer estimate for the address.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/rentalizer/bulk:
post:
operationId: rentalizerBulk
tags:
- Rentalizer
summary: Summarized Rentalizer estimates for multiple addresses.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addresses:
type: array
items:
$ref: '#/components/schemas/Address'
responses:
'200':
description: Summarized Rentalizer estimates.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/rentalizer-lead-gen/summary:
post:
operationId: rentalizerLeadGenSummary
tags:
- Rentalizer Lead Gen
summary: Summarized performance estimate for lead generation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RentalizerRequest'
responses:
'200':
description: Summarized lead-gen performance estimate.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
/smart-rates/{listingId}:
get:
operationId: getSmartRatesBase
tags:
- Smart Rates
summary: Fetch pricing strategy base rates for a listing.
parameters:
- $ref: '#/components/parameters/ListingId'
responses:
'200':
description: Base rates for the listing.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: getSmartRates
tags:
- Smart Rates
summary: Fetch smart rates for a listing.
parameters:
- $ref: '#/components/parameters/ListingId'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Smart rates for the listing.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Bearer token supplied in the Authorization header
(Authorization: Bearer {API_KEY}). API keys are obtained from AirDNA
sales at api@airdna.co.
parameters:
MarketId:
name: marketId
in: path
required: true
schema:
type: string
description: Unique identifier of the market.
SubmarketId:
name: submarketId
in: path
required: true
schema:
type: string
description: Unique identifier of the submarket.
ListingId:
name: listingId
in: path
required: true
schema:
type: string
description: Unique identifier of the listing.
CountryCode:
name: countryCode
in: path
required: true
schema:
type: string
description: ISO country code.
responses:
Unauthorized:
description: Missing or invalid Bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
schemas:
Pagination:
type: object
properties:
page_size:
type: integer
offset:
type: integer
PageInfo:
type: object
properties:
page_size:
type: integer
offset:
type: integer
Filter:
type: object
description: Filter object applied to explore/metrics queries.
properties:
field:
type: string
description: Attribute name to filter on.
type:
type: string
enum:
- select
- multi_select
- gt
- gte
- lt
- lte
- range
- jsonb_boolean
- jsonb_array
value:
description: Filter value (string, number, boolean, or array).
Status:
type: object
properties:
type:
type: string
description: success or error.
response_id:
type: string
message:
type: string
ResponseEnvelope:
type: object
properties:
payload:
type: object
description: Endpoint-specific data object.
status:
$ref: '#/components/schemas/Status'
MarketSearchRequest:
type: object
properties:
search_term:
type: string
pagination:
$ref: '#/components/schemas/Pagination'
MarketSearchResult:
type: object
properties:
id:
type: string
name:
type: string
type:
type: string
description: Market type (neighborhood, city, etc.).
listing_count:
type: integer
location_name:
type: string
location:
type: object
legacy_location:
type: object
MarketSearchResponse:
type: object
properties:
payload:
type: object
properties:
page_info:
$ref: '#/components/schemas/PageInfo'
results:
type: array
items:
$ref: '#/components/schemas/MarketSearchResult'
status:
$ref: '#/components/schemas/Status'
ListingSearchRequest:
type: object
properties:
search_term:
type: string
pagination:
$ref: '#/components/schemas/Pagination'
ExploreRequest:
type: object
properties:
pagination:
$ref: '#/components/schemas/Pagination'
filters:
type: array
items:
$ref: '#/components/schemas/Filter'
currency:
type: string
description: ISO 4217 currency code (default USD).
sort_order:
type: string
bounding_box:
type: object
description: Geographic bounding box for spatial filtering.
MetricsRequest:
type: object
properties:
num_months:
type: integer
minimum: 12
maximum: 60
description: Number of months of metrics to return (12-60).
currency:
type: string
description: ISO 4217 currency code (default USD).
filters:
type: array
items:
$ref: '#/components/schemas/Filter'
Address:
type: object
properties:
address:
type: string
bedrooms:
type: integer
bathrooms:
type: number
accommodates:
type: integer
RentalizerRequest:
type: object
properties:
address:
type: string
bedrooms:
type: integer
bathrooms:
type: number
accommodates:
type: integer
currency:
type: string
description: ISO 4217 currency code (default USD).