AirDNA Market Data API
Market and submarket discovery, metrics, and future pricing.
Market and submarket discovery, metrics, and future pricing.
openapi: 3.0.1
info:
title: AirDNA Enterprise Market Data 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.
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'
components:
schemas:
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'
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
PageInfo:
type: object
properties:
page_size:
type: integer
offset:
type: integer
Status:
type: object
properties:
type:
type: string
description: success or error.
response_id:
type: string
message:
type: string
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).
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.
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'
Pagination:
type: object
properties:
page_size:
type: integer
offset:
type: integer
ResponseEnvelope:
type: object
properties:
payload:
type: object
description: Endpoint-specific data object.
status:
$ref: '#/components/schemas/Status'
parameters:
MarketId:
name: marketId
in: path
required: true
schema:
type: string
description: Unique identifier of the market.
CountryCode:
name: countryCode
in: path
required: true
schema:
type: string
description: ISO country code.
SubmarketId:
name: submarketId
in: path
required: true
schema:
type: string
description: Unique identifier of the submarket.
responses:
Unauthorized:
description: Missing or invalid Bearer token.
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseEnvelope'
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.'