> ## Documentation Index
> Fetch the complete documentation index at: https://docs.deal-pipe.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Get project

> Requires scope: project:read. Pass `include=properties` to get the project's units in the same response — that additionally requires scope: property:read.



## OpenAPI

````yaml api-reference/openapi.json GET /projects/{id}
openapi: 3.1.0
info:
  title: DealPipe Public API
  version: 1.0.0
  description: >-
    Org-scoped REST API for external integrations. All endpoints require an
    `Authorization: Bearer dp_live_...` token issued in the dashboard under
    Settings → API tokens. Tokens carry a subset of RBAC permissions called
    *scopes*; the effective permission set is `scopes ∩
    creator-current-permissions` resolved at request time.
servers:
  - url: https://app.deal-pipe.de/api/v1
    description: Dealpipe
security:
  - bearerAuth: []
paths:
  /projects/{id}:
    get:
      summary: Get project
      description: >-
        Requires scope: project:read. Pass `include=properties` to get the
        project's units in the same response — that additionally requires scope:
        property:read.
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: include
          in: query
          description: >-
            Comma-separated. `properties` (aliases: `units`, `einheiten`) embeds
            the units; `images` additionally attaches signed image URLs and only
            works together with `properties`.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - properties
                - images
        - name: limit
          in: query
          description: >-
            Page size. Max 200, or 50 when `include=images` is set. The
            effective value is echoed in `pagination.limit`.
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 200
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
        - name: status
          in: query
          description: Repeatable or comma-separated.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - frei
                - auf_anfrage
                - reserviert
                - notarvorbereitung
                - notartermin
                - verkauft
        - name: visibility
          in: query
          description: Repeatable or comma-separated.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - online
                - offline
                - pending_review
        - name: updatedSince
          in: query
          description: >-
            ISO 8601 timestamp. Returns units changed at or after it — use this
            to sync incrementally.
          schema:
            type: string
            format: date-time
        - name: includeArchived
          in: query
          description: Archived (sold/closed) units are excluded by default.
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  project:
                    $ref: '#/components/schemas/Project'
                  properties:
                    type: array
                    description: Only present when `include=properties` was requested.
                    items:
                      $ref: '#/components/schemas/Property'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Quota exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Project:
      type: object
      properties:
        id:
          type: string
          format: uuid
        orgId:
          type: string
          format: uuid
        name:
          type: string
        street:
          type:
            - string
            - 'null'
        houseNumber:
          type:
            - string
            - 'null'
        postalCode:
          type:
            - string
            - 'null'
        city:
          type:
            - string
            - 'null'
        country:
          type:
            - string
            - 'null'
        createdAt:
          type: string
          format: date-time
    Property:
      type: object
      description: >-
        Monetary and area values are decimal strings (e.g. "320000.00") so no
        precision is lost in JSON. Fields absent from this schema are internal
        and are never returned.
      properties:
        id:
          type: string
          format: uuid
        projectId:
          type: string
          format: uuid
        orgId:
          type: string
          format: uuid
        externalSourceId:
          type:
            - string
            - 'null'
          description: Your own id, if the unit was created via this API.
        unitIdentifier:
          type:
            - string
            - 'null'
        unitNumber:
          type:
            - string
            - 'null'
        street:
          type:
            - string
            - 'null'
        houseNumber:
          type:
            - string
            - 'null'
        postalCode:
          type:
            - string
            - 'null'
        city:
          type:
            - string
            - 'null'
        latitude:
          type:
            - string
            - 'null'
        longitude:
          type:
            - string
            - 'null'
        etage:
          type:
            - integer
            - 'null'
        zimmer:
          type:
            - string
            - 'null'
        wohnflaecheQm:
          type:
            - string
            - 'null'
        nutzflaecheQm:
          type:
            - string
            - 'null'
        baujahr:
          type:
            - integer
            - 'null'
        status:
          type: string
          enum:
            - frei
            - auf_anfrage
            - reserviert
            - notarvorbereitung
            - notartermin
            - verkauft
        visibility:
          type: string
          enum:
            - online
            - offline
            - pending_review
        archived:
          type: boolean
        archivedAt:
          type:
            - string
            - 'null'
          format: date-time
        kaufpreis:
          type:
            - string
            - 'null'
        kaufpreisStellplatz:
          type:
            - string
            - 'null'
        kaltmieteWohnung:
          type:
            - string
            - 'null'
        kaltmieteStellplatz:
          type:
            - string
            - 'null'
        hausgeldGesamt:
          type:
            - string
            - 'null'
        hausgeldNichtUmlagefaehig:
          type:
            - string
            - 'null'
        kaufpreisPerQm:
          type:
            - string
            - 'null'
        kaltmietePerQm:
          type:
            - string
            - 'null'
        bruttorendite:
          type:
            - string
            - 'null'
        bauzustand:
          type:
            - string
            - 'null'
        anlageklasse:
          type:
            - string
            - 'null'
        mietstatus:
          type:
            - string
            - 'null'
        vermietetSeit:
          type:
            - string
            - 'null'
        energieeffizienzklasse:
          type:
            - string
            - 'null'
        energieausweistyp:
          type:
            - string
            - 'null'
        energieverbrauch:
          type:
            - string
            - 'null'
        heizungsart:
          type:
            - string
            - 'null'
        isDenkmal:
          type:
            - boolean
            - 'null'
        isErbbaupacht:
          type:
            - boolean
            - 'null'
        videoUrl:
          type:
            - string
            - 'null'
        virtualTourUrl:
          type:
            - string
            - 'null'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        images:
          type: array
          description: Only present when `include=images` was requested.
          items:
            $ref: '#/components/schemas/PropertyImage'
    Pagination:
      type: object
      properties:
        limit:
          type: integer
          description: Effective page size after clamping.
        offset:
          type: integer
        total:
          type: integer
          description: Total matches for the filter, ignoring limit/offset.
        hasMore:
          type: boolean
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - requestId
          properties:
            code:
              type: string
            message:
              type: string
            requestId:
              type: string
            details: {}
    PropertyImage:
      type: object
      description: >-
        Signed, temporary link into the private `property-images` bucket. URLs
        expire after 1 hour — re-read the property instead of persisting them.
      properties:
        id:
          type: string
          format: uuid
        category:
          type:
            - string
            - 'null'
        fileName:
          type:
            - string
            - 'null'
        sortOrder:
          type:
            - integer
            - 'null'
        url:
          type:
            - string
            - 'null'
          format: uri
        thumbnailUrl:
          type:
            - string
            - 'null'
          format: uri
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: dp_live_*

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.