---
title: "Exposé erstellen"
url: "https://maklerportal.apim.eu/apis/expose-erstellen/versions/68a05fe4-408a-4a77-bd68-eebadc995624/operations/exposeErstellen"
---

> Full API specification: https://maklerportal.apim.eu/apis/expose-erstellen/versions/68a05fe4-408a-4a77-bd68-eebadc995624.md

# Exposé erstellen

`POST` `/exposes`

Operation ID: `exposeErstellen`

Startet die Generierung eines Exposés aus einem Objekt und einer Vorlage. Die Verarbeitung läuft asynchron; die Antwort trägt zunächst `status: "in_arbeit"`.

## Request body (required)

Content types: `application/json`

## Responses

- `202` - Generierung angenommen
- `400` - Die Anfrage entspricht nicht dem Schema
- `401` - Schlüssel fehlt, ist gesperrt oder ungültig
- `403` - Dem Schlüssel fehlt der nötige Scope
- `404` - Objekt oder Vorlage nicht gefunden
- `429` - Rate Limit erreicht

## OpenAPI definition

```yaml
openapi: 3.0.3
info:
  title: Exposé erstellen
  version: 1.0.0
servers:
  - url: https://api.maklerportal.example/v1
    description: Produktion
  - url: https://sandbox.api.maklerportal.example/v1
    description: Sandbox – Bestand wird nächtlich zurückgesetzt
paths:
  /exposes:
    post:
      tags:
        - Exposés
      summary: Exposé erstellen
      description: >
        Startet die Generierung eines Exposés aus einem Objekt und einer
        Vorlage.

        Die Verarbeitung läuft asynchron; die Antwort trägt zunächst `status:
        "in_arbeit"`.
      operationId: exposeErstellen
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExposeAnlegen"
            examples:
              standard:
                summary: Eigentumswohnung mit Standardabschnitten
                value:
                  objekt_id: obj_8f2c1a
                  vorlage_id: vrl_klassik
                  sprache: de
                  abschnitte:
                    - lage
                    - ausstattung
                    - energie
                    - grundriss
                    - provision
              zweisprachig:
                summary: Englische Fassung für internationale Interessenten
                value:
                  objekt_id: obj_8f2c1a
                  vorlage_id: vrl_modern
                  sprache: en
                  abschnitte:
                    - lage
                    - ausstattung
                    - energie
      responses:
        "202":
          description: Generierung angenommen
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expose"
              example:
                id: exp_4d9b2e
                objekt_id: obj_8f2c1a
                vorlage_id: vrl_klassik
                sprache: de
                status: in_arbeit
                erstellt_am: 2026-08-20T09:41:12Z
        "400":
          $ref: "#/components/responses/Validierungsfehler"
        "401":
          $ref: "#/components/responses/NichtAuthentifiziert"
        "403":
          $ref: "#/components/responses/ScopeFehlt"
        "404":
          description: Objekt oder Vorlage nicht gefunden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Fehler"
        "429":
          $ref: "#/components/responses/ZuVieleAnfragen"
security:
  - apiKey: []
components:
  schemas:
    ExposeAnlegen:
      type: object
      required:
        - objekt_id
        - vorlage_id
      properties:
        objekt_id:
          type: string
          description: Objekt, aus dem das Exposé erzeugt wird.
          example: obj_8f2c1a
        vorlage_id:
          type: string
          description: Gestaltungsvorlage des Mandanten.
          example: vrl_klassik
        sprache:
          type: string
          description: Sprache des erzeugten Dokuments.
          enum:
            - de
            - en
          default: de
        abschnitte:
          type: array
          description: Reihenfolge und Auswahl der Abschnitte. Ohne Angabe gelten die der
            Vorlage.
          items:
            $ref: "#/components/schemas/Abschnitt"
        notiz_intern:
          type: string
          maxLength: 500
          description: Interne Bemerkung, erscheint nicht im Dokument.
          example: Eigentümerin wünscht Besichtigungen erst ab dem 1. September.
    Expose:
      type: object
      properties:
        id:
          type: string
          example: exp_4d9b2e
        objekt_id:
          type: string
          example: obj_8f2c1a
        vorlage_id:
          type: string
          example: vrl_klassik
        sprache:
          type: string
          example: de
        status:
          $ref: "#/components/schemas/ExposeStatus"
        pdf_url:
          type: string
          format: uri
          description: "Nur bei `status: fertig` gesetzt. Der Link ist 24 Stunden gültig."
          example: https://api.maklerportal.example/v1/exposes/exp_4d9b2e/pdf
        seiten:
          type: integer
          description: Seitenzahl des erzeugten Dokuments.
          example: 6
        pflichtangaben:
          $ref: "#/components/schemas/Pflichtangabenbericht"
        erstellt_am:
          type: string
          format: date-time
          example: 2026-08-20T09:41:12Z
        fertig_am:
          type: string
          format: date-time
          nullable: true
          example: 2026-08-20T09:41:20Z
    Fehler:
      type: object
      description: Einheitliches Fehlerformat aller Maklerportal-APIs.
      required:
        - code
        - nachricht
      properties:
        code:
          type: string
          example: pflichtangabe_fehlt
        nachricht:
          type: string
          example: Für die Veröffentlichung fehlen Pflichtangaben aus dem Energieausweis.
        details:
          type: array
          items:
            $ref: "#/components/schemas/Fehlerdetail"
    Abschnitt:
      type: string
      description: Inhaltlicher Block des Exposés.
      enum:
        - lage
        - ausstattung
        - energie
        - grundriss
        - provision
        - umgebung
        - historie
    ExposeStatus:
      type: string
      description: Lebenszyklus eines Exposés.
      enum:
        - in_arbeit
        - fertig
        - veroeffentlicht
        - zurueckgezogen
        - fehlgeschlagen
      example: fertig
    Pflichtangabenbericht:
      type: object
      description: Ergebnis der Prüfung anzeigepflichtiger Angaben.
      properties:
        vollstaendig:
          type: boolean
          example: false
        fehlend:
          type: array
          items:
            $ref: "#/components/schemas/Fehlerdetail"
    Fehlerdetail:
      type: object
      properties:
        feld:
          type: string
          example: energieausweis.endenergiebedarf_kwh
        grund:
          type: string
          example: fehlt
  responses:
    Validierungsfehler:
      description: Die Anfrage entspricht nicht dem Schema
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Fehler"
    NichtAuthentifiziert:
      description: Schlüssel fehlt, ist gesperrt oder ungültig
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Fehler"
          example:
            code: nicht_authentifiziert
            nachricht: Der API-Schlüssel ist ungültig oder wurde zurückgezogen.
            details: []
    ScopeFehlt:
      description: Dem Schlüssel fehlt der nötige Scope
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Fehler"
          example:
            code: scope_fehlt
            nachricht: Dem API-Schlüssel fehlt ein erforderlicher Scope.
            details:
              - feld: exposes:schreiben
                grund: nicht_erteilt
    ZuVieleAnfragen:
      description: Rate Limit erreicht
      headers:
        Retry-After:
          description: Wartezeit in Sekunden
          schema:
            type: integer
            example: 12
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Fehler"
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: apikey
      description: >
        Jeder Aufruf trägt einen API-Schlüssel im Header `apikey`. Den Schlüssel

        erzeugen Sie im Maklerportal unter "Meine Anwendungen"; er wird genau
        einmal

        angezeigt.


        An jedem Schlüssel hängen die Scopes, die er nutzen darf. Fehlt einer,

        antwortet die API mit `403` und `code: "scope_fehlt"`; der fehlende
        Scope

        steht in `details[].feld`.
```
