> ## 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.

# Text per KI-Anweisung nachbessern

> Überarbeitet den **aktuellen** Text nach einer freien Anweisung des
Anwalts (z. B. „Ergänze ein Unterthema zur Verjährung", „Kürzer und
lockerer"). Arbeitet auf dem gespeicherten Markdown weiter — auch
manuelle Bearbeitungen bleiben erhalten; es findet **keine neue
Recherche** statt, Quellen und Zitatmarker bleiben unangetastet.
Persistiert wie `PATCH` (Wortzahl, HTML und Zitat-Token werden
nachgeführt). Jede Runde zählt als eine Anfrage ins Kontingent.




## OpenAPI

````yaml /openapi.yaml post /rechtstipps/{id}/refine
openapi: 3.1.0
info:
  title: LexGPT Partner API
  version: 2.0.0
  description: >
    Öffentliche API für Partner-Integrationen. Kern-Funktionen:


    - **Rechtstipp erstellen & verwalten** — Thema rein, recherchierter
      SEO-Artikel mit verlinkten Paragraphen raus. Jeder Tipp wird gespeichert
      und bekommt eine `id` (dient beim Feedback als `target_id`).
    - **Feedback** — Rückmeldung zu einem Rechtstipp, über seine `id` verknüpft.


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

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


    **Auth:** Der Tipp-Lebenszyklus (`/rechtstipps`) läuft pro eingeloggtem

    Anwalt und erfordert dessen **finditoo-WP-JWT** — ein reiner Service-Key
    wird

    hier mit `403` abgewiesen. `/feedback` und `/rechtstipp/options` akzeptieren

    zusätzlich einen Service-Key.


    Verfügbare Länder: **AT** und **CH**. `DE` ist auf der Roadmap

    (Anfragen liefern bis dahin `400`).
servers:
  - url: https://dashboard.lex-gpt.ai/api
    description: Produktion
security:
  - bearerAuth: []
tags:
  - name: Rechtstipp
    description: Erstellen & verwalten (pro Anwalt gespeichert)
  - name: Feedback
    description: Rückmeldungen
paths:
  /rechtstipps/{id}/refine:
    parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: Die beim Erstellen zurückgegebene Tipp-`id`.
    post:
      tags:
        - Rechtstipp
      summary: Text per KI-Anweisung nachbessern
      description: |
        Überarbeitet den **aktuellen** Text nach einer freien Anweisung des
        Anwalts (z. B. „Ergänze ein Unterthema zur Verjährung", „Kürzer und
        lockerer"). Arbeitet auf dem gespeicherten Markdown weiter — auch
        manuelle Bearbeitungen bleiben erhalten; es findet **keine neue
        Recherche** statt, Quellen und Zitatmarker bleiben unangetastet.
        Persistiert wie `PATCH` (Wortzahl, HTML und Zitat-Token werden
        nachgeführt). Jede Runde zählt als eine Anfrage ins Kontingent.
      operationId: refineRechtstipp
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - instruction
              properties:
                instruction:
                  type: string
                  minLength: 3
                  maxLength: 2000
                  description: Anweisung an die KI, was am Text zu ändern ist.
      responses:
        '200':
          description: Überarbeiteter Tipp (gleiches Schema wie GET)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RechtstippStored'
        '401':
          description: Fehlende/ungültige Authentifizierung
        '402':
          description: Anfragenkontingent aufgebraucht (nur bei harter Sperre)
        '404':
          description: Tipp nicht gefunden (oder gehört einem anderen Anwalt)
        '422':
          description: Anweisung fehlt oder ist zu lang
        '502':
          description: Verfeinerung fehlgeschlagen — Text bleibt unverändert
components:
  schemas:
    RechtstippStored:
      type: object
      description: >
        Gespeicherter Tipp (GET/PATCH). Enthält die persistierten

        `markdown_tokenized` + `citations` (nach einem `PATCH` mit neuem

        `markdown` frisch aufgelöst); die fertig verlinkten Felder

        (`markdown_linked`/`html_linked`) gibt es nur auf der Erstellen-Response
        —

        aus `markdown_tokenized` + `citations` lassen sie sich jederzeit

        clientseitig bauen (siehe Guide „Paragraphen verlinken").
      properties:
        id:
          type: string
          format: uuid
        created_at:
          type: string
          format: date-time
        kind:
          type: string
        topic:
          type: string
        title:
          type: string
        markdown:
          type: string
        html:
          type: string
        word_count:
          type: integer
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
        markdown_tokenized:
          type: string
          nullable: true
          description: Marker durch `{{CITATION_n}}` ersetzt (persistiert).
        citations:
          type: array
          items:
            $ref: '#/components/schemas/Citation'
    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 (z. B. `§§ 30, 31 IO`): jeder Teil einzeln
            aufgelöst. Der Marker selbst bleibt in `markdown_linked` bewusst
            unverlinkt (nie ein falscher Link) — mit `parts` kannst du granular
            selbst verlinken.
          items:
            type: object
            properties:
              marker:
                type: string
                example: § 30 IO
              matched:
                type: boolean
              source_index:
                type: integer
                nullable: true
              url:
                type: string
                nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: |
        `Authorization: Bearer <TOKEN>`. Für den Tipp-Lebenszyklus
        (`/rechtstipps`) ist `<TOKEN>` das **finditoo-WP-JWT des eingeloggten
        Anwalts** (ein Service-Key wird hier mit `403` abgewiesen). `/feedback`
        und `/rechtstipp/options` akzeptieren zusätzlich einen **Service-Key**
        (Maschine-zu-Maschine). Behandle Tokens als Secret; niemals in
        Chats/Slack teilen.

````