Mashvisor Search API

City, neighborhood, and listing search

OpenAPI Specification

mashvisor-search-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Mashvisor Data Investment Analysis Search API
  description: 'The Mashvisor Data API provides real estate investment analytics for the US housing market: short-term (Airbnb) and long-term (traditional) rental performance, MLS listings and property records, neighborhood and city analytics, rental-rate estimates, investment ROI breakdowns, and market trends. All endpoints are read-only (GET) and authenticated with an `x-api-key` header. Responses are JSON. Captured by the API Evangelist enrichment pipeline from the public documentation at https://www.mashvisor.com/api-doc-v2 (no OpenAPI is published by the vendor).'
  version: v1.1
  contact:
    name: Mashvisor API Support
    url: https://www.mashvisor.com/api-doc-v2
  x-apievangelist-source: https://www.mashvisor.com/api-doc-v2
  x-apievangelist-method: searched
servers:
- url: https://api.mashvisor.com/v1.1
  description: Production
security:
- apiKey: []
tags:
- name: Search
  description: City, neighborhood, and listing search
paths:
  /client/city/list:
    get:
      operationId: listCities
      summary: List cities in a state
      description: Returns the list of cities Mashvisor covers within a given state.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/stateQuery'
      responses:
        '200':
          description: List of cities
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/metadata/validate-city:
    get:
      operationId: validateCity
      summary: Validate a city
      description: Validates that a given state/city pair is covered by Mashvisor.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/stateQuery'
      - name: city
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Validation result
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/city/neighborhoods/{state}/{city}:
    get:
      operationId: listCityNeighborhoods
      summary: List neighborhoods in a city
      description: Returns the neighborhoods within a given state and city.
      tags:
      - Search
      parameters:
      - name: state
        in: path
        required: true
        schema:
          type: string
      - name: city
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: List of neighborhoods
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/city/top-markets:
    get:
      operationId: listTopMarkets
      summary: List top markets in a state
      description: Returns the top-performing markets within a given state.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/stateQuery'
      responses:
        '200':
          description: Top markets
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/city/investment/{state}/{city}:
    get:
      operationId: getCityInvestment
      summary: Get city investment performance
      description: Returns investment performance metrics for a given city.
      tags:
      - Search
      parameters:
      - name: state
        in: path
        required: true
        schema:
          type: string
      - name: city
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: City investment performance
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/city/properties/{state}/{city}:
    get:
      operationId: listCityProperties
      summary: List properties in a city
      description: Returns properties within a given state and city.
      tags:
      - Search
      parameters:
      - name: state
        in: path
        required: true
        schema:
          type: string
      - name: city
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: City properties
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/city/listings:
    get:
      operationId: listCityListings
      summary: List active listings in a city
      description: Returns active MLS listings for a city or zip code within a state.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/stateQuery'
      - name: city
        in: query
        required: false
        schema:
          type: string
      - name: zip_code
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: City listings
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/trends/neighborhoods:
    get:
      operationId: listNeighborhoodTrends
      summary: List neighborhood trends
      description: Returns trend data for neighborhoods within a given city.
      tags:
      - Search
      parameters:
      - $ref: '#/components/parameters/stateQuery'
      - name: city
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Neighborhood trends
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/neighborhood/{id}/bar:
    get:
      operationId: getNeighborhoodBar
      summary: Get neighborhood historical bar data
      description: Returns historical performance bar data for a neighborhood.
      tags:
      - Search
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/stateQuery'
      responses:
        '200':
          description: Neighborhood bar data
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
  /client/neighborhood/{id}/schools:
    get:
      operationId: getNeighborhoodSchools
      summary: Get neighborhood schools
      description: Returns schools within a neighborhood.
      tags:
      - Search
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      - $ref: '#/components/parameters/stateQuery'
      responses:
        '200':
          description: Neighborhood schools
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  responses:
    NotFound:
      description: Not Found -- The specified resource could not be found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Too Many Requests -- You're sending too many requests, slow down.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized -- Your API key is wrong.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Internal Server Error -- We had a problem with our server.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad Request -- Your request is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    stateQuery:
      name: state
      in: query
      required: true
      description: Two-letter US state code (e.g. CA). Required; API returns 404 if omitted.
      schema:
        type: string
  schemas:
    Error:
      type: object
      description: Standard JSON error envelope returned on 4xx/5xx responses.
      properties:
        status:
          type: string
          example: error
        code:
          type: integer
          example: 404
        message:
          type: string
          example: Not Found -- The specified property could not be found.
      required:
      - status
      - code
      - message
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Include your secret API key in the `x-api-key` header on every request. Obtain a key by registering for a developer account at mashvisor.com.