AirDNA Market Data API

Market and submarket discovery, metrics, and future pricing.

OpenAPI Specification

airdna-market-data-api-openapi.yml Raw ↑
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.'