API-dokumentation

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

FieldTypeRequiredNotes
taskstring✓Opgavens navn; se opgavelisten nedenfor.
textstring✓Inputtekst på 1–6.000 tegn (uden betalt abonnement højst 3.000).
langstring✓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".
modestring—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.
optionsobject—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

FieldTypeRequiredNotes
textstring✓Mindst 30 ord, højst 6.000 tegn.
langstring✓En sprogkode fra siden eller auto.
optionsobject—web: true spørger også websøgetjenesten, hvis driftsansvarlig har sat en op; webSearched i svaret fortæller, om den faktisk svarede.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…mindst 30 ord…", "lang": "da", "options": { "web": false } }

Svar

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.

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

Eksempel: curl

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

GET/api/v1/health

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).

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

Eksempel: curl

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

Task list

taskWhat it does
paraphraseOmformulering; tilstande: Standar, Formal, Santai, Akademik, Kreatif, Ringkas, Panjangkan (på siden: Standard, Formel, Uformel, Akademisk, Kreativ, Forkort, Uddyb).
grammarRettelse af grammatik og stavning (på dansk efter Retskrivningsordbogen).
toneSkift tone; tilstande: Formal, Kantor (kollegial), Santai (uformel).
rewriteGør stive eller kluntede sætninger bedre; tilstande: Standar, Formal.
resizeForkort eller uddyb sætninger; tilstande: Ringkas (forkort), Panjangkan (uddyb).
essayByg afsnit eller et essay ud fra stikord; tilstande: Akademik, Kreatif, Panjangkan.
summarizeResumé; tilstande: Poin-poin (punktform), Paragraf (afsnit), Satu kalimat (én sætning).
translateOversættelse mellem to understøttede sprog; options.from (eller auto) og options.to; tilstande: Alami (naturlig, standard), Formal, Santai (uformel).
thesisIdéer til opgavetitler og en kapiteloversigt.
abstractStruktureret abstract ud fra et forskningsresumé.
captionCaptions til sociale medier; options.platform: instagram, tiktok, linkedin.
emailMails og breve; tilstande: Lamaran kerja (ansøgningsmail), Surat resmi (formelt brev), Follow-up (opfølgning).
headlineArtikeltitler og overskrifter; tilstande: Kreatif, Ringkas (kort).
productProduktbeskrivelser; tilstande: Marketplace (markedsplads), Toko online (webshop).
synonymListe med synonymer til ét ord eller udtryk.
humanizeFå stiv, generisk tekst til at læses mere naturligt; tilstande: Alami (naturlig), Pribadi (personlig), Profesional (professionel).
metaTre par af metatitel og metabeskrivelse; tilstande: Artikel, Produk (produkt), Halaman (enhver webside).
hashtagÉn linje med hashtags; tilstande: Instagram, TikTok, LinkedIn, X.
bioTre profiltekster; tilstande: Instagram, LinkedIn, X, TikTok.
outlineNummereret disposition med underpunkter; tilstande: Artikel, Esai (essay), Skripsi (speciale), Presentasi (oplæg).
sloganTi idéer til slogans; tilstande: Merek (brand), Kampanye (kampagne), Produk (produkt).
paragraphÉt afsnit ud fra et emne; tilstande: Pembuka (indledning), Isi (hoveddel), Penutup (afslutning).
coverletterUdkast til jobansøgning; tilstande: Fresh graduate (nyuddannet), Berpengalaman (erfaren), Magang (praktikplads).
poemKorte digte; tilstande: Bebas (frie vers), Berima (med rim), Akrostik (akrostikon), Haiku.

Grænser

Tekstlængde
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

StatusKodeHvornår det sker
400invalid_requestUgyldig JSON, et manglende obligatorisk felt eller en ukendt task eller lang.
413too_longtext er længere end 6.000 tegn.
403forbiddenForespørgslen kom ikke fra en side på adeptwrite.com.
429rate_limitedGrænsen pr. minut pr. IP eller for hele tjenesten er overskredet. Vent det antal sekunder, der står i Retry-After.
429quota_exceededDet daglige loft for AI-funktioner er brugt op. Prøv igen næste dag (UTC).
502upstreamIngen model i kæden nåede at svare i tide.
502empty_outputModellerne svarede, men med et tomt resultat.
503disabledTjenesten 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.