Omformulering, grammatiktjek, resuméer, oversættelse og plagiattjek på 56 sprog. Simpelt REST-API, leveret fra Cloudflares edge.
Samme oprindelse
API'et betjener i dag kun forespørgsler fra adeptwrite.com selv (ingen CORS-headere). Ekstern adgang med API-nøgler er planlagt sammen med Pro-planen. Dokumentationen er udgivet tidligt, så kontrakten er åben, og du kan forberede dig.
Resumé
AdeptWrites v1-API har tre aktive slutpunkter. POST /api/v1/run tager JSON med task, mode, lang og text (op til 6.000 tegn) og returnerer et resultat som ren tekst fra en Cloudflare Workers AI-model, der er valgt til sproget. POST /api/v1/plagiarism sammenligner en tekst med åbne kilder og angiver hver eneste kilde, der blev søgt i. GET /api/v1/health returnerer tjenestens status. Tekst gemmes eller logges aldrig, og AI-forespørgsler er begrænset til 30 i minuttet pr. IP.
Det grundlæggende
Basis-URL:https://adeptwrite.com/api/v1
Format: forespørgsler og svar er JSON (Content-Type: application/json, UTF-8).
Godkendelse: endnu ingen; forespørgsler skal komme fra sider på adeptwrite.com (samme oprindelse). API-nøgler kommer med Pro.
Privatliv: feltet text gemmes eller logges aldrig; svarene har Cache-Control: no-store. Læs mere i privatlivspolitikken.
Versionering: stien /v1/ ændres ikke på en måde, der bryder eksisterende kald; brydende ændringer får /v2/.
POST/api/v1/run
Kører én AI-opgave på en tekst og returnerer resultatet som ren tekst (uden indledning og uden Markdown-kodeblokke).
Forespørgsel
Field
Type
Required
Notes
task
string
✓
Opgavens navn; se opgavelisten nedenfor.
text
string
✓
Inputtekst på 1–6.000 tegn (uden betalt abonnement højst 3.000).
lang
string
✓
Resultatets sprog: en af sidens 56 sprogkoder (da, en, id, ja, pt-pt, zh-hant…; BCP 47-koder som pt-BR bliver omsat til den tilsvarende kode) eller auto for "samme sprog som inputtet".
mode
string
—
En tilstand, der findes for det pågældende værktøj, fx Formal, Akademik, Ringkas eller Poin-poin (tilstandsnavnene er værktøjsregistrets indonesiske betegnelser, uanset hvilket sprog du kalder på). Ignoreres for opgaver uden tilstande.
options
object
—
Opgavespecifikke valg: from / to for translate (ethvert understøttet sprog til ethvert andet; from kan være auto; sr-Cyrl beder om serbisk med kyrilliske bogstaver), platform (instagram / tiktok / linkedin) for caption samt valgfrie navngivne fields for bio, coverletter og meta. Andre nøgler ignoreres.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "da",
"text": "God skrivning er vigtig for studerende.",
"options": {}
}
Svar
Status 200 med ok: true, resultatet i output, den model, der faktisk svarede, i model (den er en anden, hvis en reservemodel trådte til) og behandlingstiden i millisekunder. truncated: true tilføjes, når svaret ramte sit længdebudget eller tidsgrænsen og blev afbrudt.
{
"ok": true,
"output": "Kvaliteten af skriftligt arbejde er afgørende for studerende.",
"model": "@cf/qwen/qwen3-30b-a3b-fp8",
"ms": 812
}
Eksempel: curl
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"da","text":"Jeg skal lave noget mad og går en tur."}'
Eksempel: 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: 'da', 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
Vælger 4–8 karakteristiske sætningsdele fra teksten, søger i åbne kilder på tekstens sprog (Wikipedia, Wikisource, Internet Archive fuldtekst, Europe PMC, DOAJ, arXiv; en websøgetjeneste kun hvis den er sat op og efterspurgt) og beregner overlappet. Kun de korte sætningsdele forlader serveren.
Forespørgsel
Field
Type
Required
Notes
text
string
✓
Mindst 30 ord, højst 6.000 tegn.
lang
string
✓
En sprogkode fra siden eller auto.
options
object
—
web: true spørger også websøgetjenesten, hvis driftsansvarlig har sat en op; webSearched i svaret fortæller, om den faktisk svarede.
Status 200 med score (matchende ord ÷ ord, 0–1), matches pr. kilde med markerede passages (tegnpositioner i din tekst), sourcesSearched (præcis de kilder, hvis svar indgår i resultatet), sourcesSkipped med en begrundelse og webSearched. Scoren er et mål for ligheden med åbne kilder, ikke et bevis for plagiat.
Melder, hvilke tjenester der er slået til. Tager ingen body og tæller ikke med i kvoten.
Svar
Status 200. ai er false, mens AI-nødafbryderen er slået til; plagiarism viser de kilder, plagiattjekket kan spørge; aidetect beskriver den dybere analyse på serversiden i AI-tjekkeren, som endnu ikke er udrullet (POST /api/v1/aidetect svarer 503 disabled; AI-tjekkeren på siden kører i din browser).
Højst 6.000 tegn pr. forespørgsel; uden betalt abonnement er grænsen 3.000 tegn pr. kørsel (413 too_long derover).
Pr. IP-adresse
30 forespørgsler pr. minut.
Samlet
100 forespørgsler pr. minut på tværs af hele tjenesten samt et dagligt loft for AI-funktioner.
Plagiattjek
5 tjek pr. minut pr. IP og 60 pr. minut på tværs af tjenesten; mindst 30 ord.
Svar
Et længdebudget pr. opgave, aldrig mere end 2.048 tokens; et afbrudt svar har truncated: true.
Model
Vælges pr. sprog: engelsk og indonesisk kører på @cf/aisingapore/gemma-sea-lion-v4-27b-it, alle andre sprog, også dansk, på @cf/qwen/qwen3-30b-a3b-fp8. Hvis en model er optaget, begrænset, langsom eller fejler, går forespørgslen videre til næste model i kæden (Qwen3-30B, derefter @cf/google/gemma-4-26b-a4b-it, derefter @cf/meta/llama-3.3-70b-instruct-fp8-fast). Feltet model angiver altid den model, der svarede.
Fejlkoder
Status
Kode
Hvornår det sker
400
invalid_request
Ugyldig JSON, et manglende obligatorisk felt eller en ukendt task eller lang.
413
too_long
text er længere end 6.000 tegn.
403
forbidden
Forespørgslen kom ikke fra en side på adeptwrite.com.
429
rate_limited
Grænsen pr. minut pr. IP eller for hele tjenesten er overskredet. Vent det antal sekunder, der står i Retry-After.
429
quota_exceeded
Det daglige loft for AI-funktioner er brugt op. Prøv igen næste dag (UTC).
502
upstream
Ingen model i kæden nåede at svare i tide.
502
empty_output
Modellerne svarede, men med et tomt resultat.
503
disabled
Tjenesten er midlertidigt slået fra af driftsansvarlig, eller (for /api/v1/aidetect) endnu ikke udrullet.
Fejlformat
Hver fejl returneres som JSON med den tilsvarende HTTP-statuskode og samme form:
{ "ok": false, "error": { "code": "rate_limited", "message": "Too many requests. Please try again shortly." } }
Tjek først ok, og læs derefter error.code til programmatisk håndtering; error.message er sikker at vise for brugere.
Anbefalet praksis
Send tekst i dele (fx ét afsnit ad gangen) i stedet for ét langt dokument; resultaterne kommer hurtigere og er lettere at gennemgå.
Håndtér 429 med eksponentiel udsættelse, ikke med umiddelbare nye forsøg.
Send ikke personlige eller fortrolige oplysninger, du ikke har brug for – selv om vi ikke gemmer dem, gælder dataminimering stadig.
AI-svar kan være forkerte; præsentér dem som et forslag til gennemgang, ikke som endegyldig sandhed.
Ofte stillede spørgsmål
Kan jeg kalde API'et fra min egen app eller mit eget domæne?
Ikke endnu. Workeren sender i dag ingen CORS-headere og betjener kun sider på adeptwrite.com. Ekstern adgang med API-nøgler er planlagt sammen med Pro-planen; denne dokumentation opdateres, når den er klar.
Bliver tekst, der sendes til API'et, gemt?
Nej. Teksten sendes videre til modellen for at lave svaret og kasseres derefter. Logfiler indeholder kun metadata (statuskode, opgave, varighed). Alle detaljer står i privatlivspolitikken.
Hvorfor er svaret ren tekst og ikke struktureret JSON?
Hver opgave giver én færdig tekst uden indledning og uden Markdown-kodeblokke, så den kan vises direkte i editoren. Ekstra struktur (fx en liste over ændringer) er planlagt til en senere version uden at ændre v1.
Hvad koster API'et?
Fra adeptwrite.com er det gratis, begrænset til 30 AI-forespørgsler i minuttet pr. IP. Prisen for ekstern adgang bekendtgøres sammen med Pro-planen; der opkræves intet før da.
Hvilken model svarer på min forespørgsel?
Det afhænger af sproget: engelsk og indonesisk går til SEA-LION, de øvrige sprog, også dansk, til Qwen3-30B. Hvis den model er optaget eller fejler, svarer næste model i reservekæden i stedet, og feltet model i svaret angiver den, der gjorde.