API-Dokumentation

Umformulieren, Grammatikprüfung, Zusammenfassungen, Übersetzung und Plagiatsprüfung in 56 Sprachen. Eine schlichte REST-Schnittstelle, ausgeliefert vom Edge-Netz von Cloudflare.

Gleicher Ursprung
Die API bedient derzeit nur Anfragen von adeptwrite.com selbst (keine CORS-Header). Externer Zugriff mit API-Schlüsseln ist zusammen mit dem Tarif Pro geplant. Diese Dokumentation erscheint früh, damit der Vertrag offen liegt und Sie sich vorbereiten können.
Zusammenfassung

Die AdeptWrite-API v1 hat drei aktive Endpunkte. POST /api/v1/run nimmt JSON mit task, mode, lang und text (bis zu 6.000 Zeichen) entgegen und liefert Klartext von einem für die Sprache gewählten Cloudflare-Workers-AI-Modell. POST /api/v1/plagiarism vergleicht einen Text mit offenen Quellen und listet jede durchsuchte Quelle auf. GET /api/v1/health meldet den Dienststatus. Text wird nie gespeichert oder protokolliert; KI-Anfragen sind auf 30 pro Minute und IP-Adresse begrenzt.

Grundlagen

  • Basis-URL: https://adeptwrite.com/api/v1
  • Format: Anfragen und Antworten sind JSON (Content-Type: application/json, UTF-8).
  • Authentifizierung: noch keine; Anfragen müssen von Seiten auf adeptwrite.com kommen (gleicher Ursprung). API-Schlüssel folgen mit Pro.
  • Datenschutz: Das Feld text wird nie gespeichert oder protokolliert; Antworten tragen Cache-Control: no-store.
  • Versionierung: Der Pfad /v1/ ändert sich nicht inkompatibel; inkompatible Änderungen erscheinen unter /v2/.

POST/api/v1/run

Führt eine KI-Aufgabe auf einem Text aus und gibt das Ergebnis als Klartext zurück (ohne Vorrede, ohne Markdown-Zäune).

Anfrage

FieldTypeRequiredNotes
taskstring✓Name der Aufgabe; siehe die Aufgabenliste unten.
textstring✓Eingabetext, 1–6.000 Zeichen.
langstring✓Sprache des Ergebnisses: einer der 56 Sprachcodes der Website (en, de, id, ja, pt-pt, zh-hant …; BCP-47-Tags wie pt-BR werden zugeordnet) oder auto für „dieselbe Sprache wie die Eingabe“.
modestring—Ein für das Werkzeug verfügbarer Modus, z. B. Formal, Akademik, Ringkas, Poin-poin (die Modusnamen sind die indonesischen Registry-Labels). Bei Aufgaben ohne Modi wird das Feld ignoriert.
optionsobject—Aufgabenspezifische Optionen: from / to für translate (jede unterstützte Sprache in jede andere; from darf auto sein; sr-Cyrl verlangt Serbisch in kyrillischer Schrift), platform (instagram / tiktok / linkedin) für caption und optionale benannte fields für bio, coverletter und meta. Andere Schlüssel werden ignoriert.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "de",
  "text": "Gutes Schreiben ist für Studierende wirklich wichtig.",
  "options": {}
}

Antwort

Status 200 mit ok: true, dem Ergebnis in output, dem Modell, das tatsächlich geantwortet hat, in model (es weicht ab, wenn ein Ausweichmodell eingesprungen ist), und der Verarbeitungszeit in Millisekunden. truncated: true kommt hinzu, wenn die Antwort ihr Längenbudget oder das Zeitlimit erreicht hat und abgeschnitten wurde.

{
  "ok": true,
  "output": "Die Qualität des Schreibens ist für Studierende von zentraler Bedeutung.",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

Beispiel: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"de","text":"Wir treffen uns morgen in der Bibliotek, dann schreibe ich die Hausarbeit zuende."}'

Beispiel: 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: 'de', 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

Wählt 4–8 markante Wortfolgen aus dem Text, durchsucht offene Quellen in der Sprache des Textes (Wikipedia, Wikisource, Volltext des Internet Archive, Europe PMC, DOAJ, arXiv; einen Websuch-Anbieter nur, wenn er eingerichtet ist und angefragt wird) und bewertet die Übereinstimmung. Nur diese kurzen Wortfolgen verlassen den Server.

Anfrage

FieldTypeRequiredNotes
textstring✓Mindestens 30 Wörter, höchstens 6.000 Zeichen.
langstring✓Ein Sprachcode der Website oder auto.
optionsobject—web: true fragt zusätzlich den Websuch-Anbieter ab, wenn der Betreiber einen eingerichtet hat; webSearched in der Antwort sagt, ob er tatsächlich geantwortet hat.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…mindestens 30 Wörter…", "lang": "de", "options": { "web": false } }

Antwort

Status 200 mit score (übereinstimmende Wörter ÷ Wörter, 0–1), matches je Quelle mit markierten passages (Zeichenpositionen in Ihrem Text), sourcesSearched (genau die Quellen, deren Antworten im Ergebnis stehen), sourcesSkipped mit Begründung und webSearched.

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

Beispiel: curl

curl -X POST https://adeptwrite.com/api/v1/plagiarism \
  -H "Content-Type: application/json" \
  -d '{"lang":"de","text":"…mindestens 30 Wörter…"}'

GET/api/v1/health

Meldet, welche Dienste eingeschaltet sind. Braucht keinen Body und zählt nicht auf das Kontingent.

Antwort

Status 200. ai ist false, solange der KI-Notschalter aktiv ist; plagiarism listet die Quellen, die die Prüfung abfragen kann; aidetect beschreibt die serverseitige Tiefenanalyse des KI-Detektors, die noch nicht bereitgestellt ist (POST /api/v1/aidetect antwortet mit 503 disabled; der Detektor auf der Website läuft in Ihrem Browser).

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

Beispiel: curl

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

Task list

taskWhat it does
paraphraseUmformulieren; Modi: Standar, Formal, Santai, Akademik, Kreatif, Ringkas, Panjangkan.
grammarKorrektur von Grammatik, Kommasetzung und Rechtschreibung in der Sprache des Textes (für Deutsch nach dem Amtlichen Regelwerk).
toneTonfall ändern; Modi: Formal, Kantor (Büro), Santai (locker).
rewriteSteife oder holprige Sätze glätten; Modi: Standar, Formal.
resizeSätze kürzen oder erweitern; Modi: Ringkas, Panjangkan.
essayAbsätze oder einen Essay aus Stichpunkten aufbauen; Modi: Akademik, Kreatif, Panjangkan.
summarizeZusammenfassung; Modi: Poin-poin (Stichpunkte), Paragraf (Absatz), Satu kalimat (ein Satz).
translateÜbersetzung zwischen zwei beliebigen unterstützten Sprachen; options.from (oder auto) und options.to; Modi: Alami (natürlich, Standard), Formal, Santai (locker).
thesisTitelideen und Kapitelgliederung für eine Abschlussarbeit.
abstractStrukturiertes Abstract aus einer Forschungszusammenfassung.
captionCaptions für soziale Medien; options.platform: instagram, tiktok, linkedin.
emailE-Mails und Briefe; Modi: Lamaran kerja (Bewerbung), Surat resmi (formeller Brief), Follow-up (Nachfassen).
headlineArtikeltitel und Überschriften; Modi: Kreatif, Ringkas.
productProduktbeschreibungen; Modi: Marketplace (Marktplatz), Toko online (Onlineshop).
synonymSynonymliste für ein Wort oder eine Wendung.
humanizeSteifen, generischen Text natürlicher klingen lassen; Modi: Alami, Pribadi (persönlich), Profesional.
metaDrei Paare aus Meta-Titel und Meta Description; Modi: Artikel, Produk (Produkt), Halaman (beliebige Webseite).
hashtagEine Zeile Hashtags; Modi: Instagram, TikTok, LinkedIn, X.
bioDrei Profiltexte; Modi: Instagram, LinkedIn, X, TikTok.
outlineNummerierte Gliederung mit Unterpunkten; Modi: Artikel, Esai (Essay), Skripsi (Abschlussarbeit), Presentasi (Präsentation).
sloganZehn Sloganideen; Modi: Merek (Marke), Kampanye (Kampagne), Produk (Produkt).
paragraphEin Absatz zu einem Thema; Modi: Pembuka (Einleitung), Isi (Hauptteil), Penutup (Schluss).
coverletterEntwurf eines Anschreibens; Modi: Fresh graduate (Berufseinstieg), Berpengalaman (berufserfahren), Magang (Praktikum).
poemKurze Gedichte; Modi: Bebas (freie Verse), Berima (mit Reim), Akrostik, Haiku.

Limits

Textlänge
Höchstens 6.000 Zeichen pro Anfrage (darüber 413 too_long).
Pro IP-Adresse
30 Anfragen pro Minute.
Global
100 Anfragen pro Minute für den gesamten Dienst, dazu ein Tageslimit für KI-Funktionen.
Plagiatsprüfung
5 Prüfungen pro Minute und IP-Adresse und 60 pro Minute für den gesamten Dienst; mindestens 30 Wörter.
Ausgabe
Ein Längenbudget je Aufgabe, nie mehr als 2.048 Token; eine abgeschnittene Antwort trägt truncated: true.
Modell
Pro Sprache gewählt: Englisch und Indonesisch laufen auf @cf/aisingapore/gemma-sea-lion-v4-27b-it, jede andere Sprache auf @cf/qwen/qwen3-30b-a3b-fp8. Ist ein Modell ausgelastet, gedrosselt, langsam oder fällt es aus, springt das nächste Modell der Kette ein (Qwen3-30B, dann @cf/google/gemma-4-26b-a4b-it, dann @cf/meta/llama-3.3-70b-instruct-fp8-fast). Das Feld model nennt immer das Modell, das geantwortet hat.

Fehlercodes

StatusCodeWann es auftritt
400invalid_requestUngültiges JSON, ein fehlendes Pflichtfeld oder eine unbekannte task oder lang.
413too_longtext überschreitet 6.000 Zeichen.
403forbiddenDie Anfrage kam nicht von einer Seite auf adeptwrite.com.
429rate_limitedDas Limit pro IP-Adresse oder das globale Limit pro Minute wurde überschritten. Warten Sie die Sekunden aus Retry-After ab.
429quota_exceededDas Tageslimit für KI-Funktionen ist aufgebraucht. Versuchen Sie es am nächsten Tag (UTC) erneut.
502upstreamKein Modell der Kette hat rechtzeitig geantwortet.
502empty_outputDie Modelle haben geantwortet, aber mit einem leeren Ergebnis.
503disabledDer Dienst wurde vom Betreiber vorübergehend abgeschaltet oder (bei /api/v1/aidetect) ist noch nicht bereitgestellt.

Fehlerformat

Jeder Fehler wird als JSON mit dem passenden HTTP-Statuscode und immer derselben Form zurückgegeben:

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

Prüfen Sie zuerst ok und lesen Sie dann error.code für die programmatische Behandlung; error.message ist gefahrlos für Nutzer anzeigbar.

Empfohlene Praxis

  • Senden Sie Text in Teilen (zum Beispiel absatzweise) statt als langes Dokument; Ergebnisse kommen schneller zurück und lassen sich leichter prüfen.
  • Behandeln Sie 429 mit exponentiellem Backoff, nicht mit sofortigen Wiederholungen.
  • Senden Sie keine personenbezogenen oder vertraulichen Daten, die Sie nicht brauchen – auch wenn wir sie nicht speichern, gilt der Grundsatz der Datensparsamkeit.
  • KI-Ergebnisse können falsch sein; zeigen Sie sie als Vorschlag zur Prüfung an, nicht als endgültige Wahrheit.

Häufig gestellte Fragen

Kann ich die API aus meiner eigenen App oder Domain aufrufen?

Noch nicht. Der Worker sendet derzeit keine CORS-Header und bedient nur Seiten auf adeptwrite.com. Externer Zugriff mit API-Schlüsseln ist zusammen mit dem Tarif Pro geplant; diese Dokumentation wird aktualisiert, sobald er verfügbar ist.

Wird Text, den ich an die API sende, gespeichert?

Nein. Der Text wird an das Modell weitergegeben, um die Antwort zu erzeugen, und danach verworfen. Logs enthalten nur Metadaten (Statuscode, Aufgabe, Dauer). Alle Einzelheiten stehen in der Datenschutzerklärung.

Warum ist die Ausgabe Klartext und kein strukturiertes JSON?

Jede Aufgabe erzeugt einen gebrauchsfertigen Text ohne Vorrede und ohne Markdown-Zäune, damit er direkt im Editor angezeigt werden kann. Zusätzliche Struktur (zum Beispiel eine Änderungsliste) ist für eine spätere Version geplant, ohne v1 zu ändern.

Was kostet die API?

Von adeptwrite.com aus ist sie kostenlos, begrenzt auf 30 KI-Anfragen pro Minute und IP-Adresse. Preise für externen Zugriff werden zusammen mit dem Tarif Pro bekanntgegeben; bis dahin wird nichts berechnet.

Welches Modell beantwortet meine Anfrage?

Das hängt von der Sprache ab: Englisch und Indonesisch gehen an SEA-LION, die übrigen Sprachen, auch Deutsch, an Qwen3-30B. Ist dieses Modell ausgelastet oder fällt aus, antwortet das nächste Modell der Ausweichkette, und das Feld model der Antwort nennt das Modell, das geantwortet hat.