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
Field
Type
Required
Notes
task
string
✓
Uppgiftens namn, se uppgiftslistan nedan.
text
string
✓
Indatatext, 1–6 000 tecken.
lang
string
✓
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".
mode
string
—
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.
options
object
—
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
Field
Type
Required
Notes
text
string
✓
Minst 30 ord, högst 6 000 tecken.
lang
string
✓
En språkkod för webbplatsen eller auto.
options
object
—
web: true frågar också webbsökningsleverantören när driftansvarig har konfigurerat en. webSearched i svaret anger om den verkligen svarade.
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.
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).
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
Status
Kod
När det händer
400
invalid_request
Ogiltig JSON, ett obligatoriskt fält saknas eller en okänd task eller lang.
413
too_long
text överstiger 6 000 tecken.
403
forbidden
Förfrågan kom inte från en sida på adeptwrite.com.
429
rate_limited
Gränsen per IP-adress eller den globala gränsen per minut överskreds. Vänta så många sekunder som anges i Retry-After.
429
quota_exceeded
Det dagliga taket för AI-funktionerna är förbrukat. Försök igen nästa dag (UTC).
502
upstream
Ingen modell i kedjan svarade i tid.
502
empty_output
Modellerna svarade, men med ett tomt resultat.
503
disabled
Tjä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.