---
title: "List comparable sales"
url: "https://real-estate-agency.apim.eu/apis/market-valuation/versions/3b18507e-d857-48a4-a3bc-b79b2eb2cfa4/operations/listComparables"
---

> Full API specification: https://real-estate-agency.apim.eu/apis/market-valuation/versions/3b18507e-d857-48a4-a3bc-b79b2eb2cfa4.md

# List comparable sales

`GET` `/comparables`

Operation ID: `listComparables`

Anonymized closed sales from the surrounding area. Addresses are rounded to the street level so no individual sale can be traced back.

## Query parameters

- `postal_code` (string, required)
- `type` (string, required)
- `living_area_sqm` (number, float, optional) - Reference size; matches are searched within a ±20 percent corridor.
- `period_months` (integer, optional)

## Responses

- `200` - Comparable sales
- `401` - Key is missing, revoked or invalid

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Market Valuation
  version: 1.0.0
servers:
  - url: https://api.realestateagency.example/v1
    description: Production
  - url: https://sandbox.api.realestateagency.example/v1
    description: Sandbox
paths:
  /comparables:
    get:
      tags:
        - Comparables
      summary: List comparable sales
      description: |
        Anonymized closed sales from the surrounding area. Addresses are
        rounded to the street level so no individual sale can be traced back.
      operationId: listComparables
      parameters:
        - name: postal_code
          in: query
          required: true
          schema:
            type: string
            example: "10001"
        - name: type
          in: query
          required: true
          schema:
            type: string
            enum:
              - apartment
              - house
              - land
              - commercial
        - name: living_area_sqm
          in: query
          description: Reference size; matches are searched within a ±20 percent corridor.
          schema:
            type: number
            format: float
            example: 86.5
        - name: period_months
          in: query
          schema:
            type: integer
            minimum: 3
            maximum: 36
            default: 12
      responses:
        "200":
          description: Comparable sales
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Comparable"
                  stats:
                    $ref: "#/components/schemas/Metrics"
        "401":
          $ref: "#/components/responses/NotAuthenticated"
security:
  - apiKey: []
components:
  schemas:
    Comparable:
      type: object
      properties:
        street_rounded:
          type: string
          example: Elm Street
        living_area_sqm:
          type: number
          format: float
          example: 82
        rooms:
          type: number
          format: float
          example: 3
        year_built:
          type: integer
          example: 1911
        sale_price_eur:
          type: integer
          example: 615000
        price_per_sqm_eur:
          type: integer
          example: 7500
        sale_month:
          type: string
          example: 2026-03
    Metrics:
      type: object
      properties:
        count:
          type: integer
          example: 23
        median_price_per_sqm_eur:
          type: integer
          example: 7410
        lower_quartile_price_per_sqm_eur:
          type: integer
          example: 6980
        upper_quartile_price_per_sqm_eur:
          type: integer
          example: 7860
    Error:
      type: object
      description: Uniform error format across all Real Estate Agency APIs.
      required:
        - code
        - message
      properties:
        code:
          type: string
          example: validation_failed
        message:
          type: string
          example: Too few comparable sales are available for this location.
        details:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    ErrorDetail:
      type: object
      properties:
        field:
          type: string
          example: basis.comparables_count
        reason:
          type: string
          example: missing
  responses:
    NotAuthenticated:
      description: Key is missing, revoked or invalid
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: apikey
      description: |
        Every call carries an API key in the `apikey` header. You generate the
        key in the Real Estate portal under "My Apps"; it's shown exactly once.

        Each key has the scopes it's allowed to use attached to it. If one is
        missing, the API responds with `403` and `code: "scope_missing"`; the
        missing scope is in `details[].field`.
```
