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

# Rechtstipp oder Blogartikel generieren

> Generiert aus einem Thema einen recherchierten, SEO-tauglichen Artikel
(österreichisches Recht). Die Paragraphen im Text sind über
`markdown_linked` bereits als Links eingebettet.

**Minimal:** nur `topic` + `land` senden — `filters` wird dann mit dem
Land-Default gefüllt.




## OpenAPI

````yaml /openapi.yaml post /generate-rechtstipp
openapi: 3.1.0
info:
  title: LexGPT Partner API
  version: 1.0.0
  description: >
    Öffentliche API für Partner-Integrationen. Aktuell zwei Kern-Funktionen:


    - **Rechtstipp generieren** — Thema rein, recherchierter SEO-Artikel mit
      verlinkten Paragraphen raus.
    - **Feedback** — Rückmeldung zu generierten Rechtstipps (und weiteren
    Inhalten).


    Diese Doku beschreibt nur die öffentliche Partner-Fläche. Interne Endpunkte

    (Recherche-Chat, Admin) sind bewusst nicht Teil des Vertrags.


    Aktuell ist nur **AT** freigeschaltet; `DE`/`CH` sind auf der Roadmap

    (Anfragen liefern bis dahin `400`).
servers:
  - url: https://app.lex-gpt.ai/api
    description: Produktion
security:
  - bearerAuth: []
tags:
  - name: Rechtstipp
    description: Artikel-Generierung
  - name: Feedback
    description: Rückmeldungen
paths:
  /generate-rechtstipp:
    post:
      tags:
        - Rechtstipp
      summary: Rechtstipp oder Blogartikel generieren
      description: |
        Generiert aus einem Thema einen recherchierten, SEO-tauglichen Artikel
        (österreichisches Recht). Die Paragraphen im Text sind über
        `markdown_linked` bereits als Links eingebettet.

        **Minimal:** nur `topic` + `land` senden — `filters` wird dann mit dem
        Land-Default gefüllt.
      operationId: generateRechtstipp
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RechtstippRequest'
            examples:
              minimal_at:
                summary: Minimal (AT) — filters weggelassen → Land-Default
                value:
                  topic: Kündigungsfristen im Mietrecht
                  kind: rechtstipp
                  land: AT
                  as_of: '2026-07-23'
              voll_at:
                summary: Voll (AT) — filters explizit
                value:
                  topic: Betriebsbedingte Kündigung
                  kind: blog
                  land: AT
                  as_of: '2026-07-23'
                  min_words: 1400
                  max_words: 2200
                  filters:
                    geographic:
                      - bundesrecht
                    legislation: true
                    judikatur: true
                    courts: []
                    germanCourts: []
                    swissCantons: []
                    eurlex: true
                    documentTypes: []
      responses:
        '200':
          description: Generierter Artikel
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RechtstippResponse'
        '400':
          description: Ungültige Eingabe (z. B. `land` noch nicht freigeschaltet)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Fehlende/ungültige Authentifizierung
        '502':
          description: Generierung fehlgeschlagen
components:
  schemas:
    RechtstippRequest:
      type: object
      required:
        - topic
      properties:
        topic:
          type: string
          description: Thema/Fragestellung.
          example: Kündigungsfristen im Mietrecht
        kind:
          type: string
          enum:
            - rechtstipp
            - blog
          default: rechtstipp
          description: '`rechtstipp` (kurz, Endkunden) oder `blog` (länger, Fachpublikum).'
        land:
          type: string
          enum:
            - AT
            - DE
            - CH
          default: AT
          description: >
            Rechtsordnung + Wording. ISO-Code bevorzugt; Alt-Freitext

            ("Österreich") wird toleriert. Steuert NICHT die
            Retrieval-Jurisdiktion

            (das macht `filters.geographic`). Aktuell nur **AT** freigeschaltet
            —

            `DE`/`CH` liefern `400` (Roadmap).
        filters:
          $ref: '#/components/schemas/FilterConfig'
        as_of:
          type: string
          format: date
          description: Optionaler Stichtag (YYYY-MM-DD).
          example: '2026-07-23'
        min_words:
          type: integer
          description: Untergrenze; leer → kind-abhängiger Default.
        max_words:
          type: integer
          description: Obergrenze; leer → kind-abhängiger Default.
    RechtstippResponse:
      type: object
      properties:
        kind:
          type: string
        topic:
          type: string
        title:
          type: string
          description: Generierte H1.
        markdown:
          type: string
          description: Artikel MIT Quellen-Markern ([§ …]).
        markdown_clean:
          type: string
          description: Artikel OHNE Marker (Veröffentlichung/Kopieren).
        markdown_tokenized:
          type: string
          description: Marker durch `{{CITATION_n}}` ersetzt (für granulare Integration).
        markdown_linked:
          type: string
          description: >
            Artikel mit Paragraphen bereits als `[Label](URL)` eingebettet — der

            einfachste Weg zu verlinkten Paragraphen. Für granulare Kontrolle

            stattdessen `markdown_tokenized` + `citations` selbst
            zusammensetzen.
        html:
          type: string
          description: Minimal-HTML (marker-frei).
        html_linked:
          type: string
          description: HTML mit eingebetteten Paragraphen-Links.
        word_count:
          type: integer
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
        citations:
          type: array
          items:
            $ref: '#/components/schemas/Citation'
    Error:
      type: object
      properties:
        detail:
          type: string
    FilterConfig:
      type: object
      description: Retrieval-Scope (Jurisdiktion etc.). Wird weggelassen → Land-Default.
      properties:
        geographic:
          type: array
          items:
            type: string
          description: z. B. ["bundesrecht"] (AT). Bestimmt die Retrieval-Jurisdiktion.
        legislation:
          type: boolean
          default: true
        judikatur:
          type: boolean
          default: true
        courts:
          type: array
          items:
            type: string
        germanCourts:
          type: array
          items:
            type: string
        swissCantons:
          type: array
          items:
            type: string
        eurlex:
          type: boolean
          default: true
        documentTypes:
          type: array
          items:
            type: string
    Source:
      type: object
      properties:
        law_short:
          type: string
          nullable: true
          example: ABGB
        section_id:
          type: string
          nullable: true
          example: § 1295
        title:
          type: string
          nullable: true
        category:
          type: string
          nullable: true
          example: bundesrecht
        source_id:
          type: string
          nullable: true
        html_url:
          type: string
          nullable: true
          description: Volltext-Link (RIS/EUR-Lex).
        content:
          type: string
          nullable: true
          description: Textauszug (Fundstelle).
    Citation:
      type: object
      description: Aufgelöster Quellen-Marker (ADR 0001).
      properties:
        index:
          type: integer
        marker:
          type: string
          example: § 1295 ABGB
        label:
          type: string
          example: § 1295 ABGB
        matched:
          type: boolean
        source_index:
          type: integer
          nullable: true
        url:
          type: string
          nullable: true
        parts:
          type: array
          description: Nur bei Mehrfachzitaten.
          items:
            type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        `Authorization: Bearer <TOKEN>`. `<TOKEN>` ist entweder dein
        **Service-Key** (Maschine-zu-Maschine) oder ein **WP-JWT** des Anwalts
        (empfohlen — ergibt Per-Anwalt-Zuordnung). Behandle Keys als Secret;
        niemals in Chats/Slack teilen.

````