Auf dieser Seite
Erste Schritte
Überblick
Die Version steht im Pfad: /api/v1. Jeder Endpunkt nimmt einen POST mit JSON-Body an und antwortet in JSON, auch bei Fehlern.
Basis-URL https://textlume.com
- POST /api/v1/detectEinen Text prüfen
- POST /api/v1/detect/batchMehrere Texte prüfen
- POST /api/v1/humanizeEinen Text umschreiben
- POST /api/v1/paraphraseEinen Text umformulieren
- POST /api/v1/summarizeEinen Text zusammenfassen
- POST /api/v1/grammarGrammatik prüfen
Auf der Website verfügbar, über die API aber nicht: Wortzähler, Zeichenzähler, Plagiatsprüfung und die Humanizer-Option "Mehr Zeit nehmen".
Erzeugt aus dem OpenAPI-Dokument. Sie sehen also genau die Endpunkte und Felder, die die API annimmt. OpenAPI-Dokument
Ihre erste Anfrage
Ein Text muss mindestens 50 Wörter lang sein.
Prüfen Sie zuerst "calibrated". Steht dort false, gibt es für diese Sprache noch keine angepasste Kurve, und der Wert darf nicht als Ergebnis gelten.
Die Werte sind hier als Typen angegeben. Eine echte Antwort enthält die Einschätzung zu Ihrem Text.
curl -X POST https://textlume.com/api/v1/detect \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}Authentifizierung
Übergeben Sie Ihren Schlüssel als Bearer-Token im Authorization-Header. Anfragen mit dem Schlüssel in der URL werden abgelehnt.
Jeder Schlüssel hat Berechtigungen (Scopes): detect, rewrite, summarize und grammar. Fehlt einem Schlüssel die Berechtigung, die ein Endpunkt verlangt, antwortet der Endpunkt mit 403 out_of_scope.
Authorization: Bearer YOUR_API_KEYEndpunkte
POST /api/v1/detect
Einen Text prüfen. Liefert die Einschätzung des Detektors für einen einzelnen Text: einen Wert von 0 bis 100, die Spanne darum, eine Einschätzung je Satz und die Angabe, ob die Sprache kalibriert ist.
Benötigte Berechtigung: detect
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| language | string | nein | Ein Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt. |
| contentType | string | nein | Die Textart, etwa "essay" oder "email". Setzen Sie das Feld, wenn die Einschätzung die Kurve für diese Textart verwenden soll. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| figure | number | Die Einschätzung auf einer Skala von 0 bis 100, wie wahrscheinlich der Text maschinell geschrieben wurde. Karten und Berichte auf der Website zeigen die Mitte zwischen low und high, die von diesem Wert abweichen kann. |
| low | number | Die Untergrenze der Spanne um den Wert. |
| high | number | Die Obergrenze der Spanne um den Wert. |
| uncertainty | number | Die halbe Breite der Spanne in Punkten. |
| verdict | string | Der Bereich, in dem der Wert liegt. Er beschreibt nur den Wert und sagt nichts darüber aus, wer den Text geschrieben hat. Zulässige Werte: human, uncertain, ai. |
| confidence | string | Wie verlässlich die Einschätzung ist. Zulässige Werte: low, medium, high. |
| sentences | Array aus SentenceScore | Eine Einschätzung je Satz. |
| words | integer | Die Anzahl der geprüften Wörter. |
| language | string | Die Sprache, in der der Text geprüft wurde. |
| model | string | Das Modell, von dem diese Einschätzung stammt. |
| calibrated | boolean | Ob es für diese Sprache eine angepasste Kurve gibt. Bei false den Wert nicht als Ergebnis verwenden. |
| bandHumanFlagRate | number | null | Laut unseren Messungen der Anteil der von Menschen geschriebenen Texte in diesem Bereich, die als maschinell geschrieben eingeschätzt wurden. Null, wenn kein Wert vorliegt. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | no_text | Der Request-Body enthält kein "text". |
| 422 | too_short | Der Text ist kürzer als die Mindestlänge. |
| 413 | text_too_long | Der Text ist länger, als die Engine in einer Anfrage verarbeiten kann. Teilen Sie ihn in kleinere Abschnitte auf. Es wurden keine Wörter gezählt. |
| 422 | not_calibrated | Für diese Sprache gibt es noch keine Einschätzungen. |
| 503 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 502 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 503 | engine_starting | Die Engine war noch im Start und nicht rechtzeitig bereit. Es wurden keine Wörter gezählt. Versuchen Sie es in etwa einer Minute erneut. |
| 503 | engine_busy | Die Engine war ausgelastet und konnte die Prüfung nicht rechtzeitig starten. Pro-Nutzer auf der Website haben Vorrang vor API-Anfragen. Es wurden keine Wörter gezählt. Versuchen Sie es gleich noch einmal. |
| 504 | engine_timeout | Die Engine ist mit dem Text nicht rechtzeitig fertig geworden. Es wurden keine Wörter gezählt. Versuchen Sie es erneut oder senden Sie einen kürzeren Text. |
| 429 | concurrency_limited | Für diesen Schlüssel laufen bereits so viele Anfragen dieser Art gleichzeitig, wie erlaubt sind. Warten Sie, bis eine davon fertig ist, oder die in Retry-After angegebene Zeit. |
curl -X POST https://textlume.com/api/v1/detect \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/detect/batch
Mehrere Texte prüfen. Senden Sie in einer Anfrage so viele Texte, wie das Batch-Limit erlaubt. Vor dem Start muss die Anfrage genug Wörter für jeden Text abdecken, den sie prüfen könnte (50 Wörter oder mehr pro Text). Wörter, die für einen Text ohne Einschätzung reserviert wurden, werden danach erstattet. Scheitert ein Text, läuft der Rest des Batches weiter.
Benötigte Berechtigung: detect
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| items | Array aus object | ja | Die zu prüfenden Texte. Jedes Element hat ein eigenes "text" und kann zusätzlich "id", "language" und "contentType" enthalten. |
| items[].id | string | nein | Eine frei wählbare id, die mit dem Ergebnis des Elements zurückkommt. Ohne Angabe gilt die Position des Elements in der Liste. |
| items[].text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| items[].language | string | nein | Ein Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt. |
| items[].contentType | string | nein | Die Textart, etwa "essay" oder "email". Setzen Sie das Feld, wenn die Einschätzung die Kurve für diese Textart verwenden soll. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| results | Array aus BatchResult | Ein Ergebnis pro Element, in der Reihenfolge, in der die Elemente gesendet wurden. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | batch_empty | Der Request-Body enthält kein "items", oder die Liste ist leer. |
| 413 | batch_too_large | Der Batch enthält mehr Elemente, als das Limit erlaubt. |
| 429 | concurrency_limited | Für diesen Schlüssel laufen bereits so viele Anfragen dieser Art gleichzeitig, wie erlaubt sind. Warten Sie, bis eine davon fertig ist, oder die in Retry-After angegebene Zeit. |
curl -X POST https://textlume.com/api/v1/detect/batch \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"id":"1","text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."},{"id":"2","text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}]}'const res = await fetch('https://textlume.com/api/v1/detect/batch', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"items": [
{
"id": "1",
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
},
{
"id": "2",
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}
]
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/detect/batch",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"items": [
{
"id": "1",
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
{
"id": "2",
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
],
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"results": [
{
"id": "string",
"detection": {
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"error": {
"code": "string",
"message": "string"
}
}
],
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/humanize
Einen Text umschreiben. Startet den Humanizer mit Faktenprüfung. Zahlen, Namen und Zitate bleiben erhalten. Verändert eine Umschreibung einen Fakt, wird er korrigiert oder markiert. Der Modus "custom" (Pro) schreibt in Ihrem eigenen Stil, den er aus einer Schreibprobe von Ihnen übernimmt.
Die API nutzt die Standard-Umschreibung des Humanizers. Die Option "Mehr Zeit nehmen" gibt es nur auf der Website.
Benötigte Berechtigung: rewrite
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| mode | string | nein | Der Modus der Umschreibung. Zulässige Werte: natural, formal, simple, academic, creative, shorten, expand, custom. Standardwert: natural. |
| style_sample | string | nein | Für den Modus "custom": eine Probe Ihres eigenen Schreibens mit 150 bis 2.000 Wörtern, die auf dem Server verarbeitet wird. Ohne Angabe wird die in Ihrem Konto gespeicherte Schreibprobe verwendet. |
| tab | string | nein | Der Tab des Humanizers, also der Sprachstil, in dem umgeschrieben wird. Standard behält den Sprachstil des Ausgangstextes bei. Zulässige Werte: standard, academic, professional, casual. Standardwert: standard. |
| strength | string | nein | Normal behält Inhalt und Sprachstil bei. Intensiv darf den Text umstellen und Ausschmückungen weglassen, behält aber jeden Hauptpunkt. Einzelne Stellen können ungewohnt klingen. Zulässige Werte: regular, aggressive. Standardwert: regular. |
| ownTouch | string | nein | Ein Detail, ein Beispiel oder eine Meinung in Ihren eigenen Worten, bis zu 400 Zeichen, das in den umgeschriebenen Text eingearbeitet wird. |
| language | string | nein | Ein Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| text | string | Der umgeschriebene Text. |
| before | Detection | Die Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt. |
| after | Detection | Die Einschätzung des Detektors für den umgeschriebenen Text oder null. |
| passes | integer | Die Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde. |
| facts | object | Die Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist. |
| late | boolean | True, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | no_text | Der Request-Body enthält kein "text". |
| 422 | too_short | Der Text ist kürzer als die Mindestlänge. |
| 400 | unknown_mode | Dieser Endpunkt bietet den angefragten Modus nicht an. |
| 400 | unknown_option | Diesen Tab oder diese Stärke bietet dieser Endpunkt nicht an. |
| 402 | plan_required | Der gewählte Modus, Tab, die Stärke oder Ihre eigene Note setzt einen Tarif voraus, den dieses Konto nicht hat. Der Modus "custom" setzt Pro voraus. Es wurden keine Wörter gezählt. |
| 400 | no_sample | Der Modus "custom" braucht eine Schreibprobe, entweder mit der Anfrage gesendet oder im Konto gespeichert. |
| 400 | sample_too_short | Die Schreibprobe ist kürzer als die Mindestlänge. |
| 400 | sample_too_long | Die Schreibprobe ist länger als die Höchstlänge. |
| 429 | concurrency_limited | Für diesen Schlüssel laufen bereits so viele Anfragen dieser Art gleichzeitig, wie erlaubt sind. Warten Sie, bis eine davon fertig ist, oder die in Retry-After angegebene Zeit. |
| 422 | no_rewrite | Die Engine hat geantwortet, aber keiner ihrer Entwürfe hat die Prüfungen bestanden (leere Ausgabe, eine Ablehnung oder eine Kopie der Eingabe). Es wurden keine Wörter gezählt. |
| 503 | timeout | Die Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt. |
| 503 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 502 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
curl -X POST https://textlume.com/api/v1/humanize \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/humanize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/humanize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"before": {
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"after": {
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"passes": "integer",
"facts": "object",
"late": "boolean",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/paraphrase
Einen Text umformulieren. Startet den Paraphrasierer mit denselben Modi wie das Tool auf der Website.
Benötigte Berechtigung: rewrite
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| mode | string | nein | Der Modus der Umschreibung. Zulässige Werte: standard, fluency, formal, academic, simple, creative, expand, shorten. Standardwert: standard. |
| strength | string | nein | Wie weit sich die Umschreibung vom Original entfernen darf. Zulässige Werte: readable, balanced, strong. Standardwert: balanced. |
| readability | string | nein | Das Leseniveau, für das geschrieben wird. Zulässige Werte: casual, professional, academic, creative. Standardwert: professional. |
| purpose | string | nein | Der Zweck des Textes. Zulässige Werte: general, essay, article, email, marketing, report, story. Standardwert: general. |
| synonyms | string | nein | Wie frei Wörter durch Synonyme ersetzt werden dürfen. Zulässige Werte: few, some, many. Standardwert: some. |
| freezeWords | Array aus string | nein | Wörter und Wendungen, die genau so zurückkommen müssen, wie sie geschrieben sind. Bis zu 25 Einträge mit jeweils höchstens 60 Zeichen. Ihre Wörter zählen zur Wortsumme der Anfrage. |
| customInstruction | string | nein | Eine eigene kurze Anweisung für die Umschreibung mit höchstens 500 Zeichen. Ihre Wörter zählen zur Wortsumme der Anfrage. |
| language | string | nein | Ein Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt. |
| closedLoop | boolean | nein | Setzen Sie den Wert auf false, um den geschlossenen Prüfkreislauf abzuschalten. Standardwert: true. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| text | string | Der umgeschriebene Text. |
| before | Detection | Die Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt. |
| after | Detection | Die Einschätzung des Detektors für den umgeschriebenen Text oder null. |
| passes | integer | Die Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde. |
| facts | object | Die Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist. |
| late | boolean | True, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | no_text | Der Request-Body enthält kein "text". |
| 422 | too_short | Der Text ist kürzer als die Mindestlänge. |
| 400 | unknown_mode | Dieser Endpunkt bietet den angefragten Modus nicht an. |
| 400 | option_invalid | freezeWords ist keine Liste aus Wörtern oder Wendungen. Es wurde nichts berechnet. |
| 400 | option_too_long | freezeWords oder customInstruction überschreitet die Grenze. Es wurde nichts berechnet. |
| 429 | concurrency_limited | Für diesen Schlüssel laufen bereits so viele Anfragen dieser Art gleichzeitig, wie erlaubt sind. Warten Sie, bis eine davon fertig ist, oder die in Retry-After angegebene Zeit. |
| 422 | no_rewrite | Die Engine hat geantwortet, aber keiner ihrer Entwürfe hat die Prüfungen bestanden (leere Ausgabe, eine Ablehnung oder eine Kopie der Eingabe). Es wurden keine Wörter gezählt. |
| 503 | timeout | Die Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt. |
| 503 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 502 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
curl -X POST https://textlume.com/api/v1/paraphrase \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/paraphrase', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/paraphrase",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"before": {
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"after": {
"figure": "number von 0 bis 100",
"low": "number von 0 bis 100",
"high": "number von 0 bis 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number von 0 bis 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"passes": "integer",
"facts": "object",
"late": "boolean",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/summarize
Einen Text zusammenfassen. Startet den Zusammenfasser und liefert Kernsätze, einen Absatz oder Stichpunkte.
Benötigte Berechtigung: summarize
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| mode | string | nein | Die Form der Zusammenfassung. Zulässige Werte: key-sentences, paragraph, bullets. Standardwert: key-sentences. |
| length | string | nein | Die Länge der Zusammenfassung. Zulässige Werte: short, medium, long. Standardwert: medium. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| text | string | Der Text der Zusammenfassung. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | no_text | Der Request-Body enthält kein "text". |
| 422 | too_short | Der Text ist kürzer als die Mindestlänge. |
| 429 | concurrency_limited | Für diesen Schlüssel laufen bereits so viele Anfragen dieser Art gleichzeitig, wie erlaubt sind. Warten Sie, bis eine davon fertig ist, oder die in Retry-After angegebene Zeit. |
| 503 | timeout | Die Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt. |
| 503 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 502 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
curl -X POST https://textlume.com/api/v1/summarize \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/summarize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/summarize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/grammar
Grammatik prüfen. Findet Fehler in Grammatik, Rechtschreibung, Zeichensetzung und Stil und liefert jeden mit seiner Position im Text und Ersetzungsvorschlägen.
Benötigte Berechtigung: grammar
Request-Body
| Feld | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| text | string | ja | Der Text, der geprüft oder umgeschrieben werden soll. |
| language | string | nein | Der Sprachcode für die Prüfung, etwa "en-US" oder "de-DE". Standardwert: en-US. |
Antwort
| Feld | Typ | Beschreibung |
|---|---|---|
| issues | Array aus GrammarIssue | Die gefundenen Fehler in der Reihenfolge, in der sie im Text stehen. |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
Fehler dieses Endpunkts
| Status | Code | Bedeutung |
|---|---|---|
| 400 | no_text | Der Request-Body enthält kein "text". |
| 503 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 502 | engine_unavailable | Die Engine hat nicht geantwortet. Es wurden keine Wörter gezählt. |
| 503 | engine_starting | Die Engine war noch im Start und nicht rechtzeitig bereit. Es wurden keine Wörter gezählt. Versuchen Sie es in etwa einer Minute erneut. |
| 504 | engine_timeout | Die Engine ist mit dem Text nicht rechtzeitig fertig geworden. Es wurden keine Wörter gezählt. Versuchen Sie es erneut oder senden Sie einen kürzeren Text. |
curl -X POST https://textlume.com/api/v1/grammar \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."}'const res = await fetch('https://textlume.com/api/v1/grammar', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://textlume.com/api/v1/grammar",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "Am Samstagvormittag hat der Elternbeirat der Grundschule zum Frühjahrsputz auf dem Schulhof eingeladen. Rund zwanzig Familien kamen mit Rechen, Handschuhen und Thermoskannen. Die Kinder sammelten Laub und Äste, während die Erwachsenen die Bänke abschliffen und neu strichen. Gegen Mittag gab es Brezeln und Apfelschorle. Weil noch nicht alles fertig wurde, soll es im Mai einen zweiten Termin geben, und der Hausmeister kümmert sich bis dahin um neue Farbe.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"issues": [
{
"offset": "integer",
"length": "integer",
"message": "string",
"shortMessage": "string",
"category": "grammar | spelling | punctuation | style | typography",
"replacements": [
"string"
],
"context": "string"
}
],
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}Referenz
Fehler
Fehler kommen mit einem HTTP-Status und einem Body im unten gezeigten Aufbau. Werten Sie Fehler anhand ihres Codes aus. Die Meldung erklärt, was fehlgeschlagen ist und was Sie tun können.
Fehler, die jeder Endpunkt liefern kann
| Status | Code | Bedeutung |
|---|---|---|
| 401 | key_in_url | Der Schlüssel stand in der URL. Senden Sie ihn stattdessen im Authorization-Header. |
| 401 | no_key | Die Anfrage enthielt keinen Schlüssel. |
| 401 | bad_key | Der Schlüssel ist ungültig oder wurde widerrufen. |
| 403 | out_of_scope | Dem Schlüssel fehlt die Berechtigung, die dieser Endpunkt verlangt. |
| 429 | rate_limited | Dieser Schlüssel hat zu viele Anfragen gesendet. Warten Sie die in Retry-After angegebene Zeit ab. |
| 403 | plan_lapsed | Der aktuelle Tarif des Kontos enthält keinen API-Zugang. |
| 413 | too_large | Der Request-Body ist zu groß. |
| 400 | bad_body | Der Request-Body ist kein JSON-Objekt. |
| 413 | too_many_words | Die Anfrage hat mehr Wörter, als eine Anfrage fasst. Teilen Sie sie auf. Es wurde nichts berechnet. |
| 402 | quota_exhausted | Die API-Wörter des Tarifs für diesen Abrechnungszeitraum sind aufgebraucht, und es ist kein Wortguthaben mehr vorhanden. Es wurden keine Wörter gezählt. |
| 402 | quota_short | Die Anfrage braucht mehr Wörter, als die restlichen API-Wörter des Tarifs und das Wortguthaben zusammen abdecken. Es wurden keine Wörter gezählt. |
| 402 | monthly_ceiling | Das Konto hat seine API-Obergrenze für diesen Abrechnungszeitraum erreicht. Die Obergrenze gilt unabhängig vom Wortguthaben. Es wurden keine Wörter gezählt. |
| 503 | store_unavailable | Der Schlüssel, die Wortzählung des Kontos oder seine gespeicherte Schreibprobe ließ sich gerade nicht lesen, oder diese Installation hat keinen Kontospeicher. Es lief nichts, und es wurden keine Wörter gezählt. |
Eine Anfrage reserviert ihre Wörter, bevor sie läuft, und gibt sie zurück, wenn sie fehlschlägt. Lässt sich der Wortstand in diesem Moment nicht schreiben, bleiben die Wörter berechnet. Eine fehlgeschlagene Anfrage sagt das dann und enthält in ihrer Nutzung "recorded": false, ein Batch antwortet ebenso mit "recorded": false in der Nutzung. Geschätzt wird dabei nichts.
{
"error": {
"code": "string",
"message": "string",
"docs": "string",
"available": "integer"
},
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}Limits
Das sind genau die Werte, die die API durchsetzt.
- Ein Schlüssel kann in jedem Zeitfenster von 60 Sekunden bis zu 60 Anfragen senden.
- Pro Schlüssel können gleichzeitig bis zu 4 Prüfanfragen (ein Batch zählt als eine Anfrage) und bis zu 2 Anfragen zum Umschreiben, Umformulieren oder Zusammenfassen laufen. Jede weitere Anfrage erhält 429 concurrency_limited mit einem Retry-After-Header.
- Unter Last haben Pro-Nutzer auf der Website Vorrang vor API-Anfragen. Eine API-Anfrage muss dann unter Umständen warten.
- Höchstzahl an Texten pro Batch: 50.
- Eine Anfrage umfasst höchstens 20.000 Wörter, egal ob einzelner Text oder ganzer Batch.
- Der Detektor liest in jedem Tarif einen Text mit bis zu 90.000 Zeichen, das sind etwa 10.000 Wörter. Ein längerer Text wird mit 413 text_too_long beantwortet, auch wenn er innerhalb der Wortgrenze der Anfrage liegt.
- Ein Konto kann bis zu 5 aktive Schlüssel gleichzeitig haben. So lässt sich ein Schlüssel ohne Ausfallzeit ersetzen.
Antwortobjekte
Alle Objekte, die die Endpunkte zurückgeben, mit jedem ihrer Felder.
Detection
| Feld | Typ | Beschreibung |
|---|---|---|
| figure | number | Die Einschätzung auf einer Skala von 0 bis 100, wie wahrscheinlich der Text maschinell geschrieben wurde. Karten und Berichte auf der Website zeigen die Mitte zwischen low und high, die von diesem Wert abweichen kann. |
| low | number | Die Untergrenze der Spanne um den Wert. |
| high | number | Die Obergrenze der Spanne um den Wert. |
| uncertainty | number | Die halbe Breite der Spanne in Punkten. |
| verdict | string | Der Bereich, in dem der Wert liegt. Er beschreibt nur den Wert und sagt nichts darüber aus, wer den Text geschrieben hat. Zulässige Werte: human, uncertain, ai. |
| confidence | string | Wie verlässlich die Einschätzung ist. Zulässige Werte: low, medium, high. |
| sentences | Array aus SentenceScore | Eine Einschätzung je Satz. |
| words | integer | Die Anzahl der geprüften Wörter. |
| language | string | Die Sprache, in der der Text geprüft wurde. |
| model | string | Das Modell, von dem diese Einschätzung stammt. |
| calibrated | boolean | Ob es für diese Sprache eine angepasste Kurve gibt. Bei false den Wert nicht als Ergebnis verwenden. |
| bandHumanFlagRate | number | null | Laut unseren Messungen der Anteil der von Menschen geschriebenen Texte in diesem Bereich, die als maschinell geschrieben eingeschätzt wurden. Null, wenn kein Wert vorliegt. |
SentenceScore
| Feld | Typ | Beschreibung |
|---|---|---|
| text | string | Der Satz. |
| score | number | Ein Wert von 0 bis 1 dafür, wie wahrscheinlich der Satz maschinell geschrieben wurde. |
| verdict | string | Der Bereich, in dem der Satzwert liegt. Zulässige Werte: human, uncertain, ai. |
Usage
| Feld | Typ | Beschreibung |
|---|---|---|
| recorded | boolean | True, wenn die Wortzahl gespeichert wurde. False nur dann, wenn ein Batch die Wörter nicht geprüfter Texte nicht erstatten konnte. In diesem Fall ist nur "words" enthalten. |
| words | integer | Die Anzahl der Wörter, die diese Anfrage gezählt hat. |
| source | string | Woher die Wörter stammen: aus den API-Wörtern des Tarifs, aus dem Wortguthaben oder aus beidem. Zulässige Werte: plan, balance, plan_and_balance. |
| fromPlan | integer | Wörter aus den API-Wörtern des Tarifs. Enthalten, wenn recorded true ist. |
| fromBalance | integer | Wörter aus dem Wortguthaben. Enthalten, wenn recorded true ist. |
| allowanceLeft | integer | null | Die verbleibenden Wörter des Tarifs für dieses Tool im laufenden Abrechnungszeitraum nach dieser Anfrage. Null, wenn der Tarif für das Tool kein Wortkontingent hat. Enthalten, wenn recorded true ist. |
| balance | integer | Das verbleibende Wortguthaben nach dieser Anfrage. Enthalten, wenn recorded true ist. |
RewriteResult
| Feld | Typ | Beschreibung |
|---|---|---|
| text | string | Der umgeschriebene Text. |
| before | Detection | Die Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt. |
| after | Detection | Die Einschätzung des Detektors für den umgeschriebenen Text oder null. |
| passes | integer | Die Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde. |
| facts | object | Die Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist. |
| late | boolean | True, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren. |
GrammarIssue
| Feld | Typ | Beschreibung |
|---|---|---|
| offset | integer | Der Beginn des Fehlers im gesendeten Text, gemessen in UTF-16-Codeeinheiten (wie ein Stringindex in JavaScript). |
| length | integer | Die Anzahl der UTF-16-Codeeinheiten Ihres Textes, über die sich der Fehler erstreckt. |
| message | string | Eine Beschreibung des Problems. |
| shortMessage | string | Eine Kurzfassung der Meldung. |
| category | string | Die Art des Fehlers. Zulässige Werte: grammar, spelling, punctuation, style, typography. |
| replacements | Array aus string | Vorgeschlagene Ersetzungen, die beste zuerst. |
| context | string | Der Text rund um den Fehler. |
BatchResult
| Feld | Typ | Beschreibung |
|---|---|---|
| id | string | Die id des Elements. |
| detection | Detection | Die Einschätzung, falls das Element eine geliefert hat. |
| error | object | Der Grund, warum das Element keine Einschätzung geliefert hat. |
Error
| Feld | Typ | Beschreibung |
|---|---|---|
| error | object | |
| usage | Usage | Die Wörter, die diese Anfrage gezählt hat. |
MCP-Server
Agenten können dieselben Tools über das Model Context Protocol nutzen. Der Server spricht nur mit dieser API, daher erhält ein Agent dieselbe Einschätzung wie die Website.
- detect_textPrüft einen Text.
- detect_batchPrüft mehrere Texte.
- humanize_textSchreibt einen Text mit dem Humanizer um und führt die Faktenprüfung aus.
- paraphrase_textFormuliert einen Text um.
- summarize_textFasst einen Text zusammen.
- check_grammarPrüft Grammatik und Rechtschreibung.
Claude Code Verbindet sich mit dem gehosteten Server
Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:
Führen Sie diesen Befehl im Terminal aus:
Alternativ können Sie es in .mcp.json eintragen:
.mcp.json{ "mcpServers": { "textlume": { "type": "http", "url": "https://textlume.com/api/mcp", "headers": { "Authorization": "Bearer ${TEXTLUME_API_KEY}" } } } }Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Claude Desktop Nutzt die Serverdatei
Laden Sie die Serverdatei herunter und merken Sie sich den Speicherort. Node.js muss installiert sein.
Serverdatei herunterladenÖffnen Sie in der App Settings > Developer > Edit Config.
Fügen Sie Folgendes in claude_desktop_config.json ein:
claude_desktop_config.json{ "mcpServers": { "textlume": { "command": "node", "args": [ "/path/to/server.mjs" ], "env": { "TEXTLUME_API_KEY": "YOUR_API_KEY" } } } }Beenden Sie Claude Desktop und starten Sie die App neu, damit sie den Server lädt.
Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Claude (claude.ai) Demnächst
Die Verbindung mit claude.ai über die Anmeldung in Ihrem Konto bei Textlume kommt bald. Bis dahin funktionieren dieselben Tools bereits in Claude Desktop über die Serverdatei und in Claude Code. Die Einrichtung finden Sie in den jeweiligen Tabs.
Nur wenn Ihre Organisation bei eigenen Konnektoren Request-Header setzen kann: Tragen Sie die Adresse zusammen mit diesem Header ein.
ChatGPT Demnächst
Die Verbindung mit ChatGPT über die Anmeldung in Ihrem Konto bei Textlume kommt bald. Bis dahin funktionieren dieselben Tools bereits in Codex und Claude Code. Die Einrichtung finden Sie in den jeweiligen Tabs.
Codex Verbindet sich mit dem gehosteten Server
Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:
Führen Sie diesen Befehl im Terminal aus:
Alternativ können Sie es in ~/.codex/config.toml eintragen:
~/.codex/config.toml[mcp_servers.textlume] url = "https://textlume.com/api/mcp" bearer_token_env_var = "TEXTLUME_API_KEY"Öffnen Sie in der App MCP servers > Add server > Streamable HTTP.
Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Cursor Verbindet sich mit dem gehosteten Server
Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:
Fügen Sie Folgendes in ~/.cursor/mcp.json ein:
~/.cursor/mcp.json{ "mcpServers": { "textlume": { "url": "https://textlume.com/api/mcp", "headers": { "Authorization": "Bearer ${env:TEXTLUME_API_KEY}" } } } }Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
VS Code (Copilot) Verbindet sich mit dem gehosteten Server
Fügen Sie Folgendes in .vscode/mcp.json ein:
.vscode/mcp.json{ "inputs": [ { "type": "promptString", "id": "textlume-key", "description": "Textlume API key", "password": true } ], "servers": { "textlume": { "type": "http", "url": "https://textlume.com/api/mcp", "headers": { "Authorization": "Bearer ${input:textlume-key}" } } } }Beim ersten Start des Servers fragt VS Code nach Ihrem Schlüssel und speichert ihn.
Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Windsurf Verbindet sich mit dem gehosteten Server
Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:
Öffnen Sie in der App Cascade > ... > Open MCP config file.
Fügen Sie Folgendes in mcp_config.json ein:
mcp_config.json{ "mcpServers": { "textlume": { "serverUrl": "https://textlume.com/api/mcp", "headers": { "Authorization": "Bearer ${env:TEXTLUME_API_KEY}" } } } }Beenden Sie Windsurf und starten Sie die App neu, damit sie den Server lädt.
Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Gemini CLI Verbindet sich mit dem gehosteten Server
Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:
Führen Sie diesen Befehl im Terminal aus:
Alternativ können Sie es in ~/.gemini/settings.json eintragen:
~/.gemini/settings.json{ "mcpServers": { "textlume": { "httpUrl": "https://textlume.com/api/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }Um die Verbindung zu testen, fragen Sie Ihren Assistenten: "Bitte diesen Absatz mit Textlume prüfen und die Spanne und die Sicherheit nennen."
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Other clients Gehosteter Server, Bridge oder Serverdatei
Ein Client, der sich per HTTP mit entfernten MCP-Servern verbindet, braucht nur diese beiden Angaben:
Ein Client, der nur lokale Server starten kann, erreicht die Adresse trotzdem über die quelloffene Bridge mcp-remote. Dafür ist Node.js nötig:
Oder starten Sie die Serverdatei direkt:
Serverdatei herunterladen
Ihren API-Schlüssel finden Sie im Dashboard unter API. Legen Sie Schlüssel nicht in geteilten Dateien oder Repositorys ab.
Jede Einschätzung, die ein Agent erhält, enthält den Wert, seine Unsicherheit und den Kalibrierungsstand. So kann der Agent erklären, was die Einschätzung bedeutet und wann sie nicht verwendet werden sollte.
API-Schlüssel
Melden Sie sich zuerst an und erstellen Sie dann im Dashboard einen Schlüssel.
Auf dieser Seite werden keine Schlüssel erstellt.
Überblick über API und MCP-Server