Parafrase, cek grammar dan EYD, ringkasan, terjemahan, dan cek plagiarisme dalam 56 bahasa untuk aplikasimu. REST sederhana dari edge Cloudflare.
Same-origin
Saat ini API hanya melayani permintaan dari situs adeptwrite.com sendiri (tanpa tajuk CORS). Akses eksternal dengan kunci API direncanakan bersama paket Pro. Dokumentasi ini dipublikasikan lebih awal agar kontraknya terbuka dan bisa kamu siapkan.
Ringkasan
API AdeptWrite v1 punya tiga endpoint aktif. POST /api/v1/run menerima JSON berisi task, mode, lang, dan text (maksimal 6.000 karakter) lalu mengembalikan teks polos dari model Cloudflare Workers AI yang dipilih sesuai bahasanya; POST /api/v1/plagiarism membandingkan teks dengan sumber terbuka dan mencantumkan setiap sumber yang diperiksa; GET /api/v1/health mengembalikan status layanan. Teks tidak pernah disimpan atau dicatat, dan permintaan AI dibatasi 30 per menit per IP.
Dasar
Base URL:https://adeptwrite.com/api/v1
Format: permintaan dan respons berupa JSON (Content-Type: application/json, UTF-8).
Autentikasi: belum ada; permintaan harus berasal dari halaman adeptwrite.com (same-origin). Kunci API menyusul bersama Pro.
Privasi: isi text tidak disimpan dan tidak dicatat; respons membawa Cache-Control: no-store.
Versi: jalur /v1/ tidak akan berubah secara tidak kompatibel; perubahan besar akan memakai /v2/.
POST/api/v1/run
Menjalankan satu tugas AI pada teks dan mengembalikan hasilnya sebagai teks polos (tanpa pembuka, tanpa blok Markdown).
Permintaan
Field
Type
Required
Notes
task
string
✓
Nama tugas; lihat daftar task di bawah.
text
string
✓
Teks masukan, 1–6.000 karakter.
lang
string
✓
Bahasa hasil: salah satu dari 56 kode lokal situs (id, en, ja, pt-pt, zh-hant, dan seterusnya; tag BCP 47 seperti pt-BR ikut dipetakan) atau auto untuk "sama dengan bahasa masukan".
mode
string
—
Mode yang tersedia untuk alat itu, misalnya Formal, Akademik, Ringkas, Poin-poin. Diabaikan bila tugas tidak punya mode.
options
object
—
Opsi tambahan per tugas: from / to untuk translate (dari bahasa mana pun yang didukung ke bahasa lain; from boleh auto; sr-Cyrl meminta bahasa Serbia beraksara Kiril), platform (instagram / tiktok / linkedin) untuk caption, serta fields berlabel opsional untuk bio, coverletter, dan meta. Kunci lain diabaikan.
POST /api/v1/run HTTP/1.1
Content-Type: application/json
{
"task": "paraphrase",
"mode": "Formal",
"lang": "id",
"text": "Kualitas tulisan sangat penting buat mahasiswa.",
"options": {}
}
Respons
Status 200 dengan ok: true, hasil di output, model yang benar-benar menjawab di model (berbeda bila model cadangan mengambil alih), dan durasi pemrosesan dalam milidetik. truncated: true ditambahkan bila jawaban terpotong karena mencapai batas panjang atau batas waktu.
{
"ok": true,
"output": "Mutu tulisan sangat penting bagi mahasiswa.",
"model": "@cf/aisingapore/gemma-sea-lion-v4-27b-it",
"ms": 812
}
Contoh: curl
curl -X POST https://adeptwrite.com/api/v1/run \
-H "Content-Type: application/json" \
-d '{"task":"grammar","lang":"id","text":"Dimana praktek ini di lakukan?"}'
Contoh: 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: 'id', 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
Memilih 4–8 frasa khas dari teks, mencarinya di sumber terbuka sesuai bahasa teks (Wikipedia, Wikisource, teks lengkap Internet Archive, Europe PMC, DOAJ, arXiv; penyedia pencarian web hanya bila dikonfigurasi dan diminta), lalu menghitung tumpang tindihnya. Hanya frasa pendek itu yang keluar dari server.
Permintaan
Field
Type
Required
Notes
text
string
✓
Minimal 30 kata, maksimal 6.000 karakter.
lang
string
✓
Kode lokal situs atau auto.
options
object
—
web: true ikut memakai penyedia pencarian web bila operator mengonfigurasinya; webSearched di respons menyatakan apakah penyedia itu benar-benar menjawab.
Status 200 dengan score (kata yang cocok ÷ jumlah kata, 0–1), matches per sumber beserta passages yang disorot (posisi karakter di teksmu), sourcesSearched (persis sumber yang jawabannya ada di hasil), sourcesSkipped beserta alasannya, dan webSearched.
Melaporkan layanan mana yang aktif. Tidak memerlukan isi permintaan dan tidak dihitung ke kuota.
Respons
Status 200. ai bernilai false selama sakelar mati AI aktif; plagiarism mencantumkan sumber yang bisa ditelusuri pemeriksa; aidetect menjelaskan analisis mendalam detektor AI di server, yang belum dipasang (POST /api/v1/aidetect menjawab 503 disabled; detektor di situs berjalan di browsermu).
Maksimal 6.000 karakter per permintaan (413 too_long bila lebih).
Per alamat IP
30 permintaan per menit.
Global
100 permintaan per menit untuk seluruh layanan, dan batas harian untuk fitur AI.
Cek plagiarisme
5 pemeriksaan per menit per IP dan 60 per menit untuk seluruh layanan; minimal 30 kata.
Keluaran
Anggaran panjang per tugas, tidak pernah lebih dari 2.048 token; jawaban yang terpotong membawa truncated: true.
Model
Dipilih per bahasa: Bahasa Indonesia dan Inggris memakai @cf/aisingapore/gemma-sea-lion-v4-27b-it, bahasa lain memakai @cf/qwen/qwen3-30b-a3b-fp8. Bila model sibuk, terkena batas, lambat, atau gagal, permintaan berpindah ke model berikutnya dalam rantai cadangan (Qwen3-30B, lalu @cf/google/gemma-4-26b-a4b-it, lalu @cf/meta/llama-3.3-70b-instruct-fp8-fast). Bidang model selalu menyebut model yang menjawab.
Kode galat
Status
Kode
Kapan terjadi
400
invalid_request
JSON tidak valid, bidang wajib kosong, task atau lang tidak dikenal.
413
too_long
text lebih dari 6.000 karakter.
403
forbidden
Permintaan tidak berasal dari halaman adeptwrite.com.
429
rate_limited
Batas per menit per IP atau global terlampaui. Tunggu sesuai jumlah detik di Retry-After.
429
quota_exceeded
Batas harian fitur AI sudah habis. Coba lagi keesokan harinya (UTC).
502
upstream
Semua model dalam rantai gagal menjawab tepat waktu.
502
empty_output
Model menjawab, tetapi hasilnya kosong.
503
disabled
Layanan sedang dimatikan sementara oleh operator, atau (untuk /api/v1/aidetect) belum dipasang.
Format galat
Semua galat dikembalikan sebagai JSON dengan kode status HTTP yang sesuai dan bentuk yang sama:
{ "ok": false, "error": { "code": "rate_limited", "message": "Terlalu banyak permintaan. Coba lagi sebentar." } }
Periksa ok terlebih dahulu, lalu baca error.code untuk penanganan terprogram; error.message aman ditampilkan ke pengguna.
Praktik yang disarankan
Kirim teks per bagian (misalnya per paragraf) alih-alih satu dokumen panjang; hasilnya lebih cepat dan lebih mudah diperiksa.
Tangani 429 dengan jeda eksponensial, bukan percobaan ulang langsung.
Jangan mengirim data pribadi atau rahasia yang tidak perlu — meskipun kami tidak menyimpannya, prinsip minimal data tetap berlaku.
Hasil AI dapat keliru; tampilkan sebagai saran yang bisa diperiksa, bukan sebagai kebenaran final.
Pertanyaan umum
Bisakah saya memakai API dari aplikasi atau domain saya sendiri?
Belum. Saat ini Worker tidak mengirim tajuk CORS dan hanya melayani halaman adeptwrite.com. Akses eksternal dengan kunci API direncanakan bersama paket Pro; dokumentasi ini akan diperbarui begitu akses itu benar-benar tersedia.
Apakah teks yang dikirim ke API disimpan?
Tidak. Teks diteruskan ke model untuk menghasilkan jawaban lalu dibuang. Log hanya berisi metadata seperti kode status, nama task, dan durasi, tanpa isi teks sama sekali. Lihat kebijakan privasi untuk rincian lengkapnya.
Mengapa hasilnya teks polos, bukan JSON terstruktur?
Setiap task menghasilkan satu teks siap pakai tanpa pembuka atau blok Markdown supaya bisa langsung ditampilkan di editor. Struktur tambahan (misalnya daftar perubahan) direncanakan untuk versi berikutnya tanpa mengubah v1.
Berapa biaya memakai API?
Dari situs adeptwrite.com, gratis dengan batas 30 permintaan AI per menit per IP. Skema biaya untuk akses eksternal akan diumumkan bersama paket Pro; tidak ada tagihan apa pun sebelum itu.
Model mana yang menjawab permintaan saya?
Tergantung bahasanya: Bahasa Indonesia dan Inggris ditangani SEA-LION, bahasa lain ditangani Qwen3-30B. Bila model itu sibuk atau gagal, model berikutnya dalam rantai cadangan yang menjawab, dan bidang model di respons menyebut model yang benar-benar menjawab.