curl --request POST \
--url https://dashboard.lex-gpt.ai/api/feedback \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content_type": "rechtstipp",
"target_id": "3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718",
"feedback": "red",
"comment": "§ 1120 ABGB fehlt"
}
'import requests
url = "https://dashboard.lex-gpt.ai/api/feedback"
payload = {
"content_type": "rechtstipp",
"target_id": "3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718",
"feedback": "red",
"comment": "§ 1120 ABGB fehlt"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content_type: 'rechtstipp',
target_id: '3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718',
feedback: 'red',
comment: '§ 1120 ABGB fehlt'
})
};
fetch('https://dashboard.lex-gpt.ai/api/feedback', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dashboard.lex-gpt.ai/api/feedback",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content_type' => 'rechtstipp',
'target_id' => '3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718',
'feedback' => 'red',
'comment' => '§ 1120 ABGB fehlt'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dashboard.lex-gpt.ai/api/feedback"
payload := strings.NewReader("{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dashboard.lex-gpt.ai/api/feedback")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dashboard.lex-gpt.ai/api/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}"
response = http.request(request)
puts response.read_body{
"stored": true,
"reason": "<string>"
}Feedback zu einem Rechtstipp abgeben
Speichert eine Rückmeldung. Für Rechtstipps: content_type: "rechtstipp"
und target_id = die id aus der Erstellen-Response setzen. Damit
verknüpft das Admin-Board das Feedback mit dem gespeicherten Tipp und
zeigt dessen Thema (LLM-Input) und Original-Text (LLM-Output) — du musst
also nichts vom Tipp mitsenden.
session_id ist optional und defaultet serverseitig auf target_id —
für Rechtstipps genügt also die id.
Identität: Feedback wird identitätsfrei gespeichert (DSGVO) — weder
Name noch E-Mail landen in der Datenbank. user_name/user_email im
Body sind veraltet und werden ignoriert. Die Response signalisiert,
ob gespeichert wurde (kein stiller Verlust).
curl --request POST \
--url https://dashboard.lex-gpt.ai/api/feedback \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"content_type": "rechtstipp",
"target_id": "3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718",
"feedback": "red",
"comment": "§ 1120 ABGB fehlt"
}
'import requests
url = "https://dashboard.lex-gpt.ai/api/feedback"
payload = {
"content_type": "rechtstipp",
"target_id": "3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718",
"feedback": "red",
"comment": "§ 1120 ABGB fehlt"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content_type: 'rechtstipp',
target_id: '3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718',
feedback: 'red',
comment: '§ 1120 ABGB fehlt'
})
};
fetch('https://dashboard.lex-gpt.ai/api/feedback', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dashboard.lex-gpt.ai/api/feedback",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'content_type' => 'rechtstipp',
'target_id' => '3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718',
'feedback' => 'red',
'comment' => '§ 1120 ABGB fehlt'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dashboard.lex-gpt.ai/api/feedback"
payload := strings.NewReader("{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dashboard.lex-gpt.ai/api/feedback")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dashboard.lex-gpt.ai/api/feedback")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content_type\": \"rechtstipp\",\n \"target_id\": \"3f1c2b4a-5d6e-7089-a1b2-c3d4e5f60718\",\n \"feedback\": \"red\",\n \"comment\": \"§ 1120 ABGB fehlt\"\n}"
response = http.request(request)
puts response.read_body{
"stored": true,
"reason": "<string>"
}Authorizations
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.
Body
Ampel green/yellow/red (kanonisch). positive/negative
werden gemappt (positive→green, negative→red).
green, yellow, red, positive, negative Die id des bewerteten Rechtstipps (aus der Erstellen-Response).
Verknüpft das Feedback eindeutig mit dem gespeicherten Tipp.
rechtstipp (bzw. blog) setzen, sonst Default ask.
Optionale Gruppierungs-ID. Fehlt sie, defaultet der Server auf
target_id — für Rechtstipps also nicht nötig.
Optional; nur als Fallback-Anzeige, wenn kein target_id-Join greift.
Veraltet (DSGVO) — wird akzeptiert, aber weder gespeichert noch angezeigt.
Veraltet (DSGVO) — wird akzeptiert, aber weder gespeichert noch angezeigt.