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
- POST /api/v1/detectAnalyseer één tekst
- POST /api/v1/detect/batchAnalyseer meerdere teksten
- POST /api/v1/humanizeMaak een tekst menselijker
- POST /api/v1/paraphraseParafraseer een tekst
- POST /api/v1/summarizeVat een tekst samen
- POST /api/v1/grammarControleer grammatica
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.
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."}'const res = await fetch('https://blurwrite.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"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.
Authorization: Bearer YOUR_API_KEYEndpoints
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
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| text | string | ja | De tekst om te analyseren of te herschrijven. |
| language | string | nee | De taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid. |
| contentType | string | nee | Het soort tekst, zoals "essay" of "email", als de analyse de curve voor dat teksttype moet gebruiken. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| figure | number | De score van 0 tot 100: hoe waarschijnlijk het is dat de tekst door een machine is geschreven. |
| low | number | De ondergrens van het bereik rond de score. |
| high | number | De bovengrens van het bereik rond de score. |
| uncertainty | number | De helft van de breedte van het bereik, in punten. |
| verdict | string | De categorie waarin de score valt; een categorie, nooit een vaststelling over wie de tekst heeft geschreven. Een van: human, uncertain, ai. |
| confidence | string | Hoe betrouwbaar de analyse is. Een van: low, medium, high. |
| sentences | array van SentenceScore | Een analyse per zin. |
| words | integer | De geanalyseerde woorden. |
| language | string | De taal waarin de tekst is geanalyseerd. |
| model | string | Het model dat de analyse heeft uitgevoerd. |
| calibrated | boolean | Of de taal een passende kalibratiecurve heeft. Bij false mag de score niet als resultaat worden gebruikt. |
| bandHumanFlagRate | number | null | Hoe vaak menselijke tekst in deze categorie bij onze metingen als machinaal werd beoordeeld, of null. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | no_text | De body bevat geen "text". |
| 422 | too_short | De tekst is korter dan de minimumlengte. |
| 413 | text_too_long | De tekst is langer dan de engine in één aanroep kan analyseren. Splits de tekst op. Er is niets in rekening gebracht. |
| 422 | not_calibrated | De taal kan nog niet worden geanalyseerd. |
| 503 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 502 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 503 | engine_starting | De engine wordt opgestart en was niet op tijd klaar. Er is niets in rekening gebracht. Probeer het over een minuut opnieuw. |
| 503 | engine_busy | De 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. |
| 504 | engine_timeout | De engine heeft de tekst niet op tijd verwerkt. Er is niets in rekening gebracht. Probeer het opnieuw of stuur een kortere tekst. |
| 429 | concurrency_limited | Voor 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. |
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."}'const res = await fetch('https://blurwrite.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"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
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| items | array van object | ja | De teksten, elk met een eigen "text" en optioneel een "id", "language" en "contentType". |
| items[].id | string | nee | Je eigen id voor het item, die met het resultaat wordt teruggegeven. Als je die weglaat, wordt de positie van het item gebruikt. |
| items[].text | string | ja | De tekst om te analyseren of te herschrijven. |
| items[].language | string | nee | De taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid. |
| items[].contentType | string | nee | Het soort tekst, zoals "essay" of "email", als de analyse de curve voor dat teksttype moet gebruiken. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| results | array van BatchResult | Eén resultaat per item, in de verzonden volgorde. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | batch_empty | De body bevat geen "items", of de lijst is leeg. |
| 413 | batch_too_large | De batch bevat meer items dan toegestaan. |
| 429 | concurrency_limited | Voor 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. |
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."}]}'const res = await fetch('https://blurwrite.com/api/v1/detect/batch', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"items": [
{
"id": "1",
"text": "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."
}
]
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect/batch",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
],
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"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
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| text | string | ja | De tekst om te analyseren of te herschrijven. |
| mode | string | nee | De herschrijfmodus. Een van: natural, formal, simple, academic, creative, shorten, expand, custom. Standaard: natural. |
| style_sample | string | nee | Bij 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. |
| tab | string | nee | Het 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. |
| strength | string | nee | Normaal 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. |
| ownTouch | string | nee | Een detail, voorbeeld of mening in je eigen woorden, van maximaal 400 tekens, dat in de herschreven tekst wordt verwerkt. |
| language | string | nee | De taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| text | string | De herschreven tekst. |
| before | Detection | De detectoranalyse van je tekst, of null als die er niet is. |
| after | Detection | De detectoranalyse van de herschrijving, of null. |
| passes | integer | Hoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen. |
| facts | object | Wat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is. |
| late | boolean | True als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | no_text | De body bevat geen "text". |
| 422 | too_short | De tekst is korter dan de minimumlengte. |
| 400 | unknown_mode | Deze route biedt de gekozen modus niet aan. |
| 400 | unknown_option | Het tabblad of de sterkte is niet beschikbaar via deze route. |
| 402 | plan_required | De 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. |
| 400 | no_sample | De modus "custom" vereist een schrijfvoorbeeld, meegestuurd of opgeslagen in het account. |
| 400 | sample_too_short | Het schrijfvoorbeeld is korter dan de minimumlengte. |
| 400 | sample_too_long | Het schrijfvoorbeeld is langer dan de maximumlengte. |
| 429 | concurrency_limited | Voor 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. |
| 422 | no_rewrite | De 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. |
| 503 | timeout | Het herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht. |
| 503 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 502 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
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."}'const res = await fetch('https://blurwrite.com/api/v1/humanize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/humanize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"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
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| text | string | ja | De tekst om te analyseren of te herschrijven. |
| mode | string | nee | De herschrijfmodus. Een van: standard, fluency, formal, academic, simple, creative, expand, shorten. Standaard: standard. |
| strength | string | nee | Hoe ver de herschrijving van het origineel mag afwijken. Een van: readable, balanced, strong. Standaard: balanced. |
| readability | string | nee | Het register waarin geschreven wordt. Een van: casual, professional, academic, creative. Standaard: professional. |
| purpose | string | nee | Het doel van de tekst. Een van: general, essay, article, email, marketing, report, story. Standaard: general. |
| synonyms | string | nee | Hoe vrij woorden vervangen mogen worden. Een van: few, some, many. Standaard: some. |
| freezeWords | array van string | nee | Woorden en zinsdelen die exact behouden moeten blijven: maximaal 25, elk tot 60 tekens. Deze woorden tellen mee voor het woordverbruik van de aanroep. |
| customInstruction | string | nee | Een korte eigen instructie voor de herschrijving, tot 500 tekens. De woorden daarin tellen mee voor het woordverbruik van de aanroep. |
| language | string | nee | De taalcode, zoals "en" of "de". Als je die weglaat, wordt de taal uit de tekst afgeleid. |
| closedLoop | boolean | nee | Stel in op false om de gesloten controlelus over te slaan. Standaard: true. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| text | string | De herschreven tekst. |
| before | Detection | De detectoranalyse van je tekst, of null als die er niet is. |
| after | Detection | De detectoranalyse van de herschrijving, of null. |
| passes | integer | Hoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen. |
| facts | object | Wat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is. |
| late | boolean | True als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | no_text | De body bevat geen "text". |
| 422 | too_short | De tekst is korter dan de minimumlengte. |
| 400 | unknown_mode | Deze route biedt de gekozen modus niet aan. |
| 400 | option_invalid | freezeWords is geen lijst met woorden of zinsdelen. Er is niets meegeteld. |
| 400 | option_too_long | freezeWords of customInstruction overschrijdt de limiet. Er is niets meegeteld. |
| 429 | concurrency_limited | Voor 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. |
| 422 | no_rewrite | De 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. |
| 503 | timeout | Het herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht. |
| 503 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 502 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
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."}'const res = await fetch('https://blurwrite.com/api/v1/paraphrase', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/paraphrase",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"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
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| text | string | ja | De tekst om te analyseren of te herschrijven. |
| mode | string | nee | De vorm van de samenvatting. Een van: key-sentences, paragraph, bullets. Standaard: key-sentences. |
| length | string | nee | De lengte van de samenvatting. Een van: short, medium, long. Standaard: medium. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| text | string | De samenvatting. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | no_text | De body bevat geen "text". |
| 422 | too_short | De tekst is korter dan de minimumlengte. |
| 429 | concurrency_limited | Voor 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. |
| 503 | timeout | Het herschrijven duurde te lang en is gestopt. Er is niets in rekening gebracht. |
| 503 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 502 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
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."}'const res = await fetch('https://blurwrite.com/api/v1/summarize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/summarize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/grammar
Controleer grammatica. Problemen met grammatica, spelling, interpunctie en stijl, elk met de plek in de tekst en voorgestelde vervangingen.
Sleutelscope: grammar
Verzoekbody
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
| text | string | ja | De tekst om te analyseren of te herschrijven. |
| language | string | nee | De taalcode voor de controle, zoals "en-US" of "de-DE". Standaard: en-US. |
Antwoord
| Veld | Type | Beschrijving |
|---|---|---|
| issues | array van GrammarIssue | De gevonden problemen, in de volgorde waarin ze voorkomen. |
| usage | Usage | Het verbruik van deze aanroep. |
Extra fouten voor deze route
| Status | Code | Betekenis |
|---|---|---|
| 400 | no_text | De body bevat geen "text". |
| 503 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 502 | engine_unavailable | De engine heeft niet geantwoord. Er is niets in rekening gebracht. |
| 503 | engine_starting | De engine wordt opgestart en was niet op tijd klaar. Er is niets in rekening gebracht. Probeer het over een minuut opnieuw. |
| 504 | engine_timeout | De engine heeft de tekst niet op tijd verwerkt. Er is niets in rekening gebracht. Probeer het opnieuw of stuur een kortere tekst. |
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."}'const res = await fetch('https://blurwrite.com/api/v1/grammar', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"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."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/grammar",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"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.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"issues": [
{
"offset": "integer",
"length": "integer",
"message": "string",
"shortMessage": "string",
"category": "grammar | spelling | punctuation | style | typography",
"replacements": [
"string"
],
"context": "string"
}
],
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}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
| Status | Code | Betekenis |
|---|---|---|
| 401 | key_in_url | De sleutel is in de URL verzonden. Stuur hem in de Authorization-header. |
| 401 | no_key | Er is geen sleutel verzonden. |
| 401 | bad_key | De sleutel is ongeldig of ingetrokken. |
| 403 | out_of_scope | De sleutel heeft niet de scope die deze route vereist. |
| 429 | rate_limited | Te veel verzoeken voor deze sleutel. Wacht de tijd af die in Retry-After staat. |
| 403 | plan_lapsed | Het abonnement van het account bevat de API niet meer. |
| 413 | too_large | Het verzoek is te groot. |
| 400 | bad_body | De body is geen JSON-object. |
| 413 | too_many_words | Het verzoek bevat meer woorden dan per verzoek is toegestaan. Splits het op. Er is niets meegeteld. |
| 402 | quota_exhausted | De API-woorden van het abonnement voor deze factureringsperiode zijn op en het extra woordtegoed is leeg. Er is niets in rekening gebracht. |
| 402 | quota_short | De aanroep vereist meer woorden dan de resterende API-woorden van het abonnement en het extra woordtegoed samen. Er is niets in rekening gebracht. |
| 402 | monthly_ceiling | Het account heeft de API-limiet voor deze factureringsperiode bereikt. Die geldt ongeacht het resterende woordtegoed. Er is niets in rekening gebracht. |
| 503 | store_unavailable | De 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.
{
"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
| Veld | Type | Beschrijving |
|---|---|---|
| figure | number | De score van 0 tot 100: hoe waarschijnlijk het is dat de tekst door een machine is geschreven. |
| low | number | De ondergrens van het bereik rond de score. |
| high | number | De bovengrens van het bereik rond de score. |
| uncertainty | number | De helft van de breedte van het bereik, in punten. |
| verdict | string | De categorie waarin de score valt; een categorie, nooit een vaststelling over wie de tekst heeft geschreven. Een van: human, uncertain, ai. |
| confidence | string | Hoe betrouwbaar de analyse is. Een van: low, medium, high. |
| sentences | array van SentenceScore | Een analyse per zin. |
| words | integer | De geanalyseerde woorden. |
| language | string | De taal waarin de tekst is geanalyseerd. |
| model | string | Het model dat de analyse heeft uitgevoerd. |
| calibrated | boolean | Of de taal een passende kalibratiecurve heeft. Bij false mag de score niet als resultaat worden gebruikt. |
| bandHumanFlagRate | number | null | Hoe vaak menselijke tekst in deze categorie bij onze metingen als machinaal werd beoordeeld, of null. |
SentenceScore
| Veld | Type | Beschrijving |
|---|---|---|
| text | string | De zin. |
| score | number | Van 0 tot 1, hoe waarschijnlijk het is dat de zin door een machine is geschreven. |
| verdict | string | De categorie waarin de zin valt. Een van: human, uncertain, ai. |
Usage
| Veld | Type | Beschrijving |
|---|---|---|
| recorded | boolean | True als het verbruik is vastgelegd. Alleen false als een batch de niet-geanalyseerde woorden niet kon terugboeken; dan is alleen "words" aanwezig. |
| words | integer | De woorden die deze aanroep heeft verbruikt. |
| source | string | Waar ze vandaan kwamen: de API-woorden van het abonnement, het extra woordtegoed of beide. Een van: plan, balance, plan_and_balance. |
| fromPlan | integer | De woorden die van de API-woorden van het abonnement zijn afgetrokken. Aanwezig als recorded true is. |
| fromBalance | integer | De woorden die van het extra woordtegoed zijn afgetrokken. Aanwezig als recorded true is. |
| allowanceLeft | integer | null | De 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. |
| balance | integer | Het resterende extra woordtegoed na deze aanroep. Aanwezig als recorded true is. |
RewriteResult
| Veld | Type | Beschrijving |
|---|---|---|
| text | string | De herschreven tekst. |
| before | Detection | De detectoranalyse van je tekst, of null als die er niet is. |
| after | Detection | De detectoranalyse van de herschrijving, of null. |
| passes | integer | Hoeveel herschrijvingen er zijn gemaakt voordat deze werd gekozen. |
| facts | object | Wat de feitencontroles hebben gevonden en waarom een herschrijving niet foutloos is als dat het geval is. |
| late | boolean | True als de herschrijving bij het bereiken van de tijdslimiet werd teruggegeven terwijl de controles nog niet klaar waren. |
GrammarIssue
| Veld | Type | Beschrijving |
|---|---|---|
| offset | integer | Waar het probleem begint in de verzonden tekst, in UTF-16-code-eenheden (een JavaScript-stringindex). |
| length | integer | Hoeveel UTF-16-code-eenheden van de verzonden tekst het probleem beslaat. |
| message | string | Wat er mis is. |
| shortMessage | string | Hetzelfde, in een paar woorden. |
| category | string | Het soort probleem. Een van: grammar, spelling, punctuation, style, typography. |
| replacements | array van string | Voorgestelde vervangingen, de beste eerst. |
| context | string | De tekst rond het probleem. |
BatchResult
| Veld | Type | Beschrijving |
|---|---|---|
| id | string | De id van het item. |
| detection | Detection | De analyse, als die voor het item is teruggegeven. |
| error | object | Waarom er voor het item geen analyse is teruggegeven. |
Error
| Veld | Type | Beschrijving |
|---|---|---|
| error | object | |
| usage | Usage | Het verbruik van deze aanroep. |
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
Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:
Voer dit uit in een terminal:
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}" } } } }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.
Claude Desktop Gebruikt het serverbestand
Download het serverbestand en onthoud waar je het hebt opgeslagen. Het heeft Node.js nodig.
Serverbestand downloadenIn de app: Settings > Developer > Edit Config.
Voeg dit toe aan claude_desktop_config.json:
claude_desktop_config.json{ "mcpServers": { "blurwrite": { "command": "node", "args": [ "/path/to/server.mjs" ], "env": { "BLURWRITE_API_KEY": "YOUR_API_KEY" } } } }Sluit Claude Desktop af en start het opnieuw, zodat de server wordt geladen.
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.
Claude (claude.ai) Binnenkort
claude.ai verbinden door in te loggen op je Blurwrite-account komt binnenkort. Tot die tijd werken dezelfde tools nu al in Claude Desktop met het serverbestand, of in Claude Code, met de instellingen in hun tabbladen.
Alleen als je organisatie de optie voor request-headers bij aangepaste connectors heeft: voeg het adres toe met deze header.
ChatGPT Binnenkort
ChatGPT verbinden door in te loggen op je Blurwrite-account komt binnenkort. Tot die tijd werken dezelfde tools nu al in Codex en Claude Code, met de instellingen in hun tabbladen.
Codex Verbindt online
Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:
Voer dit uit in een terminal:
Of zet dit in plaats daarvan in ~/.codex/config.toml:
~/.codex/config.toml[mcp_servers.blurwrite] url = "https://blurwrite.com/api/mcp" bearer_token_env_var = "BLURWRITE_API_KEY"In de app: MCP servers > Add server > Streamable HTTP.
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.
Cursor Verbindt online
Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:
Voeg dit toe aan ~/.cursor/mcp.json:
~/.cursor/mcp.json{ "mcpServers": { "blurwrite": { "url": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${env:BLURWRITE_API_KEY}" } } } }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.
VS Code (Copilot) Verbindt online
Voeg dit toe aan .vscode/mcp.json:
.vscode/mcp.json{ "inputs": [ { "type": "promptString", "id": "blurwrite-key", "description": "Blurwrite API key", "password": true } ], "servers": { "blurwrite": { "type": "http", "url": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${input:blurwrite-key}" } } } }Als de server start, vraagt VS Code één keer om je sleutel en onthoudt die.
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.
Windsurf Verbindt online
Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:
In de app: Cascade > ... > Open MCP config file.
Voeg dit toe aan mcp_config.json:
mcp_config.json{ "mcpServers": { "blurwrite": { "serverUrl": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${env:BLURWRITE_API_KEY}" } } } }Sluit Windsurf af en start het opnieuw, zodat de server wordt geladen.
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.
Gemini CLI Verbindt online
Bewaar je API-sleutel in een omgevingsvariabele met de naam BLURWRITE_API_KEY, op de plek waar de client draait:
Voer dit uit in een terminal:
Of zet dit in plaats daarvan in ~/.gemini/settings.json:
~/.gemini/settings.json{ "mcpServers": { "blurwrite": { "httpUrl": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }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.
Other clients Online, een brug of het bestand
Een client die via HTTP verbinding maakt met externe MCP-servers, heeft alleen deze twee waarden nodig:
Een client die alleen lokale servers start, kan het adres bereiken via de opensource-brug mcp-remote (die heeft Node.js nodig):
Of start ons serverbestand zelf:
Serverbestand downloaden
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