Direkt zum Inhalt
Entwicklerdokumentation

API v1 und der MCP-Server

Wie Sie sich authentifizieren, jeder Endpunkt mit Anfrage und Antwort, Fehler und Limits sowie Beispiele in curl, JavaScript und Python.

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

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.

Beispielanfrage
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."}'
Beispielantwort
{
  "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.

Authentifizierung
Authorization: Bearer YOUR_API_KEY

Endpunkte

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

FeldTypPflichtfeldBeschreibung
textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
languagestringneinEin Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt.
contentTypestringneinDie Textart, etwa "essay" oder "email". Setzen Sie das Feld, wenn die Einschätzung die Kurve für diese Textart verwenden soll.

Antwort

FeldTypBeschreibung
figurenumberDie 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.
lownumberDie Untergrenze der Spanne um den Wert.
highnumberDie Obergrenze der Spanne um den Wert.
uncertaintynumberDie halbe Breite der Spanne in Punkten.
verdictstringDer 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.
confidencestringWie verlässlich die Einschätzung ist. Zulässige Werte: low, medium, high.
sentencesArray aus SentenceScoreEine Einschätzung je Satz.
wordsintegerDie Anzahl der geprüften Wörter.
languagestringDie Sprache, in der der Text geprüft wurde.
modelstringDas Modell, von dem diese Einschätzung stammt.
calibratedbooleanOb es für diese Sprache eine angepasste Kurve gibt. Bei false den Wert nicht als Ergebnis verwenden.
bandHumanFlagRatenumber | nullLaut unseren Messungen der Anteil der von Menschen geschriebenen Texte in diesem Bereich, die als maschinell geschrieben eingeschätzt wurden. Null, wenn kein Wert vorliegt.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400no_textDer Request-Body enthält kein "text".
422too_shortDer Text ist kürzer als die Mindestlänge.
413text_too_longDer 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.
422not_calibratedFür diese Sprache gibt es noch keine Einschätzungen.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
503engine_startingDie Engine war noch im Start und nicht rechtzeitig bereit. Es wurden keine Wörter gezählt. Versuchen Sie es in etwa einer Minute erneut.
503engine_busyDie 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.
504engine_timeoutDie 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.
429concurrency_limitedFü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.
Beispielanfrage
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."}'
Beispielantwort
{
  "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

FeldTypPflichtfeldBeschreibung
itemsArray aus objectjaDie zu prüfenden Texte. Jedes Element hat ein eigenes "text" und kann zusätzlich "id", "language" und "contentType" enthalten.
items[].idstringneinEine frei wählbare id, die mit dem Ergebnis des Elements zurückkommt. Ohne Angabe gilt die Position des Elements in der Liste.
items[].textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
items[].languagestringneinEin Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt.
items[].contentTypestringneinDie Textart, etwa "essay" oder "email". Setzen Sie das Feld, wenn die Einschätzung die Kurve für diese Textart verwenden soll.

Antwort

FeldTypBeschreibung
resultsArray aus BatchResultEin Ergebnis pro Element, in der Reihenfolge, in der die Elemente gesendet wurden.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400batch_emptyDer Request-Body enthält kein "items", oder die Liste ist leer.
413batch_too_largeDer Batch enthält mehr Elemente, als das Limit erlaubt.
429concurrency_limitedFü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.
Beispielanfrage
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."}]}'
Beispielantwort
{
  "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

FeldTypPflichtfeldBeschreibung
textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
modestringneinDer Modus der Umschreibung. Zulässige Werte: natural, formal, simple, academic, creative, shorten, expand, custom. Standardwert: natural.
style_samplestringneinFü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.
tabstringneinDer 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.
strengthstringneinNormal 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.
ownTouchstringneinEin Detail, ein Beispiel oder eine Meinung in Ihren eigenen Worten, bis zu 400 Zeichen, das in den umgeschriebenen Text eingearbeitet wird.
languagestringneinEin Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt.

Antwort

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt.
afterDetectionDie Einschätzung des Detektors für den umgeschriebenen Text oder null.
passesintegerDie Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde.
factsobjectDie Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist.
latebooleanTrue, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400no_textDer Request-Body enthält kein "text".
422too_shortDer Text ist kürzer als die Mindestlänge.
400unknown_modeDieser Endpunkt bietet den angefragten Modus nicht an.
400unknown_optionDiesen Tab oder diese Stärke bietet dieser Endpunkt nicht an.
402plan_requiredDer 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.
400no_sampleDer Modus "custom" braucht eine Schreibprobe, entweder mit der Anfrage gesendet oder im Konto gespeichert.
400sample_too_shortDie Schreibprobe ist kürzer als die Mindestlänge.
400sample_too_longDie Schreibprobe ist länger als die Höchstlänge.
429concurrency_limitedFü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.
422no_rewriteDie 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.
503timeoutDie Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
Beispielanfrage
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."}'
Beispielantwort
{
  "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

FeldTypPflichtfeldBeschreibung
textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
modestringneinDer Modus der Umschreibung. Zulässige Werte: standard, fluency, formal, academic, simple, creative, expand, shorten. Standardwert: standard.
strengthstringneinWie weit sich die Umschreibung vom Original entfernen darf. Zulässige Werte: readable, balanced, strong. Standardwert: balanced.
readabilitystringneinDas Leseniveau, für das geschrieben wird. Zulässige Werte: casual, professional, academic, creative. Standardwert: professional.
purposestringneinDer Zweck des Textes. Zulässige Werte: general, essay, article, email, marketing, report, story. Standardwert: general.
synonymsstringneinWie frei Wörter durch Synonyme ersetzt werden dürfen. Zulässige Werte: few, some, many. Standardwert: some.
freezeWordsArray aus stringneinWö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.
customInstructionstringneinEine eigene kurze Anweisung für die Umschreibung mit höchstens 500 Zeichen. Ihre Wörter zählen zur Wortsumme der Anfrage.
languagestringneinEin Sprachcode wie "en" oder "de". Ohne Angabe wird die Sprache aus dem Text bestimmt.
closedLoopbooleanneinSetzen Sie den Wert auf false, um den geschlossenen Prüfkreislauf abzuschalten. Standardwert: true.

Antwort

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt.
afterDetectionDie Einschätzung des Detektors für den umgeschriebenen Text oder null.
passesintegerDie Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde.
factsobjectDie Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist.
latebooleanTrue, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400no_textDer Request-Body enthält kein "text".
422too_shortDer Text ist kürzer als die Mindestlänge.
400unknown_modeDieser Endpunkt bietet den angefragten Modus nicht an.
400option_invalidfreezeWords ist keine Liste aus Wörtern oder Wendungen. Es wurde nichts berechnet.
400option_too_longfreezeWords oder customInstruction überschreitet die Grenze. Es wurde nichts berechnet.
429concurrency_limitedFü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.
422no_rewriteDie 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.
503timeoutDie Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
Beispielanfrage
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."}'
Beispielantwort
{
  "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

FeldTypPflichtfeldBeschreibung
textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
modestringneinDie Form der Zusammenfassung. Zulässige Werte: key-sentences, paragraph, bullets. Standardwert: key-sentences.
lengthstringneinDie Länge der Zusammenfassung. Zulässige Werte: short, medium, long. Standardwert: medium.

Antwort

FeldTypBeschreibung
textstringDer Text der Zusammenfassung.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400no_textDer Request-Body enthält kein "text".
422too_shortDer Text ist kürzer als die Mindestlänge.
429concurrency_limitedFü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.
503timeoutDie Umschreibung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter gezählt.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
Beispielanfrage
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."}'
Beispielantwort
{
  "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

FeldTypPflichtfeldBeschreibung
textstringjaDer Text, der geprüft oder umgeschrieben werden soll.
languagestringneinDer Sprachcode für die Prüfung, etwa "en-US" oder "de-DE". Standardwert: en-US.

Antwort

FeldTypBeschreibung
issuesArray aus GrammarIssueDie gefundenen Fehler in der Reihenfolge, in der sie im Text stehen.
usageUsageDie Wörter, die diese Anfrage gezählt hat.

Fehler dieses Endpunkts

StatusCodeBedeutung
400no_textDer Request-Body enthält kein "text".
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter gezählt.
503engine_startingDie Engine war noch im Start und nicht rechtzeitig bereit. Es wurden keine Wörter gezählt. Versuchen Sie es in etwa einer Minute erneut.
504engine_timeoutDie 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.
Beispielanfrage
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."}'
Beispielantwort
{
  "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

StatusCodeBedeutung
401key_in_urlDer Schlüssel stand in der URL. Senden Sie ihn stattdessen im Authorization-Header.
401no_keyDie Anfrage enthielt keinen Schlüssel.
401bad_keyDer Schlüssel ist ungültig oder wurde widerrufen.
403out_of_scopeDem Schlüssel fehlt die Berechtigung, die dieser Endpunkt verlangt.
429rate_limitedDieser Schlüssel hat zu viele Anfragen gesendet. Warten Sie die in Retry-After angegebene Zeit ab.
403plan_lapsedDer aktuelle Tarif des Kontos enthält keinen API-Zugang.
413too_largeDer Request-Body ist zu groß.
400bad_bodyDer Request-Body ist kein JSON-Objekt.
413too_many_wordsDie Anfrage hat mehr Wörter, als eine Anfrage fasst. Teilen Sie sie auf. Es wurde nichts berechnet.
402quota_exhaustedDie 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.
402quota_shortDie 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.
402monthly_ceilingDas Konto hat seine API-Obergrenze für diesen Abrechnungszeitraum erreicht. Die Obergrenze gilt unabhängig vom Wortguthaben. Es wurden keine Wörter gezählt.
503store_unavailableDer 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.

Fehler-Body
{
  "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

FeldTypBeschreibung
figurenumberDie 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.
lownumberDie Untergrenze der Spanne um den Wert.
highnumberDie Obergrenze der Spanne um den Wert.
uncertaintynumberDie halbe Breite der Spanne in Punkten.
verdictstringDer 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.
confidencestringWie verlässlich die Einschätzung ist. Zulässige Werte: low, medium, high.
sentencesArray aus SentenceScoreEine Einschätzung je Satz.
wordsintegerDie Anzahl der geprüften Wörter.
languagestringDie Sprache, in der der Text geprüft wurde.
modelstringDas Modell, von dem diese Einschätzung stammt.
calibratedbooleanOb es für diese Sprache eine angepasste Kurve gibt. Bei false den Wert nicht als Ergebnis verwenden.
bandHumanFlagRatenumber | nullLaut 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

FeldTypBeschreibung
textstringDer Satz.
scorenumberEin Wert von 0 bis 1 dafür, wie wahrscheinlich der Satz maschinell geschrieben wurde.
verdictstringDer Bereich, in dem der Satzwert liegt. Zulässige Werte: human, uncertain, ai.

Usage

FeldTypBeschreibung
recordedbooleanTrue, 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.
wordsintegerDie Anzahl der Wörter, die diese Anfrage gezählt hat.
sourcestringWoher 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.
fromPlanintegerWörter aus den API-Wörtern des Tarifs. Enthalten, wenn recorded true ist.
fromBalanceintegerWörter aus dem Wortguthaben. Enthalten, wenn recorded true ist.
allowanceLeftinteger | nullDie 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.
balanceintegerDas verbleibende Wortguthaben nach dieser Anfrage. Enthalten, wenn recorded true ist.

RewriteResult

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Einschätzung des Detektors für den gesendeten Text oder null, wenn keine vorliegt.
afterDetectionDie Einschätzung des Detektors für den umgeschriebenen Text oder null.
passesintegerDie Anzahl der Umschreibungen, die entstanden sind, bevor diese ausgewählt wurde.
factsobjectDie Befunde der Faktenprüfung, mit Begründung, falls eine Umschreibung nicht einwandfrei ist.
latebooleanTrue, wenn die Umschreibung bei Erreichen ihres Zeitlimits zurückgegeben wurde, bevor alle Prüfungen fertig waren.

GrammarIssue

FeldTypBeschreibung
offsetintegerDer Beginn des Fehlers im gesendeten Text, gemessen in UTF-16-Codeeinheiten (wie ein Stringindex in JavaScript).
lengthintegerDie Anzahl der UTF-16-Codeeinheiten Ihres Textes, über die sich der Fehler erstreckt.
messagestringEine Beschreibung des Problems.
shortMessagestringEine Kurzfassung der Meldung.
categorystringDie Art des Fehlers. Zulässige Werte: grammar, spelling, punctuation, style, typography.
replacementsArray aus stringVorgeschlagene Ersetzungen, die beste zuerst.
contextstringDer Text rund um den Fehler.

BatchResult

FeldTypBeschreibung
idstringDie id des Elements.
detectionDetectionDie Einschätzung, falls das Element eine geliefert hat.
errorobjectDer Grund, warum das Element keine Einschätzung geliefert hat.

Error

FeldTypBeschreibung
errorobject
usageUsageDie Wörter, die diese Anfrage gezählt hat.
MCP-Server

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

  1. Legen Sie Ihren API-Schlüssel auf dem Rechner, auf dem der Client läuft, in einer Umgebungsvariablen namens TEXTLUME_API_KEY ab:

    export TEXTLUME_API_KEY="YOUR_API_KEY"
  2. Führen Sie diesen Befehl im Terminal aus:

    claude mcp add --transport http textlume https://textlume.com/api/mcp --header "Authorization: Bearer $TEXTLUME_API_KEY"
  3. 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}"
          }
        }
      }
    }
  4. 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.

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.

Schlüssel im Dashboard holen

Auf dieser Seite werden keine Schlüssel erstellt.

Überblick über API und MCP-Server