Zum Inhalt springen
Entwicklerdokumentation

Die v1-API und der MCP-Server

Alles, was du für API-Aufrufe brauchst: Authentifizierung, alle Endpunkte mit Anfrage und Antwort, Fehler und Limits sowie Beispiele in curl, JavaScript und Python.

Auf dieser Seite

Erste Schritte

Überblick

Die API ist im Pfad versioniert: /api/v1. Jeder Endpunkt nimmt einen POST mit JSON-Body an und antwortet mit JSON, auch bei Fehlern.

Basis-URL https://blurwrite.com

Nur auf der Website, nicht in der API: der Wörterzähler, der Zeichenzähler, die Plagiatsprüfung und der Durchlauf „Mehr Zeit nehmen“ des Humanizers.

Aus dem OpenAPI-Dokument generiert. Hier stehen genau die Routen und Felder, die die API akzeptiert. Das OpenAPI-Dokument

Dein erster Aufruf

Ein Text braucht mindestens 50 Wörter.

Prüfe zuerst "calibrated": Ist der Wert false, gibt es für die Sprache noch keine angepasste Kalibrierungskurve. Der Zahlenwert darf dann nicht als Ergebnis verwendet werden.

Für jeden Wert wird der Datentyp angezeigt. Eine echte Antwort enthält die Analyse deines Textes.

Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
Beispielantwort
{
  "figure": "number, 0 bis 100",
  "low": "number, 0 bis 100",
  "high": "number, 0 bis 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 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

Sende deinen Schlüssel im Authorization-Header als Bearer-Token. Ein Schlüssel in der URL wird abgelehnt.

Ein Schlüssel hat Berechtigungen (Scopes): detect, rewrite, summarize und grammar. Eine Route antwortet mit 403 out_of_scope, wenn dem Schlüssel die passende Berechtigung fehlt.

Authentifizierung
Authorization: Bearer YOUR_API_KEY

Endpunkte

POST /api/v1/detect

Einen Text analysieren. Die Analyse eines Textes: ein Wert von 0 bis 100, der zugehörige Wertebereich, eine Analyse pro Satz und die Angabe, ob die Sprache kalibriert ist.

Berechtigung des Schlüssels: detect

Anfragetext

FeldTypErforderlichBeschreibung
textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
languagestringneinDer Sprachcode, etwa "en" oder "de". Ohne Angabe wird die Sprache aus dem Text erkannt.
contentTypestringneinDie Textart, etwa "essay" oder "email", wenn für die Analyse die entsprechende Kalibrierungskurve verwendet werden soll.

Antwort

FeldTypBeschreibung
figurenumberDer Wert von 0 bis 100: wie wahrscheinlich der Text maschinell verfasst wurde.
lownumberDie untere Grenze des Wertebereichs.
highnumberDie obere Grenze des Wertebereichs.
uncertaintynumberDie halbe Breite des Wertebereichs, in Punkten.
verdictstringDer Bereich, in den der Wert fällt. Eine Einstufung, niemals eine Feststellung darüber, wer den Text geschrieben hat. Einer von: human, uncertain, ai.
confidencestringWie verlässlich die Analyse ist. Einer von: low, medium, high.
sentencesArray aus SentenceScoreEine Analyse pro Satz.
wordsintegerDie analysierten Wörter.
languagestringDie Sprache, als die der Text analysiert wurde.
modelstringDas Modell, das die Analyse erstellt hat.
calibratedbooleanOb es für die Sprache eine angepasste Kalibrierungskurve gibt. Bei false darf der Wert nicht als Ergebnis verwendet werden.
bandHumanFlagRatenumber | nullWie oft menschliche Texte in diesem Bereich bei unseren Messungen als maschinell eingestuft wurden, oder null.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400no_textIm Anfragetext fehlt "text".
422too_shortDer Text unterschreitet die Mindestlänge.
413text_too_longDer Text ist länger, als die Engine in einem Aufruf verarbeiten kann. Teile ihn auf. Es wurden keine Wörter abgezogen.
422not_calibratedDiese Sprache kann noch nicht analysiert werden.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
503engine_startingDie Engine startet gerade und war nicht rechtzeitig bereit. Es wurden keine Wörter abgezogen. Versuche es in einer Minute erneut.
503engine_busyDie Engine war ausgelastet und die Analyse konnte nicht rechtzeitig starten. Analysen für Pro-Nutzer auf der Website haben Vorrang vor API-Aufrufen. Es wurden keine Wörter abgezogen. Versuche es gleich noch einmal.
504engine_timeoutDie Engine konnte den Text nicht rechtzeitig fertig verarbeiten. Es wurden keine Wörter abgezogen. Versuche es erneut oder sende einen kürzeren Text.
429concurrency_limitedFür diesen Schlüssel laufen bereits so viele Aufrufe dieser Art wie erlaubt. Warte, bis einer abgeschlossen ist, oder warte die in Retry-After angegebene Zeit ab.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
Beispielantwort
{
  "figure": "number, 0 bis 100",
  "low": "number, 0 bis 100",
  "high": "number, 0 bis 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 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 analysieren. Mehrere Texte in einem Aufruf, bis zum Batch-Limit. Vor dem Aufruf muss genug Wortkontingent für alle analysierbaren Texte vorhanden sein (50 Wörter oder mehr). Wörter von Texten ohne Analyseergebnis werden anschließend zurückerstattet. Ein Fehler bei einem Text lässt nie den gesamten Batch fehlschlagen.

Berechtigung des Schlüssels: detect

Anfragetext

FeldTypErforderlichBeschreibung
itemsArray aus objectjaDie Texte, jeweils mit eigenem "text" und optionalem "id", "language" und "contentType".
items[].idstringneinDeine eigene ID für den Eintrag, die mit dem Ergebnis zurückgegeben wird. Ohne Angabe wird die Position des Eintrags verwendet.
items[].textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
items[].languagestringneinDer Sprachcode, etwa "en" oder "de". Ohne Angabe wird die Sprache aus dem Text erkannt.
items[].contentTypestringneinDie Textart, etwa "essay" oder "email", wenn für die Analyse die entsprechende Kalibrierungskurve verwendet werden soll.

Antwort

FeldTypBeschreibung
resultsArray aus BatchResultEin Ergebnis pro Eintrag, in der gesendeten Reihenfolge.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400batch_emptyIm Anfragetext fehlt "items", oder die Liste ist leer.
413batch_too_largeDer Batch enthält mehr Einträge als erlaubt.
429concurrency_limitedFür diesen Schlüssel laufen bereits so viele Aufrufe dieser Art wie erlaubt. Warte, bis einer abgeschlossen ist, oder warte die in Retry-After angegebene Zeit ab.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/detect/batch \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"id":"1","text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."},{"id":"2","text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}]}'
Beispielantwort
{
  "results": [
    {
      "id": "string",
      "detection": {
        "figure": "number, 0 bis 100",
        "low": "number, 0 bis 100",
        "high": "number, 0 bis 100",
        "uncertainty": "number",
        "verdict": "human | uncertain | ai",
        "confidence": "low | medium | high",
        "sentences": [
          {
            "text": "string",
            "score": "number, 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 natürlicher formulieren. Der Humanizer mit Faktenprüfung: Zahlen, Namen und Zitate bleiben erhalten. Überarbeitungen, die einen Fakt verändern, werden korrigiert oder gemeldet. Der Modus "custom" (Pro) schreibt in deinem eigenen Stil, der anhand einer Schreibprobe ermittelt wird.

Über die API führt der Humanizer seine Standard-Umschreibung aus. „Mehr Zeit nehmen“ gibt es nur auf der Website.

Berechtigung des Schlüssels: rewrite

Anfragetext

FeldTypErforderlichBeschreibung
textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
modestringneinDer Modus zum Umschreiben. Einer von: natural, formal, simple, academic, creative, shorten, expand, custom. Standard: natural.
style_samplestringneinIm Modus "custom": eine Probe deines eigenen Schreibstils mit 150 bis 2.000 Wörtern, die auf dem Server analysiert wird. Ohne Angabe wird die in deinem Konto gespeicherte Probe verwendet.
tabstringneinDer Tab im Humanizer bestimmt die Sprachebene der umgeschriebenen Fassung. Standard behält die Sprachebene des Ausgangstextes bei. Einer von: standard, academic, professional, casual. Standard: standard.
strengthstringneinRegulär behält Inhalt und Sprachebene bei. Aggressiv kann den Text umstrukturieren und Ausführungen weglassen, behält aber alle Kernaussagen bei. Manche Passagen können ungewohnt klingen. Einer von: regular, aggressive. Standard: regular.
ownTouchstringneinEin Detail, Beispiel oder eine Meinung in deinen eigenen Worten, bis zu 400 Zeichen, das in die umgeschriebene Fassung eingearbeitet wird.
languagestringneinDer Sprachcode, etwa "en" oder "de". Ohne Angabe wird die Sprache aus dem Text erkannt.

Antwort

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Analyse deines Textes, oder null, wenn keine vorliegt.
afterDetectionDie Analyse der Überarbeitung, oder null.
passesintegerWie viele Überarbeitungen erstellt wurden, bevor diese ausgewählt wurde.
factsobjectWas die Faktenprüfungen ergeben haben und warum eine Überarbeitung gegebenenfalls nicht einwandfrei ist.
latebooleantrue, wenn die Überarbeitung beim Erreichen des Zeitlimits mit unvollständigen Prüfungen zurückgegeben wurde.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400no_textIm Anfragetext fehlt "text".
422too_shortDer Text unterschreitet die Mindestlänge.
400unknown_modeDieser Modus wird von der Route nicht angeboten.
400unknown_optionDiesen Tab oder diese Stärke bietet diese Route nicht an.
402plan_requiredDer Modus, der Tab, die Stärke oder die persönliche Anpassung erfordert einen Tarif, den das Konto nicht hat. Der Modus "custom" erfordert Pro. Es wurden keine Wörter abgezogen.
400no_sampleDer Modus "custom" braucht eine Schreibprobe, die mitgesendet oder im Konto gespeichert wird.
400sample_too_shortDie Schreibprobe unterschreitet die Mindestlänge.
400sample_too_longDie Schreibprobe überschreitet die maximale Länge.
429concurrency_limitedFür diesen Schlüssel laufen bereits so viele Aufrufe dieser Art wie erlaubt. Warte, bis einer abgeschlossen ist, oder warte die in Retry-After angegebene Zeit ab.
422no_rewriteDie Engine hat geantwortet, aber kein Entwurf hat die Prüfungen bestanden (leer, eine Ablehnung oder eine Kopie des Textes). Es wurden keine Wörter abgezogen.
503timeoutDie Überarbeitung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter abgezogen.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/humanize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
Beispielantwort
{
  "text": "string",
  "before": {
    "figure": "number, 0 bis 100",
    "low": "number, 0 bis 100",
    "high": "number, 0 bis 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 bis 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 bis 100",
    "low": "number, 0 bis 100",
    "high": "number, 0 bis 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 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 umschreiben. Der Paraphrasierer mit denselben Modi wie das Tool zum Umschreiben.

Berechtigung des Schlüssels: rewrite

Anfragetext

FeldTypErforderlichBeschreibung
textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
modestringneinDer Modus zum Umschreiben. Einer von: standard, fluency, formal, academic, simple, creative, expand, shorten. Standard: standard.
strengthstringneinWie stark die Überarbeitung vom Original abweichen darf. Einer von: readable, balanced, strong. Standard: balanced.
readabilitystringneinDas sprachliche Register für den Text. Einer von: casual, professional, academic, creative. Standard: professional.
purposestringneinDer Zweck des Textes. Einer von: general, essay, article, email, marketing, report, story. Standard: general.
synonymsstringneinWie frei Wörter ersetzt werden dürfen. Einer von: few, some, many. Standard: some.
freezeWordsArray aus stringneinWörter und Formulierungen, die exakt erhalten bleiben müssen: höchstens 25, jeweils bis zu 60 Zeichen. Ihre Wörter zählen zum Wortverbrauch des Aufrufs.
customInstructionstringneinEine kurze eigene Anweisung für die Überarbeitung, mit bis zu 500 Zeichen. Ihre Wörter zählen zum Wortverbrauch des Aufrufs.
languagestringneinDer Sprachcode, etwa "en" oder "de". Ohne Angabe wird die Sprache aus dem Text erkannt.
closedLoopbooleanneinSetze den Wert auf false, um die Prüfschleife zu überspringen. Standard: true.

Antwort

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Analyse deines Textes, oder null, wenn keine vorliegt.
afterDetectionDie Analyse der Überarbeitung, oder null.
passesintegerWie viele Überarbeitungen erstellt wurden, bevor diese ausgewählt wurde.
factsobjectWas die Faktenprüfungen ergeben haben und warum eine Überarbeitung gegebenenfalls nicht einwandfrei ist.
latebooleantrue, wenn die Überarbeitung beim Erreichen des Zeitlimits mit unvollständigen Prüfungen zurückgegeben wurde.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400no_textIm Anfragetext fehlt "text".
422too_shortDer Text unterschreitet die Mindestlänge.
400unknown_modeDieser Modus wird von der Route nicht angeboten.
400option_invalidfreezeWords ist keine Liste von Wörtern oder Formulierungen. Es wurde nichts angerechnet.
400option_too_longfreezeWords oder customInstruction überschreitet das jeweilige Limit. Es wurde nichts angerechnet.
429concurrency_limitedFür diesen Schlüssel laufen bereits so viele Aufrufe dieser Art wie erlaubt. Warte, bis einer abgeschlossen ist, oder warte die in Retry-After angegebene Zeit ab.
422no_rewriteDie Engine hat geantwortet, aber kein Entwurf hat die Prüfungen bestanden (leer, eine Ablehnung oder eine Kopie des Textes). Es wurden keine Wörter abgezogen.
503timeoutDie Überarbeitung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter abgezogen.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/paraphrase \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
Beispielantwort
{
  "text": "string",
  "before": {
    "figure": "number, 0 bis 100",
    "low": "number, 0 bis 100",
    "high": "number, 0 bis 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 bis 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 bis 100",
    "low": "number, 0 bis 100",
    "high": "number, 0 bis 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 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. Der Zusammenfasser liefert Kernsätze, einen Absatz oder Stichpunkte.

Berechtigung des Schlüssels: summarize

Anfragetext

FeldTypErforderlichBeschreibung
textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
modestringneinDie Form der Zusammenfassung. Einer von: key-sentences, paragraph, bullets. Standard: key-sentences.
lengthstringneinDie Länge der Zusammenfassung. Einer von: short, medium, long. Standard: medium.

Antwort

FeldTypBeschreibung
textstringDie Zusammenfassung.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400no_textIm Anfragetext fehlt "text".
422too_shortDer Text unterschreitet die Mindestlänge.
429concurrency_limitedFür diesen Schlüssel laufen bereits so viele Aufrufe dieser Art wie erlaubt. Warte, bis einer abgeschlossen ist, oder warte die in Retry-After angegebene Zeit ab.
503timeoutDie Überarbeitung hat zu lange gedauert und wurde abgebrochen. Es wurden keine Wörter abgezogen.
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/summarize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
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. Probleme mit Grammatik, Rechtschreibung, Zeichensetzung und Stil, jeweils mit ihrer Position im Text und Korrekturvorschlägen.

Berechtigung des Schlüssels: grammar

Anfragetext

FeldTypErforderlichBeschreibung
textstringjaDer Text, der analysiert oder umgeschrieben werden soll.
languagestringneinDer Sprachcode für die Prüfung, etwa "en-US" oder "de-DE". Standard: en-US.

Antwort

FeldTypBeschreibung
issuesArray aus GrammarIssueDie gefundenen Probleme in der Reihenfolge ihres Auftretens.
usageUsageDer Verbrauch dieses Aufrufs.

Zusätzliche Fehler dieser Route

StatusCodeBedeutung
400no_textIm Anfragetext fehlt "text".
503engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
502engine_unavailableDie Engine hat nicht geantwortet. Es wurden keine Wörter abgezogen.
503engine_startingDie Engine startet gerade und war nicht rechtzeitig bereit. Es wurden keine Wörter abgezogen. Versuche es in einer Minute erneut.
504engine_timeoutDie Engine konnte den Text nicht rechtzeitig fertig verarbeiten. Es wurden keine Wörter abgezogen. Versuche es erneut oder sende einen kürzeren Text.
Beispielanfrage
curl -X POST https://blurwrite.com/api/v1/grammar \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Der Ausschuss traf sich am Dienstag, um den Plan für die neue Bibliothek zu besprechen. Die Mitglieder waren sich einig, dass der Lesesaal an Werktagen länger geöffnet bleiben sollte, und baten das Personal, ein Budget für die zusätzlichen Stunden zu erstellen. Bei der nächsten Sitzung geht es um die Kosten, die voraussichtliche Besucherzahl und die Auswirkungen auf den Rest des Gebäudes."}'
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

Ein Fehler antwortet mit seinem HTTP-Status und einem Body in dieser Form. Richte dich nach dem Code; die Nachricht sagt, was schiefging und was als Nächstes zu tun ist.

Fehler, die jede Route zurückgeben kann

StatusCodeBedeutung
401key_in_urlDer Schlüssel wurde in der URL gesendet. Sende ihn im Authorization-Header.
401no_keyEs wurde kein Schlüssel gesendet.
401bad_keyDer Schlüssel ist ungültig oder wurde widerrufen.
403out_of_scopeDem Schlüssel fehlt die Berechtigung für diese Route.
429rate_limitedZu viele Anfragen für diesen Schlüssel. Warte die in Retry-After angegebene Zeit ab.
403plan_lapsedDer Tarif des Kontos enthält die API nicht mehr.
413too_largeDie Anfrage ist zu groß.
400bad_bodyDer Anfragetext ist kein JSON-Objekt.
413too_many_wordsDie Anfrage enthält mehr Wörter als pro Anfrage erlaubt. Teile sie auf. Es wurde nichts angerechnet.
402quota_exhaustedDas API-Wortkontingent des Tarifs für diesen Abrechnungszeitraum ist aufgebraucht und das Zusatzguthaben ist leer. Es wurden keine Wörter abgezogen.
402quota_shortDer Aufruf braucht mehr Wörter, als im API-Wortkontingent des Tarifs und im Guthaben zusammen übrig sind. Es wurden keine Wörter abgezogen.
402monthly_ceilingDas Konto hat sein API-Limit für diesen Abrechnungszeitraum erreicht. Dieses gilt unabhängig vom Guthaben. Es wurden keine Wörter abgezogen.
503store_unavailableDer Schlüssel, der Wortverbrauch des Kontos oder die gespeicherte Schreibprobe konnte gerade nicht gelesen werden, oder diese Bereitstellung hat keinen Kontospeicher. Es wurde nichts ausgeführt und keine Wörter wurden abgezogen.

Eine Anfrage reserviert ihre Wörter vor der Ausführung und gibt sie bei einem Fehler wieder frei. Wenn der Wortverbrauch in diesem Moment nicht gespeichert werden kann, bleiben die Wörter angerechnet: Eine fehlgeschlagene Anfrage weist dann darauf hin und enthält "recorded": false in ihren Verbrauchsdaten. Auch eine Batch-Antwort enthält dann "recorded": false in ihren Verbrauchsdaten. Die Wortzahlen werden nicht geschätzt.

Fehlerantwort
{
  "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

Alle hier angegebenen Werte entsprechen den Limits, die die API durchsetzt.

  • Jeder Schlüssel erlaubt höchstens 60 Anfragen pro 60 Sekunden.
  • Pro Schlüssel können höchstens 4 Aufrufe zur Erkennung (ein Batch zählt als ein Aufruf) und 2 Aufrufe zum natürlicheren Umschreiben, Umformulieren oder Zusammenfassen gleichzeitig laufen. Jeder weitere Aufruf wird mit 429 concurrency_limited und einem Retry-After beantwortet.
  • Wenn die Systeme ausgelastet sind, werden Analysen von Pro-Konten auf der Website vor API-Aufrufen verarbeitet. Ein API-Aufruf muss dann möglicherweise warten.
  • Ein Batch enthält höchstens 50 Texte.
  • Pro Anfrage sind höchstens 20.000 Wörter erlaubt, ob als einzelner Text oder als Batch-Anfrage.
  • Der Detektor prüft in jedem Tarif einzelne Texte mit bis zu 90.000 Zeichen, also etwa 10.000 Wörtern. Bei längeren Texten wird 413 text_too_long zurückgegeben, auch wenn die Anfrage innerhalb des Wortlimits liegt.
  • Ein Konto kann bis zu 5 aktive Schlüssel haben. So lässt sich ein Schlüssel ohne Ausfallzeit austauschen.

Antwortobjekte

Die Objekte, die die Endpunkte zurückgeben, Feld für Feld.

Detection

FeldTypBeschreibung
figurenumberDer Wert von 0 bis 100: wie wahrscheinlich der Text maschinell verfasst wurde.
lownumberDie untere Grenze des Wertebereichs.
highnumberDie obere Grenze des Wertebereichs.
uncertaintynumberDie halbe Breite des Wertebereichs, in Punkten.
verdictstringDer Bereich, in den der Wert fällt. Eine Einstufung, niemals eine Feststellung darüber, wer den Text geschrieben hat. Einer von: human, uncertain, ai.
confidencestringWie verlässlich die Analyse ist. Einer von: low, medium, high.
sentencesArray aus SentenceScoreEine Analyse pro Satz.
wordsintegerDie analysierten Wörter.
languagestringDie Sprache, als die der Text analysiert wurde.
modelstringDas Modell, das die Analyse erstellt hat.
calibratedbooleanOb es für die Sprache eine angepasste Kalibrierungskurve gibt. Bei false darf der Wert nicht als Ergebnis verwendet werden.
bandHumanFlagRatenumber | nullWie oft menschliche Texte in diesem Bereich bei unseren Messungen als maschinell eingestuft wurden, oder null.

SentenceScore

FeldTypBeschreibung
textstringDer Satz.
scorenumberVon 0 bis 1: wie wahrscheinlich der Satz maschinell verfasst wurde.
verdictstringDer Bereich, in den der Satz fällt. Einer von: human, uncertain, ai.

Usage

FeldTypBeschreibung
recordedbooleantrue, wenn der Verbrauch gespeichert wurde. false nur dann, wenn ein Batch seine nicht analysierten Wörter nicht zurückerstatten konnte. Dann ist nur "words" vorhanden.
wordsintegerDie Wörter, die dieser Aufruf verbraucht hat.
sourcestringWoher sie stammen: aus dem API-Wortkontingent des Tarifs, dem Zusatzguthaben oder beidem. Einer von: plan, balance, plan_and_balance.
fromPlanintegerDie vom API-Wortkontingent des Tarifs abgezogenen Wörter. Vorhanden, wenn recorded true ist.
fromBalanceintegerDie vom Zusatzguthaben abgezogenen Wörter. Vorhanden, wenn recorded true ist.
allowanceLeftinteger | nullDie nach diesem Aufruf verbleibenden Wörter des Tarifs für dieses Tool im aktuellen Abrechnungszeitraum. null bei einem Tool ohne eigenes Kontingent in diesem Tarif. Vorhanden, wenn recorded true ist.
balanceintegerDas nach diesem Aufruf verbleibende Zusatzguthaben. Vorhanden, wenn recorded true ist.

RewriteResult

FeldTypBeschreibung
textstringDer umgeschriebene Text.
beforeDetectionDie Analyse deines Textes, oder null, wenn keine vorliegt.
afterDetectionDie Analyse der Überarbeitung, oder null.
passesintegerWie viele Überarbeitungen erstellt wurden, bevor diese ausgewählt wurde.
factsobjectWas die Faktenprüfungen ergeben haben und warum eine Überarbeitung gegebenenfalls nicht einwandfrei ist.
latebooleantrue, wenn die Überarbeitung beim Erreichen des Zeitlimits mit unvollständigen Prüfungen zurückgegeben wurde.

GrammarIssue

FeldTypBeschreibung
offsetintegerDie Startposition des Problems im gesendeten Text, in UTF-16-Codeeinheiten (ein JavaScript-Stringindex).
lengthintegerWie viele UTF-16-Codeeinheiten des gesendeten Textes das Problem umfasst.
messagestringWas nicht stimmt.
shortMessagestringDasselbe in wenigen Worten.
categorystringDie Art des Problems. Einer von: grammar, spelling, punctuation, style, typography.
replacementsArray aus stringKorrekturvorschläge, die besten zuerst.
contextstringDer Text rund um das Problem.

BatchResult

FeldTypBeschreibung
idstringDie ID des Eintrags.
detectionDetectionDie Analyse, sofern der Eintrag eine zurückgegeben hat.
errorobjectWarum der Eintrag keine Analyse zurückgegeben hat.

Error

FeldTypBeschreibung
errorobject
usageUsageDer Verbrauch dieses Aufrufs.
MCP-Server

Der MCP-Server

Ein Agent kann dieselben Tools über das Model Context Protocol aufrufen. Der Server ist ausschließlich ein Client dieser API. Ein Agent erhält also genau dasselbe Analyseergebnis wie auf der Website.

  • detect_textAnalysiert einen Text.
  • detect_batchAnalysiert mehrere Texte.
  • humanize_textSchreibt einen Text natürlicher um und prüft dabei die Fakten.
  • paraphrase_textFormuliert einen Text um.
  • summarize_textFasst einen Text zusammen.
  • check_grammarPrüft Grammatik und Rechtschreibung.

Claude Code Verbindet sich online

  1. Speichere deinen API-Schlüssel dort, wo der Client läuft, in einer Umgebungsvariablen namens BLURWRITE_API_KEY:

    export BLURWRITE_API_KEY="YOUR_API_KEY"
  2. Führe das in einem Terminal aus:

    claude mcp add --transport http blurwrite https://blurwrite.com/api/mcp --header "Authorization: Bearer $BLURWRITE_API_KEY"
  3. Oder trage stattdessen das in .mcp.json ein:

    .mcp.json
    {
      "mcpServers": {
        "blurwrite": {
          "type": "http",
          "url": "https://blurwrite.com/api/mcp",
          "headers": {
            "Authorization": "Bearer ${BLURWRITE_API_KEY}"
          }
        }
      }
    }
  4. Prüfe, ob es funktioniert: Frag deinen Assistenten „Prüfe diesen Absatz mit Blurwrite und nenne mir den Wertebereich und die Vertrauensbewertung.“

Deinen API-Schlüssel findest du in deinem Dashboard unter API. Lege einen Schlüssel nie in einer geteilten Datei oder einem Repository ab.

Jedes Analyseergebnis, das ein Agent erhält, enthält den Messwert, die zugehörige Unsicherheit und den Kalibrierungsstatus. So kann der Agent erklären, was das Ergebnis bedeutet und wann es nicht verwendet werden darf.

Dein Schlüssel

Melde dich an und erstelle dann einen Schlüssel in deinem Dashboard.

Hol dir deinen Schlüssel im Dashboard

Auf dieser Seite werden niemals Schlüssel erstellt.

Was die API und der MCP-Server machen