---
title: "List properties"
url: "https://real-estate-agency.apim.eu/apis/property-management/versions/0192f0a1-654d-4abd-aa88-6716d49df69f/operations/listProperties"
---

> Full API specification: https://real-estate-agency.apim.eu/apis/property-management/versions/0192f0a1-654d-4abd-aa88-6716d49df69f.md

# List properties

`GET` `/properties`

Operation ID: `listProperties`

## Query parameters

- `status` (string, optional)
- `type` (string, optional)
- `postal_code` (string, optional) - Filter by postal code.
- `limit` (integer, optional)
- `cursor` (string, optional)

## Responses

- `200` - Results list
- `401` - Key is missing, revoked or invalid
- `429` - Rate limit reached

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Property Management
  version: 1.0.0
servers:
  - url: https://api.realestateagency.example/v1
    description: Production
  - url: https://sandbox.api.realestateagency.example/v1
    description: Sandbox
paths:
  /properties:
    get:
      tags:
        - Properties
      summary: List properties
      operationId: listProperties
      parameters:
        - name: status
          in: query
          schema:
            $ref: "#/components/schemas/PropertyStatus"
        - name: type
          in: query
          schema:
            $ref: "#/components/schemas/PropertyType"
        - name: postal_code
          in: query
          description: Filter by postal code.
          schema:
            type: string
            example: "10001"
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: cursor
          in: query
          schema:
            type: string
      responses:
        "200":
          description: Results list
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Property"
                  page:
                    $ref: "#/components/schemas/Page"
        "401":
          $ref: "#/components/responses/NotAuthenticated"
        "429":
          $ref: "#/components/responses/TooManyRequests"
security:
  - apiKey: []
components:
  schemas:
    PropertyStatus:
      type: string
      enum:
        - draft
        - active
        - reserved
        - sold
        - rented
        - archived
      example: active
    PropertyType:
      type: string
      enum:
        - apartment
        - house
        - land
        - commercial
        - parking
      example: apartment
    Property:
      allOf:
        - $ref: "#/components/schemas/PropertyInput"
        - type: object
          properties:
            id:
              type: string
              example: prop_8f2c1a
            status:
              $ref: "#/components/schemas/PropertyStatus"
            media_count:
              type: integer
              example: 14
            created_at:
              type: string
              format: date-time
              example: 2026-08-14T08:12:44Z
            updated_at:
              type: string
              format: date-time
              example: 2026-08-20T09:38:02Z
    Page:
      type: object
      description: Cursor-based pagination.
      properties:
        count:
          type: integer
          example: 25
        total:
          type: integer
          example: 138
        next_cursor:
          type: string
          nullable: true
          example: eyJzIjoyNX0
    PropertyInput:
      type: object
      required:
        - type
        - title
        - address
      properties:
        type:
          $ref: "#/components/schemas/PropertyType"
        title:
          type: string
          maxLength: 120
          example: 3-Bedroom Period Home near Riverside Park
        description:
          type: string
          example: Well-maintained period apartment on the second floor with two
            south-facing balconies.
        address:
          $ref: "#/components/schemas/Address"
        living_area_sqm:
          type: number
          format: float
          example: 86.5
        lot_size_sqm:
          type: number
          format: float
          example: 412
        rooms:
          type: number
          format: float
          example: 3
        year_built:
          type: integer
          example: 1908
        floor:
          type: integer
          example: 2
        purchase_price_eur:
          type: integer
          example: 645000
        cold_rent_eur:
          type: integer
          example: 1450
        service_charges_eur:
          type: integer
          example: 280
        available_from:
          type: string
          format: date
          example: 2026-11-01
        energy_certificate:
          $ref: "#/components/schemas/EnergyCertificate"
        commission:
          $ref: "#/components/schemas/Commission"
    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: Mandatory disclosures from the energy certificate are missing for
            publication.
        details:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    Address:
      type: object
      required:
        - postal_code
        - city
      properties:
        street:
          type: string
          example: 148 Elm Street
        postal_code:
          type: string
          pattern: ^[0-9]{5}$
          example: "10001"
        city:
          type: string
          example: Springfield
        country:
          type: string
          default: US
        location_precision:
          type: string
          description: Controls how precisely the address appears in the listing.
          enum:
            - exact
            - street
            - neighborhood
          default: street
    EnergyCertificate:
      type: object
      description: Figures needed to publish a listing.
      properties:
        type:
          type: string
          enum:
            - consumption
            - demand
        final_energy_demand_kwh:
          type: number
          format: float
          example: 118.4
        energy_source:
          type: string
          example: district_heating
        system_year:
          type: integer
          example: 1998
        efficiency_class:
          type: string
          enum:
            - A+
            - A
            - B
            - C
            - D
            - E
            - F
            - G
            - H
        valid_until:
          type: string
          format: date
          example: 2031-04-30
        exemption:
          type: string
          description: Set when no certificate is legally required.
          enum:
            - heritage_protection
            - small_building
    Commission:
      type: object
      properties:
        buyer_percent:
          type: number
          format: float
          example: 3.57
        seller_percent:
          type: number
          format: float
          example: 3.57
        note:
          type: string
          example: includes applicable sales tax
    ErrorDetail:
      type: object
      properties:
        field:
          type: string
          example: energy_certificate.final_energy_demand_kwh
        reason:
          type: string
          example: missing
  responses:
    NotAuthenticated:
      description: Key is missing, revoked or invalid
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    TooManyRequests:
      description: Rate limit reached
      headers:
        Retry-After:
          schema:
            type: integer
            example: 12
      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`.
```
