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