Naar de inhoud
Documentatie voor ontwikkelaars

De v1-API en de MCP-server

Alles wat je nodig hebt om de API aan te roepen: authenticatie, elk endpoint met het verzoek en antwoord, de fouten en limieten, en voorbeelden in curl, JavaScript en Python.

Op deze pagina

Aan de slag

Overzicht

De API heeft zijn versie in het pad, /api/v1. Elk endpoint neemt een POST met een JSON-body aan en antwoordt met JSON, ook bij fouten.

Basis-URL https://blurwrite.com

Alleen op de site, niet in de API: de woordenteller, de tekenteller, de plagiaatcontrole en de optie "Meer tijd nemen" van de humanizer.

Gegenereerd vanuit het OpenAPI-document, zodat je precies de routes en velden ziet die de API accepteert. Het OpenAPI-document

Je eerste aanroep

Een tekst moet minstens 50 woorden bevatten.

Lees eerst "calibrated": als dit false is, heeft de taal nog geen passende kalibratiecurve en mag je de score niet als resultaat gebruiken.

Elke waarde wordt weergegeven als het bijbehorende type. Een echt antwoord bevat de analyse van je tekst.

Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "figure": "number, 0 tot 100",
  "low": "number, 0 tot 100",
  "high": "number, 0 tot 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 0 tot 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"
  }
}

Authenticatie

Stuur je sleutel in de Authorization-header als bearer-token. Een sleutel in de URL wordt geweigerd.

Een sleutel heeft scopes: detect, rewrite, summarize en grammar. Een route antwoordt met 403 out_of_scope als de sleutel de vereiste scope niet heeft.

Authenticatie
Authorization: Bearer YOUR_API_KEY

Endpoints

POST /api/v1/detect

Analyseer één tekst. De detectoranalyse voor één tekst: een score van 0 tot 100, het bereik daaromheen, een analyse per zin en een indicatie of de taal gekalibreerd is.

Sleutelscope: detect

Verzoekbody

VeldTypeVerplichtBeschrijving
textstringjaDe tekst om te analyseren of te herschrijven.
languagestringneeDe taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid.
contentTypestringneeHet soort tekst, zoals "essay" of "email", als de analyse de curve voor dat teksttype moet gebruiken.

Antwoord

VeldTypeBeschrijving
figurenumberDe score van 0 tot 100: hoe waarschijnlijk het is dat de tekst door een machine is geschreven.
lownumberDe ondergrens van het bereik rond de score.
highnumberDe bovengrens van het bereik rond de score.
uncertaintynumberDe helft van de breedte van het bereik, in punten.
verdictstringDe categorie waarin de score valt; een categorie, nooit een vaststelling over wie de tekst heeft geschreven. Een van: human, uncertain, ai.
confidencestringHoe betrouwbaar de analyse is. Een van: low, medium, high.
sentencesarray van SentenceScoreEen analyse per zin.
wordsintegerDe geanalyseerde woorden.
languagestringDe taal waarin de tekst is geanalyseerd.
modelstringHet model dat de analyse heeft uitgevoerd.
calibratedbooleanOf de taal een passende kalibratiecurve heeft. Bij false mag de score niet als resultaat worden gebruikt.
bandHumanFlagRatenumber | nullHoe vaak menselijke tekst in deze categorie bij onze metingen als machinaal werd beoordeeld, of null.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400no_textDe body bevat geen "text".
422too_shortDe tekst is korter dan de minimumlengte.
413text_too_longDe tekst is langer dan de engine in één aanroep kan analyseren. Splits de tekst op. Er is niets in rekening gebracht.
422not_calibratedDe taal kan nog niet worden geanalyseerd.
503engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
502engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
503engine_startingDe engine wordt opgestart en was niet op tijd klaar. Er is niets in rekening gebracht. Probeer het over een minuut opnieuw.
503engine_busyDe engine was bezet en de analyse kon niet op tijd starten; Pro-gebruikers op de site krijgen voorrang op API-aanroepen. Er is niets in rekening gebracht. Probeer het zo opnieuw.
504engine_timeoutDe engine heeft de tekst niet op tijd verwerkt. Er is niets in rekening gebracht. Probeer het opnieuw of stuur een kortere tekst.
429concurrency_limitedVoor deze sleutel lopen al zoveel aanroepen van dit type als toegestaan. Wacht tot er één klaar is, of wacht de tijd af die in Retry-After staat.
Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "figure": "number, 0 tot 100",
  "low": "number, 0 tot 100",
  "high": "number, 0 tot 100",
  "uncertainty": "number",
  "verdict": "human | uncertain | ai",
  "confidence": "low | medium | high",
  "sentences": [
    {
      "text": "string",
      "score": "number, 0 tot 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

Analyseer meerdere teksten. Meerdere teksten in één aanroep, tot de batchlimiet. Vooraf moet er genoeg woordtegoed zijn voor elke tekst die geanalyseerd kan worden (50 woorden of meer); de woorden van teksten waarvoor geen analyse wordt teruggegeven, worden achteraf teruggeboekt. Als één tekst mislukt, mislukt de batch niet.

Sleutelscope: detect

Verzoekbody

VeldTypeVerplichtBeschrijving
itemsarray van objectjaDe teksten, elk met een eigen "text" en optioneel een "id", "language" en "contentType".
items[].idstringneeJe eigen id voor het item, die met het resultaat wordt teruggegeven. Als je die weglaat, wordt de positie van het item gebruikt.
items[].textstringjaDe tekst om te analyseren of te herschrijven.
items[].languagestringneeDe taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid.
items[].contentTypestringneeHet soort tekst, zoals "essay" of "email", als de analyse de curve voor dat teksttype moet gebruiken.

Antwoord

VeldTypeBeschrijving
resultsarray van BatchResultEén resultaat per item, in de verzonden volgorde.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400batch_emptyDe body bevat geen "items", of de lijst is leeg.
413batch_too_largeDe batch bevat meer items dan toegestaan.
429concurrency_limitedVoor deze sleutel lopen al zoveel aanroepen van dit type als toegestaan. Wacht tot er één klaar is, of wacht de tijd af die in Retry-After staat.
Voorbeeldverzoek
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":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."},{"id":"2","text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}]}'
Voorbeeldantwoord
{
  "results": [
    {
      "id": "string",
      "detection": {
        "figure": "number, 0 tot 100",
        "low": "number, 0 tot 100",
        "high": "number, 0 tot 100",
        "uncertainty": "number",
        "verdict": "human | uncertain | ai",
        "confidence": "low | medium | high",
        "sentences": [
          {
            "text": "string",
            "score": "number, 0 tot 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

Maak een tekst menselijker. De humanizer met feitencontroles: getallen, namen en citaten blijven behouden, en een herschrijving waarin een feit is gewijzigd, wordt hersteld of gemeld. De modus "custom" (Pro) schrijft in je eigen stijl, op basis van een voorbeeld van je schrijfwerk.

Via de API voert de humanizer zijn standaard herschrijving uit. "Meer tijd nemen" is alleen op de site beschikbaar.

Sleutelscope: rewrite

Verzoekbody

VeldTypeVerplichtBeschrijving
textstringjaDe tekst om te analyseren of te herschrijven.
modestringneeDe herschrijfmodus. Een van: natural, formal, simple, academic, creative, shorten, expand, custom. Standaard: natural.
style_samplestringneeBij de modus "custom": een voorbeeld van je eigen schrijfwerk van 150 tot 2.000 woorden, dat op de server wordt geanalyseerd. Als je dit weglaat, wordt het voorbeeld gebruikt dat in je account is opgeslagen.
tabstringneeHet tabblad van de humanizer: het taalregister waarin de tekst wordt herschreven. Standaard behoudt het taalregister van de oorspronkelijke tekst. Een van: standard, academic, professional, casual. Standaard: standard.
strengthstringneeNormaal behoudt de inhoud en het taalregister. Agressief kan de tekst anders ordenen en toelichtingen weglaten, maar behoudt alle hoofdpunten. Sommige delen kunnen ongebruikelijk klinken. Een van: regular, aggressive. Standaard: regular.
ownTouchstringneeEen detail, voorbeeld of mening in je eigen woorden, van maximaal 400 tekens, dat in de herschreven tekst wordt verwerkt.
languagestringneeDe taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid.

Antwoord

VeldTypeBeschrijving
textstringDe herschreven tekst.
beforeDetectionDe detectoranalyse van je tekst, of null als die er niet is.
afterDetectionDe detectoranalyse van de herschrijving, of null.
passesintegerHoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen.
factsobjectWat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is.
latebooleanTrue als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400no_textDe body bevat geen "text".
422too_shortDe tekst is korter dan de minimumlengte.
400unknown_modeDeze route biedt de gekozen modus niet aan.
400unknown_optionHet tabblad of de sterkte is niet beschikbaar via deze route.
402plan_requiredDe modus, het tabblad, de sterkte of de eigen stijl vereist een abonnement dat het account niet heeft; de modus "custom" vereist Pro. Er is niets in rekening gebracht.
400no_sampleDe modus "custom" vereist een schrijfvoorbeeld, meegestuurd of opgeslagen in het account.
400sample_too_shortHet schrijfvoorbeeld is korter dan de minimumlengte.
400sample_too_longHet schrijfvoorbeeld is langer dan de maximumlengte.
429concurrency_limitedVoor deze sleutel lopen al zoveel aanroepen van dit type als toegestaan. Wacht tot er één klaar is, of wacht de tijd af die in Retry-After staat.
422no_rewriteDe engine heeft geantwoord, maar geen enkele versie kwam door de controles (leeg, een weigering of een kopie van de tekst). Er is niets in rekening gebracht.
503timeoutHet herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht.
503engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
502engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/humanize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "text": "string",
  "before": {
    "figure": "number, 0 tot 100",
    "low": "number, 0 tot 100",
    "high": "number, 0 tot 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 tot 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 tot 100",
    "low": "number, 0 tot 100",
    "high": "number, 0 tot 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 tot 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

Parafraseer een tekst. De parafraseertool, met dezelfde lijst modi als de tool op de site.

Sleutelscope: rewrite

Verzoekbody

VeldTypeVerplichtBeschrijving
textstringjaDe tekst om te analyseren of te herschrijven.
modestringneeDe herschrijfmodus. Een van: standard, fluency, formal, academic, simple, creative, expand, shorten. Standaard: standard.
strengthstringneeHoe ver de herschrijving van het origineel mag afwijken. Een van: readable, balanced, strong. Standaard: balanced.
readabilitystringneeHet register waarin geschreven wordt. Een van: casual, professional, academic, creative. Standaard: professional.
purposestringneeHet doel van de tekst. Een van: general, essay, article, email, marketing, report, story. Standaard: general.
synonymsstringneeHoe vrij woorden vervangen mogen worden. Een van: few, some, many. Standaard: some.
freezeWordsarray van stringneeWoorden en zinsdelen die exact behouden moeten blijven: maximaal 25, elk tot 60 tekens. Deze woorden tellen mee voor het woordverbruik van de aanroep.
customInstructionstringneeEen korte eigen instructie voor de herschrijving, tot 500 tekens. De woorden daarin tellen mee voor het woordverbruik van de aanroep.
languagestringneeDe taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid.
closedLoopbooleanneeStel in op false om de gesloten controlelus over te slaan. Standaard: true.

Antwoord

VeldTypeBeschrijving
textstringDe herschreven tekst.
beforeDetectionDe detectoranalyse van je tekst, of null als die er niet is.
afterDetectionDe detectoranalyse van de herschrijving, of null.
passesintegerHoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen.
factsobjectWat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is.
latebooleanTrue als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400no_textDe body bevat geen "text".
422too_shortDe tekst is korter dan de minimumlengte.
400unknown_modeDeze route biedt de gekozen modus niet aan.
400option_invalidfreezeWords is geen lijst met woorden of zinsdelen. Er is niets meegeteld.
400option_too_longfreezeWords of customInstruction overschrijdt de limiet. Er is niets meegeteld.
429concurrency_limitedVoor deze sleutel lopen al zoveel aanroepen van dit type als toegestaan. Wacht tot er één klaar is, of wacht de tijd af die in Retry-After staat.
422no_rewriteDe engine heeft geantwoord, maar geen enkele versie kwam door de controles (leeg, een weigering of een kopie van de tekst). Er is niets in rekening gebracht.
503timeoutHet herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht.
503engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
502engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/paraphrase \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "text": "string",
  "before": {
    "figure": "number, 0 tot 100",
    "low": "number, 0 tot 100",
    "high": "number, 0 tot 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 tot 1",
        "verdict": "human | uncertain | ai"
      }
    ],
    "words": "integer",
    "language": "string",
    "model": "string",
    "calibrated": "boolean",
    "bandHumanFlagRate": "number | null"
  },
  "after": {
    "figure": "number, 0 tot 100",
    "low": "number, 0 tot 100",
    "high": "number, 0 tot 100",
    "uncertainty": "number",
    "verdict": "human | uncertain | ai",
    "confidence": "low | medium | high",
    "sentences": [
      {
        "text": "string",
        "score": "number, 0 tot 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

Vat een tekst samen. De samenvatter, met kernzinnen, een alinea of een opsomming.

Sleutelscope: summarize

Verzoekbody

VeldTypeVerplichtBeschrijving
textstringjaDe tekst om te analyseren of te herschrijven.
modestringneeDe vorm van de samenvatting. Een van: key-sentences, paragraph, bullets. Standaard: key-sentences.
lengthstringneeDe lengte van de samenvatting. Een van: short, medium, long. Standaard: medium.

Antwoord

VeldTypeBeschrijving
textstringDe samenvatting.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400no_textDe body bevat geen "text".
422too_shortDe tekst is korter dan de minimumlengte.
429concurrency_limitedVoor deze sleutel lopen al zoveel aanroepen van dit type als toegestaan. Wacht tot er één klaar is, of wacht de tijd af die in Retry-After staat.
503timeoutHet herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht.
503engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
502engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/summarize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "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

Controleer grammatica. Problemen met grammatica, spelling, interpunctie en stijl, elk met de plek in de tekst en voorgestelde vervangingen.

Sleutelscope: grammar

Verzoekbody

VeldTypeVerplichtBeschrijving
textstringjaDe tekst om te analyseren of te herschrijven.
languagestringneeDe taalcode voor de controle, zoals "en-US" of "de-DE". Standaard: en-US.

Antwoord

VeldTypeBeschrijving
issuesarray van GrammarIssueDe gevonden problemen, in de volgorde waarin ze voorkomen.
usageUsageHet verbruik van deze aanroep.

Extra fouten voor deze route

StatusCodeBetekenis
400no_textDe body bevat geen "text".
503engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
502engine_unavailableDe engine heeft niet geantwoord. Er is niets in rekening gebracht.
503engine_startingDe engine wordt opgestart en was niet op tijd klaar. Er is niets in rekening gebracht. Probeer het over een minuut opnieuw.
504engine_timeoutDe engine heeft de tekst niet op tijd verwerkt. Er is niets in rekening gebracht. Probeer het opnieuw of stuur een kortere tekst.
Voorbeeldverzoek
curl -X POST https://blurwrite.com/api/v1/grammar \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"De commissie kwam dinsdag bijeen om het plan voor de nieuwe bibliotheek te bespreken. De leden waren het erover eens dat de leeszaal op weekdagen langer open moest blijven en vroegen het personeel om een begroting voor de extra uren op te stellen. Tijdens de volgende vergadering worden de kosten, het verwachte aantal bezoekers en de gevolgen voor de rest van het gebouw besproken."}'
Voorbeeldantwoord
{
  "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"
  }
}

Naslag

Fouten

Een fout antwoordt met zijn HTTP-status en een body in deze vorm. Ga uit van de code; het bericht zegt wat er misging en wat je nu kunt doen.

Fouten die elke route kan teruggeven

StatusCodeBetekenis
401key_in_urlDe sleutel is in de URL verzonden. Stuur hem in de Authorization-header.
401no_keyEr is geen sleutel verzonden.
401bad_keyDe sleutel is ongeldig of ingetrokken.
403out_of_scopeDe sleutel heeft niet de scope die deze route vereist.
429rate_limitedTe veel verzoeken voor deze sleutel. Wacht de tijd af die in Retry-After staat.
403plan_lapsedHet abonnement van het account bevat de API niet meer.
413too_largeHet verzoek is te groot.
400bad_bodyDe body is geen JSON-object.
413too_many_wordsHet verzoek bevat meer woorden dan per verzoek is toegestaan. Splits het op. Er is niets meegeteld.
402quota_exhaustedDe API-woorden van het abonnement voor deze factureringsperiode zijn op en het extra woordtegoed is leeg. Er is niets in rekening gebracht.
402quota_shortDe aanroep vereist meer woorden dan de resterende API-woorden van het abonnement en het extra woordtegoed samen. Er is niets in rekening gebracht.
402monthly_ceilingHet account heeft de API-limiet voor deze factureringsperiode bereikt. Die geldt ongeacht het resterende woordtegoed. Er is niets in rekening gebracht.
503store_unavailableDe sleutel, het woordtegoed van het account of het opgeslagen schrijfvoorbeeld kon niet worden opgehaald, of deze implementatie heeft geen accountopslag. Er is niets uitgevoerd of in rekening gebracht.

Een aanroep reserveert de benodigde woorden vóór de uitvoering en geeft ze terug als de uitvoering mislukt. Als het woordensaldo op dat moment niet kan worden bijgewerkt, blijven de woorden in rekening gebracht. Een mislukte aanroep vermeldt dat dan en bevat "recorded": false in de gebruiksgegevens. Ook een batch bevat dan "recorded": false in de gebruiksgegevens. Het woordenaantal wordt niet geschat.

Foutantwoord
{
  "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"
  }
}

Limieten

Alle waarden hier worden door de API afgedwongen.

  • Elke sleutel kan maximaal 60 verzoeken per 60 seconden doen.
  • Per sleutel kunnen maximaal 4 detect-aanroepen (een batch telt als één) en 2 humanize-, paraphrase- of summarize-aanroepen tegelijk worden uitgevoerd; een extra aanroep krijgt als antwoord 429 concurrency_limited met een Retry-After.
  • Wanneer de engines druk zijn, krijgen analyses van Pro-accounts op de site voorrang op API-aanroepen. Een API-aanroep moet dan mogelijk op zijn beurt wachten.
  • Een batch bevat maximaal 50 teksten.
  • Per verzoek zijn maximaal 20.000 woorden toegestaan, voor één tekst of een hele batch.
  • De detector leest per tekst maximaal 90.000 tekens, ongeveer 10.000 woorden, bij elk abonnement. Een langere tekst levert de fout 413 text_too_long op, ook als het verzoek binnen de woordlimiet blijft.
  • Een account kan maximaal 5 actieve sleutels hebben, zodat je een sleutel kunt vervangen zonder onderbreking.

Antwoordobjecten

De objecten die de endpoints teruggeven, veld voor veld.

Detection

VeldTypeBeschrijving
figurenumberDe score van 0 tot 100: hoe waarschijnlijk het is dat de tekst door een machine is geschreven.
lownumberDe ondergrens van het bereik rond de score.
highnumberDe bovengrens van het bereik rond de score.
uncertaintynumberDe helft van de breedte van het bereik, in punten.
verdictstringDe categorie waarin de score valt; een categorie, nooit een vaststelling over wie de tekst heeft geschreven. Een van: human, uncertain, ai.
confidencestringHoe betrouwbaar de analyse is. Een van: low, medium, high.
sentencesarray van SentenceScoreEen analyse per zin.
wordsintegerDe geanalyseerde woorden.
languagestringDe taal waarin de tekst is geanalyseerd.
modelstringHet model dat de analyse heeft uitgevoerd.
calibratedbooleanOf de taal een passende kalibratiecurve heeft. Bij false mag de score niet als resultaat worden gebruikt.
bandHumanFlagRatenumber | nullHoe vaak menselijke tekst in deze categorie bij onze metingen als machinaal werd beoordeeld, of null.

SentenceScore

VeldTypeBeschrijving
textstringDe zin.
scorenumberVan 0 tot 1, hoe waarschijnlijk het is dat de zin door een machine is geschreven.
verdictstringDe categorie waarin de zin valt. Een van: human, uncertain, ai.

Usage

VeldTypeBeschrijving
recordedbooleanTrue als het verbruik is vastgelegd. Alleen false als een batch de niet-geanalyseerde woorden niet kon terugboeken; dan is alleen "words" aanwezig.
wordsintegerDe woorden die deze aanroep heeft verbruikt.
sourcestringWaar ze vandaan kwamen: de API-woorden van het abonnement, het extra woordtegoed of beide. Een van: plan, balance, plan_and_balance.
fromPlanintegerDe woorden die van de API-woorden van het abonnement zijn afgetrokken. Aanwezig als recorded true is.
fromBalanceintegerDe woorden die van het extra woordtegoed zijn afgetrokken. Aanwezig als recorded true is.
allowanceLeftinteger | nullDe resterende abonnementswoorden voor deze tool na deze aanroep, in de huidige factureringsperiode. Null voor een tool zonder woordtegoed in dit abonnement. Aanwezig als recorded true is.
balanceintegerHet resterende extra woordtegoed na deze aanroep. Aanwezig als recorded true is.

RewriteResult

VeldTypeBeschrijving
textstringDe herschreven tekst.
beforeDetectionDe detectoranalyse van je tekst, of null als die er niet is.
afterDetectionDe detectoranalyse van de herschrijving, of null.
passesintegerHoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen.
factsobjectWat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is.
latebooleanTrue als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren.

GrammarIssue

VeldTypeBeschrijving
offsetintegerWaar het probleem begint in de verzonden tekst, in UTF-16-code-eenheden (een JavaScript-stringindex).
lengthintegerHoeveel UTF-16-code-eenheden van de verzonden tekst het probleem beslaat.
messagestringWat er mis is.
shortMessagestringHetzelfde, in een paar woorden.
categorystringHet soort probleem. Een van: grammar, spelling, punctuation, style, typography.
replacementsarray van stringVoorgestelde vervangingen, de beste eerst.
contextstringDe tekst rond het probleem.

BatchResult

VeldTypeBeschrijving
idstringDe id van het item.
detectionDetectionDe analyse, als die voor het item is teruggegeven.
errorobjectWaarom er voor het item geen analyse is teruggegeven.

Error

VeldTypeBeschrijving
errorobject
usageUsageHet verbruik van deze aanroep.
MCP-server

De MCP-server

Een agent kan dezelfde tools aanroepen via het Model Context Protocol. De server is uitsluitend een client van deze API, dus een agent krijgt precies dezelfde analyse als op de site.

  • detect_textAnalyseert één tekst.
  • detect_batchAnalyseert meerdere teksten.
  • humanize_textMaakt een tekst menselijker, inclusief feitencontroles.
  • paraphrase_textParafraseert een tekst.
  • summarize_textVat een tekst samen.
  • check_grammarControleert grammatica en spelling.

Claude Code Verbindt online

  1. Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:

    export BLURWRITE_API_KEY="YOUR_API_KEY"
  2. Voer dit uit in een terminal:

    claude mcp add --transport http blurwrite https://blurwrite.com/api/mcp --header "Authorization: Bearer $BLURWRITE_API_KEY"
  3. Of zet dit in plaats daarvan in .mcp.json:

    .mcp.json
    {
      "mcpServers": {
        "blurwrite": {
          "type": "http",
          "url": "https://blurwrite.com/api/mcp",
          "headers": {
            "Authorization": "Bearer ${BLURWRITE_API_KEY}"
          }
        }
      }
    }
  4. Controleer of het werkt: vraag je assistent "Controleer deze alinea met Blurwrite en geef me de bandbreedte en de betrouwbaarheidsscore."

Je API-sleutel staat in je dashboard onder API. Zet een sleutel nooit in een gedeeld bestand of een repository.

Elke analyse die een agent krijgt, bevat de score, de onzekerheid daaromheen en de kalibratiestatus. Zo kan de agent aangeven wat de analyse betekent en wanneer die niet gebruikt mag worden.

Je sleutel

Log in en maak daarna een sleutel in je dashboard.

Haal je sleutel op in het dashboard

Op deze pagina worden nooit sleutels aangemaakt.

Wat de API en de MCP-server doen