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).