ATTOM Sales API

Recorded sale, deed, sales history, and sales trend data.

OpenAPI Specification

attom-data-sales-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: ATTOM Area Sales API
  description: 'The ATTOM API (delivered as ATTOM Cloud) provides REST access to ATTOM Data Solutions'' national warehouse of property, real estate, and location data covering 158+ million U.S. properties. Resources are queried by address, APN + FIPS, ATTOM ID, radius around coordinates, or geoIdV4, and cover property characteristics, tax assessments, automated valuations (AVM), sales and deed history, mortgage records, area and boundary geographies, schools, community/neighborhood data, points of interest, transportation noise, consolidated all-event history, and home equity.

    Every request requires an API key passed in the `apikey` header. The URI pattern for the classic Property API is `{base}/propertyapi/v1.0.0/{resource}/{package}?{query}`; version 4 (v4) endpoints drop the component name and use a simplified `{base}/v4/{resource}` form. Area geography endpoints live under `areaapi/v2.0.0`.

    Endpoints under `propertyapi/v1.0.0` (property, assessment, avm, sale, saleshistory, salestrend, school, allevents, valuation) are grounded in ATTOM''s published endpoint reference. The v4 community, POI, area/boundary, and transportation-noise operations are modeled from ATTOM''s documented resource groups; confirm exact query parameters against the live docs.'
  version: 1.0.0
  contact:
    name: ATTOM Data Solutions
    url: https://www.attomdata.com
  x-logo:
    url: https://kinlane-images.s3.amazonaws.com/shared/apis-json/apis-json-logo.jpg
servers:
- url: https://api.gateway.attomdata.com
  description: ATTOM API gateway (production)
security:
- apiKeyAuth: []
tags:
- name: Sales
  description: Recorded sale, deed, sales history, and sales trend data.
paths:
  /propertyapi/v1.0.0/sale/detail:
    get:
      operationId: getSaleDetail
      tags:
      - Sales
      summary: Sale detail
      description: Recorded sale transaction detail for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/sale/snapshot:
    get:
      operationId: getSaleSnapshot
      tags:
      - Sales
      summary: Sale snapshot
      description: Sale transactions for properties in an area over a date range.
      parameters:
      - $ref: '#/components/parameters/PostalCode'
      - $ref: '#/components/parameters/StartSaleSearchDate'
      - $ref: '#/components/parameters/EndSaleSearchDate'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/detail:
    get:
      operationId: getSalesHistoryDetail
      tags:
      - Sales
      summary: Sales history detail
      description: Up to ~10 years of recorded sales history for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/basichistory:
    get:
      operationId: getSalesHistoryBasic
      tags:
      - Sales
      summary: Sales history (basic)
      description: Essential sales history records for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/expandedhistory:
    get:
      operationId: getSalesHistoryExpanded
      tags:
      - Sales
      summary: Sales history (expanded)
      description: Extended sales history records, including transaction and mortgage context, for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/transaction/salestrend:
    get:
      operationId: getSalesTrend
      tags:
      - Sales
      summary: Sales trend
      description: Aggregated average/median sale prices and transaction counts for an area over an interval (up to two years).
      parameters:
      - $ref: '#/components/parameters/GeoIdV4'
      - $ref: '#/components/parameters/Interval'
      - $ref: '#/components/parameters/StartYear'
      - $ref: '#/components/parameters/EndYear'
      responses:
        '200':
          $ref: '#/components/responses/AreaResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    Interval:
      name: interval
      in: query
      schema:
        type: string
        enum:
        - monthly
        - quarterly
        - yearly
      description: Aggregation interval for trend data.
    PostalCode:
      name: postalcode
      in: query
      schema:
        type: string
      description: 5-digit ZIP / postal code to scope the search.
    EndYear:
      name: endyear
      in: query
      schema:
        type: integer
      description: Last year of the trend window.
    EndSaleSearchDate:
      name: endSaleSearchDate
      in: query
      schema:
        type: string
        format: date
      description: End of the sale date range (YYYY-MM-DD).
    Address2:
      name: address2
      in: query
      schema:
        type: string
      description: Second line of the address (city, state).
    StartYear:
      name: startyear
      in: query
      schema:
        type: integer
      description: First year of the trend window.
    Address1:
      name: address1
      in: query
      schema:
        type: string
      description: First line of the street address (house number and street).
    AttomId:
      name: attomid
      in: query
      schema:
        type: string
      description: ATTOM-assigned property identifier.
    GeoIdV4:
      name: geoIdV4
      in: query
      schema:
        type: string
      description: 32-character geoIdV4 area identifier (required by v4-and-above endpoints).
    StartSaleSearchDate:
      name: startSaleSearchDate
      in: query
      schema:
        type: string
        format: date
      description: Start of the sale date range (YYYY-MM-DD).
  responses:
    PropertyResponse:
      description: A status envelope plus an array of property records.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PropertyResponse'
    AreaResponse:
      description: A status envelope plus an array of area, school, community, or POI records.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GenericResponse'
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StatusEnvelope'
  schemas:
    GenericResponse:
      type: object
      description: Generic envelope for area, school, community, POI, and boundary responses.
      properties:
        status:
          $ref: '#/components/schemas/Status'
      additionalProperties: true
    Property:
      type: object
      description: A property record. ATTOM returns a rich, package-dependent object; key groups are summarized here.
      properties:
        identifier:
          type: object
          properties:
            obPropId:
              type: string
            attomId:
              type: integer
            fips:
              type: string
            apn:
              type: string
        address:
          type: object
          properties:
            line1:
              type: string
            line2:
              type: string
            locality:
              type: string
            countrySubd:
              type: string
            postal1:
              type: string
        location:
          type: object
          properties:
            latitude:
              type: string
            longitude:
              type: string
            geoIdV4:
              type: object
              additionalProperties:
                type: string
        summary:
          type: object
          additionalProperties: true
        building:
          type: object
          additionalProperties: true
        assessment:
          type: object
          additionalProperties: true
        avm:
          type: object
          additionalProperties: true
        sale:
          type: object
          additionalProperties: true
        mortgage:
          type: object
          additionalProperties: true
        owner:
          type: object
          additionalProperties: true
    Status:
      type: object
      description: The status block returned on every ATTOM response.
      properties:
        version:
          type: string
        code:
          type: integer
        msg:
          type: string
        total:
          type: integer
        page:
          type: integer
        pagesize:
          type: integer
    PropertyResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/Status'
        property:
          type: array
          items:
            $ref: '#/components/schemas/Property'
    StatusEnvelope:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/Status'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: 'Your unique ATTOM API key, assigned by ATTOM and passed in the `apikey` request header. Also send `Accept: application/json` (or application/xml).'