---
title: "List listings"
url: "https://real-estate-agency.apim.eu/apis/listing-creation/versions/ccce93aa-5880-49f4-849d-af24517f6c76/operations/listListings"
---

> Full API specification: https://real-estate-agency.apim.eu/apis/listing-creation/versions/ccce93aa-5880-49f4-849d-af24517f6c76.md

# List listings

`GET` `/listings`

Operation ID: `listListings`

Returns the agency's listings, optionally filtered by property and status.

## Query parameters

- `property_id` (string, optional) - Only listings for this property.
- `status` (string, optional)
- `limit` (integer, optional)
- `cursor` (string, optional) - Cursor from `page.next_cursor` of the previous response.

## Responses

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

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Listing Creation
  version: 1.0.0
servers:
  - url: https://api.realestateagency.example/v1
    description: Production
  - url: https://sandbox.api.realestateagency.example/v1
    description: Sandbox - data is reset nightly
paths:
  /listings:
    get:
      tags:
        - Listings
      summary: List listings
      description: Returns the agency's listings, optionally filtered by property and
        status.
      operationId: listListings
      parameters:
        - name: property_id
          in: query
          description: Only listings for this property.
          schema:
            type: string
            example: prop_8f2c1a
        - name: status
          in: query
          schema:
            $ref: "#/components/schemas/ListingStatus"
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: cursor
          in: query
          description: Cursor from `page.next_cursor` of the previous response.
          schema:
            type: string
      responses:
        "200":
          description: Results list
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/Listing"
                  page:
                    $ref: "#/components/schemas/Page"
        "401":
          $ref: "#/components/responses/NotAuthenticated"
        "429":
          $ref: "#/components/responses/TooManyRequests"
security:
  - apiKey: []
components:
  schemas:
    ListingStatus:
      type: string
      description: Lifecycle of a listing.
      enum:
        - in_progress
        - completed
        - published
        - withdrawn
        - failed
      example: completed
    Listing:
      type: object
      properties:
        id:
          type: string
          example: lst_4d9b2e
        property_id:
          type: string
          example: prop_8f2c1a
        template_id:
          type: string
          example: tpl_classic
        language:
          type: string
          example: en
        status:
          $ref: "#/components/schemas/ListingStatus"
        pdf_url:
          type: string
          format: uri
          description: "Only set once `status: completed`. The link is valid for 24 hours."
          example: https://api.realestateagency.example/v1/listings/lst_4d9b2e/pdf
        pages:
          type: integer
          description: Page count of the generated document.
          example: 6
        disclosures:
          $ref: "#/components/schemas/DisclosureReport"
        created_at:
          type: string
          format: date-time
          example: 2026-08-20T09:41:12Z
        completed_at:
          type: string
          format: date-time
          nullable: true
          example: 2026-08-20T09:41:20Z
    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
    DisclosureReport:
      type: object
      description: Result of the mandatory-disclosure check.
      properties:
        complete:
          type: boolean
          example: false
        missing:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    Error:
      type: object
      description: Uniform error format across all Real Estate Agency APIs.
      required:
        - code
        - message
      properties:
        code:
          type: string
          example: mandatory_disclosure_missing
        message:
          type: string
          example: Mandatory disclosures from the energy certificate are missing for
            publication.
        details:
          type: array
          items:
            $ref: "#/components/schemas/ErrorDetail"
    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"
          example:
            code: not_authenticated
            message: The API key is invalid or has been revoked.
            details: []
    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`.
```
