API-documentatie

Herschrijven, grammatica checken, samenvatten, vertalen en plagiaatcontrole in 56 talen. Eenvoudige REST, geleverd vanaf de edge van Cloudflare.

Same-origin
De API bedient op dit moment alleen verzoeken van adeptwrite.com zelf (geen CORS-headers). Externe toegang met API-sleutels staat gepland samen met het Pro-abonnement. Deze documentatie verschijnt alvast, zodat het contract openligt en je je kunt voorbereiden.
Samenvatting

De AdeptWrite v1-API heeft drie werkende endpoints. POST /api/v1/run neemt JSON met task, mode, lang en text (maximaal 6.000 tekens) en geeft platte tekst terug van een Cloudflare Workers AI-model dat per taal wordt gekozen; POST /api/v1/plagiarism vergelijkt een tekst met open bronnen en toont elke doorzochte bron; GET /api/v1/health geeft de status van de dienst. Tekst wordt nooit bewaard of gelogd en AI-verzoeken zijn beperkt tot 30 per minuut per IP-adres.

Basis

  • Basis-URL: https://adeptwrite.com/api/v1
  • Formaat: verzoeken en antwoorden zijn JSON (Content-Type: application/json, UTF-8).
  • Authenticatie: nog geen; verzoeken moeten van adeptwrite.com-pagina’s komen (same-origin). API-sleutels komen met Pro.
  • Privacy: het veld text wordt nooit bewaard of gelogd; antwoorden hebben Cache-Control: no-store. Zie het privacybeleid.
  • Versies: het pad /v1/ verandert niet op een niet-compatibele manier; ingrijpende wijzigingen komen onder /v2/.

POST/api/v1/run

Voert één AI-taak uit op een tekst en geeft het resultaat als platte tekst terug (zonder inleiding, zonder Markdown-blokken).

Verzoek

FieldTypeRequiredNotes
taskstring✓Naam van de taak; zie de takenlijst hieronder.
textstring✓Invoertekst, 1–6.000 tekens.
langstring✓Taal van het resultaat: een van de 56 taalcodes van de site (en, nl, id, ja, pt-pt, zh-hant…; BCP 47-tags zoals pt-BR worden omgezet) of auto voor "dezelfde taal als de invoer".
modestring—Een modus van die tool, bijvoorbeeld Formal, Akademik, Ringkas of Poin-poin (de modusnamen zijn de Indonesische registerlabels). Wordt genegeerd bij taken zonder modi.
optionsobject—Taakspecifieke opties: from / to voor translate (elke ondersteunde taal naar elke andere; from mag auto zijn; sr-Cyrl vraagt om Servisch in het Cyrillisch), platform (instagram / tiktok / linkedin) voor caption, en optionele gelabelde fields voor bio, coverletter en meta. Andere sleutels worden genegeerd.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "nl",
  "text": "Goed schrijven is belangrijk voor studenten.",
  "options": {}
}

Antwoord

Status 200 met ok: true, het resultaat in output, het model dat echt antwoordde in model (dat verschilt als een terugvalmodel het overnam) en de verwerkingstijd in milliseconden. truncated: true wordt toegevoegd als het antwoord zijn lengtebudget of tijdslimiet bereikte en is afgekapt.

{
  "ok": true,
  "output": "Het is voor studenten van belang dat zij goed kunnen schrijven.",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

Voorbeeld: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"nl","text":"Hij word morgen opgehaald door zijn buurman."}'

Voorbeeld: JavaScript (fetch)

const res = await fetch('/api/v1/run', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ task: 'summarize', mode: 'Poin-poin', lang: 'nl', text }),
});
const data = await res.json();
if (!data.ok) throw new Error(data.error.code + ': ' + data.error.message);
console.log(data.output);

POST/api/v1/plagiarism

Kiest 4–8 kenmerkende zinsneden uit de tekst, doorzoekt open bronnen in de taal van de tekst (Wikipedia, Wikisource, volledige tekst van het Internet Archive, Europe PMC, DOAJ, arXiv; een webzoekdienst alleen als die is ingesteld en gevraagd) en berekent de overlap. Alleen die korte zinsneden verlaten de server.

Verzoek

FieldTypeRequiredNotes
textstring✓Minimaal 30 woorden, maximaal 6.000 tekens.
langstring✓Een taalcode van de site of auto.
optionsobject—web: true raadpleegt ook de webzoekdienst als de beheerder er een heeft ingesteld; webSearched in het antwoord zegt of die echt antwoordde.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…minimaal 30 woorden…", "lang": "nl", "options": { "web": false } }

Antwoord

Status 200 met score (overeenkomende woorden ÷ woorden, 0–1), matches per bron met gemarkeerde passages (tekenposities in je tekst), sourcesSearched (precies de bronnen waarvan de antwoorden in het resultaat zitten), sourcesSkipped met een reden en webSearched.

{
  "ok": true,
  "score": 0.42,
  "words": 52,
  "matchedWords": 22,
  "matches": [{ "source": "wikipedia", "title": "…", "url": "https://nl.wikipedia.org/wiki/…",
                "matchedWords": 22, "passages": [{ "start": 0, "end": 131, "text": "…" }] }],
  "sourcesSearched": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj"],
  "sourcesSkipped": [],
  "webSearched": false,
  "ms": 2310
}

Voorbeeld: curl

curl -X POST https://adeptwrite.com/api/v1/plagiarism \
  -H "Content-Type: application/json" \
  -d '{"lang":"nl","text":"…minimaal 30 woorden…"}'

GET/api/v1/health

Meldt welke diensten aanstaan. Heeft geen body en telt niet mee voor de limiet.

Antwoord

Status 200. ai is false zolang de AI-noodschakelaar aanstaat; plagiarism noemt de bronnen die de checker kan raadplegen; aidetect beschrijft de diepe analyse van de AI-checker op de server, die nog niet is uitgerold (POST /api/v1/aidetect antwoordt 503 disabled; de checker op de site draait in je browser).

{
  "ok": true,
  "ai": true,
  "plagiarism": { "enabled": true, "sources": ["wikipedia", "wikisource", "internet-archive-fts", "europepmc", "doaj", "arxiv"], "web": false },
  "aidetect": { "enabled": false, "judge": false }
}

Voorbeeld: curl

curl https://adeptwrite.com/api/v1/health

Task list

taskWhat it does
paraphraseHerschrijven; modi: Standar (standaard), Formal (formeel), Santai (informeel), Akademik (academisch), Kreatif (creatief), Ringkas (inkorten), Panjangkan (uitbreiden).
grammarCorrectie van grammatica en spelling (voor het Nederlands volgens de Woordenlijst Nederlandse Taal, het Groene Boekje).
toneToon aanpassen; modi: Formal (formeel), Kantor (zakelijk), Santai (informeel).
rewriteStijve of onhandige zinnen verbeteren; modi: Standar, Formal.
resizeZinnen inkorten of uitbreiden; modi: Ringkas (inkorten), Panjangkan (uitbreiden).
essayAlinea’s of een essay opbouwen uit steekwoorden; modi: Akademik, Kreatif, Panjangkan.
summarizeSamenvatting; modi: Poin-poin (opsomming), Paragraf (alinea), Satu kalimat (één zin).
translateVertaling tussen twee ondersteunde talen; options.from (of auto) en options.to; modi: Alami (natuurlijk, standaard), Formal (formeel), Santai (informeel).
thesisIdeeën voor scriptietitels en een hoofdstukindeling.
abstractGestructureerd abstract uit een samenvatting van je onderzoek.
captionCaptions voor sociale media; options.platform: instagram, tiktok, linkedin.
emailE-mails en brieven; modi: Lamaran kerja (sollicitatie), Surat resmi (formele brief), Follow-up (opvolging).
headlineArtikeltitels en koppen; modi: Kreatif, Ringkas.
productProductbeschrijvingen; modi: Marketplace, Toko online (webwinkel).
synonymLijst met synoniemen voor één woord of woordgroep.
humanizeStijve of generieke tekst natuurlijker laten lezen; modi: Alami (natuurlijk), Pribadi (persoonlijk), Profesional (professioneel).
metaDrie paren van metatitel en -beschrijving; modi: Artikel, Produk (product), Halaman (elke webpagina).
hashtagEén regel hashtags; modi: Instagram, TikTok, LinkedIn, X.
bioDrie profielteksten; modi: Instagram, LinkedIn, X, TikTok.
outlineGenummerd schrijfplan met subpunten; modi: Artikel, Esai (essay), Skripsi (scriptie), Presentasi (presentatie).
sloganTien sloganideeën; modi: Merek (merk), Kampanye (campagne), Produk (product).
paragraphEén alinea bij een onderwerp; modi: Pembuka (inleiding), Isi (middenstuk), Penutup (slot).
coverletterConcept voor een sollicitatiebrief; modi: Fresh graduate (starter), Berpengalaman (ervaren), Magang (stage).
poemKorte gedichten; modi: Bebas (vrij vers), Berima (rijmend), Akrostik (acrostichon), Haiku.

Limieten

Tekstlengte
Maximaal 6.000 tekens per verzoek (413 too_long daarboven).
Per IP-adres
30 verzoeken per minuut.
Algemeen
100 verzoeken per minuut voor de hele dienst, plus een dagmaximum voor AI-functies.
Plagiaatcontrole
5 controles per minuut per IP-adres en 60 per minuut voor de hele dienst; minimaal 30 woorden.
Uitvoer
Een lengtebudget per taak, nooit meer dan 2.048 tokens; een afgekapt antwoord heeft truncated: true.
Model
Gekozen per taal: Engels en Indonesisch draaien op @cf/aisingapore/gemma-sea-lion-v4-27b-it, elke andere taal, dus ook het Nederlands, op @cf/qwen/qwen3-30b-a3b-fp8. Als een model druk bezet, begrensd, traag of defect is, valt het verzoek terug op het volgende model in de keten (Qwen3-30B, dan @cf/google/gemma-4-26b-a4b-it, dan @cf/meta/llama-3.3-70b-instruct-fp8-fast). Het veld model noemt altijd het model dat antwoordde.

Foutcodes

StatusCodeWanneer het gebeurt
400invalid_requestOngeldige JSON, een verplicht veld ontbreekt of een onbekende task of lang.
413too_longtext is langer dan 6.000 tekens.
403forbiddenHet verzoek kwam niet van een adeptwrite.com-pagina.
429rate_limitedDe limiet per IP-adres of de algemene limiet per minuut is overschreden. Wacht het aantal seconden uit Retry-After.
429quota_exceededHet dagmaximum voor AI-functies is op. Probeer het de volgende dag (UTC) opnieuw.
502upstreamGeen enkel model in de keten antwoordde op tijd.
502empty_outputDe modellen antwoordden, maar met een leeg resultaat.
503disabledDe dienst is tijdelijk uitgeschakeld door de beheerder of (voor /api/v1/aidetect) nog niet uitgerold.

Foutformaat

Elke fout komt terug als JSON met de bijbehorende HTTP-statuscode en dezelfde vorm:

{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }

Controleer eerst ok en lees dan error.code voor programmatische afhandeling; error.message is veilig om aan gebruikers te tonen.

Aanbevolen werkwijze

  • Stuur tekst in delen (bijvoorbeeld per alinea) in plaats van als één lang document; resultaten komen dan sneller terug en zijn makkelijker te beoordelen.
  • Behandel 429 met exponentiële uitstel (backoff), niet met directe herhaling.
  • Stuur geen persoonlijke of vertrouwelijke gegevens mee die je niet nodig hebt. We bewaren ze niet, maar dataminimalisatie blijft verstandig.
  • AI-uitvoer kan onjuist zijn; toon hem als suggestie om te controleren, niet als definitieve waarheid.

Veelgestelde vragen

Kan ik de API vanuit mijn eigen app of domein aanroepen?

Nog niet. De Worker stuurt op dit moment geen CORS-headers mee en bedient alleen pagina’s van adeptwrite.com. Externe toegang met API-sleutels staat gepland samen met het Pro-abonnement; deze documentatie wordt bijgewerkt zodra dat beschikbaar is.

Wordt tekst die naar de API gaat bewaard?

Nee. De tekst wordt doorgegeven aan het model om het antwoord te maken en daarna weggegooid. Logs bevatten alleen metagegevens (statuscode, taak, duur). Alle details staan in het privacybeleid.

Waarom is de uitvoer platte tekst en geen gestructureerde JSON?

Elke taak levert één kant-en-klare tekst zonder inleiding of Markdown-blokken, zodat hij direct in de editor kan worden getoond. Extra structuur (bijvoorbeeld een lijst met wijzigingen) staat gepland voor een latere versie zonder v1 te veranderen.

Wat kost de API?

Vanaf adeptwrite.com is hij gratis, beperkt tot 30 AI-verzoeken per minuut per IP-adres. De prijs voor externe toegang maken we bekend met het Pro-abonnement; tot die tijd wordt er niets in rekening gebracht.

Welk model beantwoordt mijn verzoek?

Dat hangt van de taal af: Engels en Indonesisch gaan naar SEA-LION, de andere talen, ook het Nederlands, naar Qwen3-30B. Als dat model druk bezet is of faalt, antwoordt het volgende model in de terugvalketen en noemt het veld model van het antwoord welk model dat was.