API-dokumentation

Omformulering, grammatikkontroll, sammanfattningar, översättning och plagiatkontroll på 56 språk. Enkelt REST-API som levereras från Cloudflares kantnätverk.

Same-origin
API:et betjänar för närvarande bara förfrågningar från adeptwrite.com själv (inga CORS-huvuden). Extern åtkomst med API-nycklar planeras tillsammans med planen Pro. Dokumentationen publiceras i förväg så att kontraktet är öppet och du kan förbereda dig.
Sammanfattning

AdeptWrites v1-API har tre aktiva slutpunkter. POST /api/v1/run tar JSON med task, mode, lang och text (högst 6 000 tecken) och returnerar ren text från en Cloudflare Workers AI-modell som väljs efter språk. POST /api/v1/plagiarism jämför en text med öppna källor och listar varje källa som genomsöktes. GET /api/v1/health returnerar tjänstens status. Texten sparas eller loggas aldrig, och AI-förfrågningar begränsas till 30 per minut och IP-adress.

Grunderna

  • Bas-URL: https://adeptwrite.com/api/v1
  • Format: förfrågningar och svar är JSON (Content-Type: application/json, UTF-8).
  • Autentisering: ingen ännu. Förfrågningarna måste komma från sidor på adeptwrite.com (same-origin). API-nycklar kommer med Pro.
  • Integritet: fältet text sparas eller loggas aldrig, och svaren skickas med Cache-Control: no-store.
  • Versionering: sökvägen /v1/ ändras inte på ett sätt som bryter kompatibiliteten. Brytande ändringar får sökvägen /v2/.

POST/api/v1/run

Kör en AI-uppgift på en text och returnerar resultatet som ren text (utan inledning och utan Markdown-block).

Anrop

FieldTypeRequiredNotes
taskstring✓Uppgiftens namn, se uppgiftslistan nedan.
textstring✓Indatatext, 1–6 000 tecken.
langstring✓Resultatets språk: någon av webbplatsens 56 språkkoder (en, sv, id, ja, pt-pt, zh-hant …; BCP 47-taggar som pt-BR mappas) eller auto för "samma språk som indata".
modestring—Ett läge som finns för verktyget, till exempel Formal, Akademik, Ringkas eller Poin-poin (lägesnamnen är registrets indonesiska etiketter). Ignoreras för uppgifter utan lägen.
optionsobject—Uppgiftsspecifika alternativ: from / to för translate (vilket språk som stöds till vilket annat som helst; from kan vara auto; sr-Cyrl ger serbiska med kyrilliska), platform (instagram / tiktok / linkedin) för caption och valfria märkta fields för bio, coverletter och meta. Övriga nycklar ignoreras.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "sv",
  "text": "Bra skrivande är viktigt för studenter.",
  "options": {}
}

Svar

Status 200 med ok: true, resultatet i output, modellen som faktiskt svarade i model (den skiljer sig när en reservmodell har tagit över) och bearbetningstiden i millisekunder. truncated: true läggs till när svaret nådde sin längdbudget eller tidsgränsen och klipptes av.

{
  "ok": true,
  "output": "Ett gott skrivande är avgörande för studenter.",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

Exempel: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"sv","text":"Dom går till biblioteket imorgon."}'

Exempel: 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: 'sv', 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äljer 4–8 särskiljande fraser ur texten, söker i öppna källor på textens språk (Wikipedia, Wikisource, Internet Archives fulltext, Europe PMC, DOAJ, arXiv; en webbsökningsleverantör bara när en sådan är konfigurerad och efterfrågad) och räknar ut överlappningen. Bara de korta fraserna lämnar servern.

Anrop

FieldTypeRequiredNotes
textstring✓Minst 30 ord, högst 6 000 tecken.
langstring✓En språkkod för webbplatsen eller auto.
optionsobject—web: true frågar också webbsökningsleverantören när driftansvarig har konfigurerat en. webSearched i svaret anger om den verkligen svarade.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…minst 30 ord…", "lang": "sv", "options": { "web": false } }

Svar

Status 200 med score (matchade ord ÷ ord, 0–1), matches per källa med markerade passages (teckenpositioner i din text), sourcesSearched (exakt de källor vars svar ingår i resultatet), sourcesSkipped med en orsak och webSearched.

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

Exempel: curl

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

GET/api/v1/health

Anger vilka tjänster som är påslagna. Tar ingen kropp och räknas inte mot kvoten.

Svar

Status 200. ai är false medan AI-nödbrytaren är på. plagiarism listar de källor som kontrollen kan fråga. aidetect beskriver AI-detektorns djupanalys på serversidan, som inte är driftsatt ännu (POST /api/v1/aidetect svarar 503 disabled; detektorn på webbplatsen körs i din webbläsare).

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

Exempel: curl

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

Task list

taskWhat it does
paraphraseOmformulering; lägen: Standar, Formal, Santai (vardaglig), Akademik, Kreatif, Ringkas (korta ner), Panjangkan (förläng).
grammarRättning av grammatik och stavning.
toneÄndrar tonläge; lägen: Formal, Kantor (arbetsplats), Santai (vardaglig).
rewriteRättar stela eller krångliga meningar; lägen: Standar, Formal.
resizeKortar ner eller förlänger meningar; lägen: Ringkas, Panjangkan.
essayBygger stycken eller en essä utifrån stödord; lägen: Akademik, Kreatif, Panjangkan.
summarizeSammanfattning; lägen: Poin-poin (punktlista), Paragraf (stycke), Satu kalimat (en mening).
translateÖversättning mellan två språk som stöds; options.from (eller auto) och options.to; lägen: Alami (naturlig, standard), Formal, Santai (vardaglig).
thesisFörslag på uppsatstitlar och en kapitelindelning.
abstractStrukturerat abstract utifrån en sammanfattning av forskningen.
captionBildtexter för sociala medier; options.platform: instagram, tiktok, linkedin.
emailMejl och brev; lägen: Lamaran kerja (jobbansökan), Surat resmi (formellt brev), Follow-up (uppföljning).
headlineArtikeltitlar och rubriker; lägen: Kreatif, Ringkas.
productProduktbeskrivningar; lägen: Marketplace (marknadsplats), Toko online (webbutik).
synonymSynonymlista för ett ord eller en fras.
humanizeFår stel eller generisk text att låta mer naturlig; lägen: Alami (naturlig), Pribadi (personlig), Profesional (professionell).
metaTre par av metatitel och metabeskrivning; lägen: Artikel, Produk (produkt), Halaman (valfri webbsida).
hashtagEn rad med hashtaggar; lägen: Instagram, TikTok, LinkedIn, X.
bioTre profiltexter; lägen: Instagram, LinkedIn, X, TikTok.
outlineNumrerad disposition med underpunkter; lägen: Artikel, Esai (essä), Skripsi (uppsats), Presentasi (presentation).
sloganTio sloganförslag; lägen: Merek (varumärke), Kampanye (kampanj), Produk (produkt).
paragraphEtt stycke utifrån ett ämne; lägen: Pembuka (inledning), Isi (huvuddel), Penutup (avslutning).
coverletterUtkast till personligt brev; lägen: Fresh graduate (nyexaminerad), Berpengalaman (erfaren), Magang (praktik).
poemKorta dikter; lägen: Bebas (fri vers), Berima (rimmad), Akrostik (akrostikon), Haiku.

Begränsningar

Textlängd
Högst 6 000 tecken per förfrågan (413 too_long över det).
Per IP-adress
30 förfrågningar per minut.
Globalt
100 förfrågningar per minut för hela tjänsten, plus ett dagligt tak för AI-funktionerna.
Plagiatkontroll
5 kontroller per minut och IP-adress och 60 per minut för hela tjänsten; minst 30 ord.
Utdata
En längdbudget per uppgift, aldrig mer än 2 048 token. Ett avklippt svar har truncated: true.
Modell
Väljs efter språk: engelska och indonesiska körs på @cf/aisingapore/gemma-sea-lion-v4-27b-it, alla andra språk, svenska inräknat, på @cf/qwen/qwen3-30b-a3b-fp8. När en modell är upptagen, begränsad, långsam eller misslyckas går förfrågan vidare till nästa modell i kedjan (Qwen3-30B, därefter @cf/google/gemma-4-26b-a4b-it, därefter @cf/meta/llama-3.3-70b-instruct-fp8-fast). Fältet model anger alltid modellen som svarade.

Felkoder

StatusKodNär det händer
400invalid_requestOgiltig JSON, ett obligatoriskt fält saknas eller en okänd task eller lang.
413too_longtext överstiger 6 000 tecken.
403forbiddenFörfrågan kom inte från en sida på adeptwrite.com.
429rate_limitedGränsen per IP-adress eller den globala gränsen per minut överskreds. Vänta så många sekunder som anges i Retry-After.
429quota_exceededDet dagliga taket för AI-funktionerna är förbrukat. Försök igen nästa dag (UTC).
502upstreamIngen modell i kedjan svarade i tid.
502empty_outputModellerna svarade, men med ett tomt resultat.
503disabledTjänsten har stängts av tillfälligt av driftansvarig, eller (för /api/v1/aidetect) är inte driftsatt ännu.

Felformat

Varje fel returneras som JSON med motsvarande HTTP-statuskod och samma form:

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

Kontrollera ok först och läs sedan error.code för programmatisk hantering. error.message är säker att visa för användare.

Rekommenderad användning

  • Skicka texten i delar (till exempel ett stycke i taget) i stället för ett långt dokument. Resultaten kommer snabbare och är lättare att granska.
  • Hantera 429 med exponentiell backoff, inte med omedelbara nya försök.
  • Skicka inga personuppgifter eller konfidentiella uppgifter som du inte behöver, även om vi inte sparar dem. Principen om uppgiftsminimering gäller ändå.
  • AI-resultat kan vara fel. Presentera dem som förslag att granska, inte som slutgiltig sanning.

Vanliga frågor

Kan jag anropa API:et från min egen app eller domän?

Inte ännu. Workern skickar för närvarande inga CORS-huvuden och betjänar bara sidor på adeptwrite.com. Extern åtkomst med API-nycklar planeras tillsammans med planen Pro, och den här dokumentationen uppdateras när den finns.

Sparas text som skickas till API:et?

Nej. Texten vidarebefordras till modellen för att ta fram svaret och kasseras sedan. Loggarna innehåller bara metadata (statuskod, uppgift, varaktighet). Alla detaljer finns i integritetspolicyn.

Varför är resultatet ren text och inte strukturerad JSON?

Varje uppgift ger en färdig text utan inledning eller Markdown-block, så att den kan visas direkt i redigeraren. Extra struktur (till exempel en ändringslista) planeras för en senare version utan att v1 ändras.

Vad kostar API:et?

Från adeptwrite.com är det gratis, med högst 30 AI-förfrågningar per minut och IP-adress. Priset för extern åtkomst meddelas tillsammans med planen Pro, och inget debiteras innan dess.

Vilken modell svarar på min förfrågan?

Det beror på språket: engelska och indonesiska går till SEA-LION, övriga språk till Qwen3-30B. Om den modellen är upptagen eller misslyckas svarar nästa modell i reservkedjan i stället, och fältet model i svaret anger vilken som svarade.