AirDNA STR Listing Data API
Short-term rental listing search, details, history, and comps.
Short-term rental listing search, details, history, and comps.
openapi: 3.0.1
info:
title: AirDNA Enterprise Market Data STR Listing 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: STR Listing Data
description: Short-term rental listing search, details, history, and comps.
paths:
/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'
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'
ListingSearchRequest:
type: object
properties:
search_term:
type: string
pagination:
$ref: '#/components/schemas/Pagination'
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.
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.
ListingId:
name: listingId
in: path
required: true
schema:
type: string
description: Unique identifier of the listing.
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.'