مستندات رابط برنامه‌نویسی

بازنویسی، ویرایش دستور، خلاصه‌سازی، ترجمه و بررسی سرقت ادبی در ۵۶ زبان، با یک رابط REST ساده که از لبهٔ شبکهٔ Cloudflare ارائه می‌شود.

هم‌مبدأ
رابط فعلاً فقط به درخواست‌های خود صفحه‌های adeptwrite.com پاسخ می‌دهد (بدون سرایند CORS). دسترسی بیرونی با کلید رابط برای طرح Pro برنامه‌ریزی شده است. این مستندات زود منتشر شده تا قرارداد باز باشد و بتوانید آماده شوید.
خلاصه

رابط نسخهٔ ۱ AdeptWrite سه نقطهٔ پایانی فعال دارد. POST /api/v1/run یک JSON با task، mode، lang و text (تا ۶٬۰۰۰ نویسه) می‌گیرد و خروجی متنی ساده از مدل Cloudflare Workers AI مناسب آن زبان برمی‌گرداند؛ POST /api/v1/plagiarism متن را با منابع باز می‌سنجد و همهٔ منابع جست‌وجوشده را فهرست می‌کند؛ GET /api/v1/health وضعیت سرویس را می‌دهد. متن ذخیره یا ثبت نمی‌شود و درخواست‌های هوش مصنوعی ۳۰ در دقیقه برای هر IP‌اند.

مبانی

  • نشانی پایه: https://adeptwrite.com/api/v1
  • قالب: درخواست و پاسخ JSON هستند (Content-Type: application/json، UTF-8). متن فارسی را همان‌طور با نویسه‌های یونیکد بفرستید؛ نیم‌فاصله (U+200C) حفظ می‌شود.
  • احراز هویت: هنوز ندارد؛ درخواست باید از صفحه‌های adeptwrite.com بیاید (هم‌مبدأ). کلیدهای رابط با Pro می‌رسند.
  • حریم خصوصی: فیلد text هرگز ذخیره یا ثبت نمی‌شود؛ پاسخ‌ها Cache-Control: no-store دارند.
  • نسخه‌بندی: مسیر /v1/ ناسازگار تغییر نمی‌کند؛ تغییر ناسازگار با /v2/ می‌آید.

POST/api/v1/run

یک کار هوش مصنوعی را روی یک متن اجرا می‌کند و نتیجه را به‌صورت متن ساده برمی‌گرداند (بدون مقدمه و بدون پرچین‌های Markdown).

درخواست

FieldTypeRequiredNotes
taskstring✓نام کار؛ فهرست کارها را در پایین ببینید.
textstring✓متن ورودی، ۱ تا ۶٬۰۰۰ نویسه.
langstring✓زبان نتیجه: یکی از ۵۶ کد زبان سایت (en، id، fa، ja، pt-pt، zh-hant و …؛ برچسب‌های BCP 47 مثل pt-BR نگاشت می‌شوند) یا auto به معنای «همان زبان ورودی».
modestring—یکی از حالت‌های آن ابزار، مثلاً Formal، Akademik، Ringkas یا Poin-poin (نام حالت‌ها برچسب‌های اندونزیایی ثبت‌نامه‌اند). برای کارهای بی‌حالت نادیده گرفته می‌شود.
optionsobject—گزینه‌های ویژهٔ کار: from و to برای translate (هر زبان پشتیبانی‌شده به هر زبان دیگر؛ from می‌تواند auto باشد)، platform (instagram / tiktok / linkedin) برای caption و fieldsهای برچسب‌دار اختیاری برای bio، coverletter و meta. کلیدهای دیگر نادیده گرفته می‌شوند.
POST /api/v1/run HTTP/1.1
Content-Type: application/json

{
  "task": "paraphrase",
  "mode": "Formal",
  "lang": "fa",
  "text": "نوشتن درست برای دانشجویان اهمیت زیادی دارد.",
  "options": {}
}

پاسخ

وضعیت 200 با ok: true، نتیجه در output، مدلی که واقعاً پاسخ داده در model (وقتی مدل جایگزین وارد شود فرق می‌کند) و زمان پردازش به میلی‌ثانیه. اگر پاسخ به سقف طولش یا محدودیت زمان رسیده و بریده شده باشد، truncated: true هم می‌آید.

{
  "ok": true,
  "output": "نگارش درست برای دانشجویان اهمیت فراوانی دارد.",
  "model": "@cf/qwen/qwen3-30b-a3b-fp8",
  "ms": 812
}

مثال: curl

curl -X POST https://adeptwrite.com/api/v1/run \
  -H "Content-Type: application/json" \
  -d '{"task":"grammar","lang":"fa","text":"من دیروز به کتابخانه رفتم و كتاب گرفتم."}'

مثال: 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: 'fa', 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

از متن ۴ تا ۸ عبارت متمایز برمی‌گزیند، منابع باز به زبان متن را جست‌وجو می‌کند (Wikipedia، Wikisource، متن کامل Internet Archive، Europe PMC، DOAJ، arXiv؛ و فقط وقتی پیکربندی و درخواست شده باشد، یک سرویس جست‌وجوی وب) و میزان هم‌پوشانی را نمره می‌دهد. فقط همان عبارت‌های کوتاه از سرور بیرون می‌روند. پایگاه‌های ایرانی مانند همانندجو جست‌وجو نمی‌شوند.

درخواست

FieldTypeRequiredNotes
textstring✓دست‌کم ۳۰ کلمه و حداکثر ۶٬۰۰۰ نویسه.
langstring✓یک کد زبان سایت یا auto.
optionsobject—web: true اگر اداره‌کننده سرویس جست‌وجوی وب را پیکربندی کرده باشد آن را هم می‌پرسد؛ webSearched در پاسخ می‌گوید واقعاً پاسخ داده یا نه.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…دست‌کم ۳۰ کلمه…", "lang": "fa", "options": { "web": false } }

پاسخ

وضعیت 200 با score (کلمه‌های منطبق ÷ کلمه‌ها، از ۰ تا ۱)، matches برای هر منبع با passages نشانه‌گذاری‌شده (جابه‌جایی نویسه‌ای در متن شما)، sourcesSearched (دقیقاً منابعی که پاسخشان در نتیجه هست)، sourcesSkipped با دلیل و webSearched. نمره تخمین هم‌پوشانی با منابع باز است، نه حکم سرقت ادبی.

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

مثال: curl

curl -X POST https://adeptwrite.com/api/v1/plagiarism \
  -H "Content-Type: application/json" \
  -d '{"lang":"fa","text":"…دست‌کم ۳۰ کلمه…"}'

GET/api/v1/health

نشان می‌دهد کدام سرویس‌ها روشن‌اند. بدنه ندارد و از سهمیه کم نمی‌کند.

پاسخ

وضعیت 200. تا وقتی کلید قطع اضطراری هوش مصنوعی روشن باشد، ai برابر false است؛ plagiarism منابعی را فهرست می‌کند که بررسی‌گر می‌تواند بپرسد؛ aidetect تحلیل عمیق سمت سرور تشخیص‌دهندهٔ متن هوش مصنوعی را شرح می‌دهد که هنوز مستقر نشده است (POST /api/v1/aidetect با 503 disabled پاسخ می‌دهد؛ تشخیص‌دهندهٔ روی سایت در مرورگر شما اجرا می‌شود).

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

مثال: curl

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

Task list

taskWhat it does
paraphraseبازنویسی؛ حالت‌ها: Standar (استاندارد)، Formal (رسمی)، Santai (خودمانی)، Akademik (دانشگاهی)، Kreatif (خلاقانه)، Ringkas (کوتاه‌تر)، Panjangkan (بلندتر).
grammarاصلاح دستور و املا (برای فارسی بر پایهٔ دستور خط فرهنگستان).
toneتغییر لحن؛ حالت‌ها: Formal (رسمی)، Kantor (اداری)، Santai (خودمانی).
rewriteروان‌سازی جمله‌های خشک یا نارسا؛ حالت‌ها: Standar، Formal.
resizeکوتاه‌کردن یا بسط جمله؛ حالت‌ها: Ringkas (کوتاه‌تر)، Panjangkan (بلندتر).
essayساختن پاراگراف یا انشا از سرفصل‌ها؛ حالت‌ها: Akademik (دانشگاهی)، Kreatif (خلاقانه)، Panjangkan (بلندتر).
summarizeخلاصه؛ حالت‌ها: Poin-poin (نکته‌به‌نکته)، Paragraf (پاراگراف)، Satu kalimat (یک جمله).
translateترجمه میان هر دو زبان پشتیبانی‌شده؛ options.from (یا auto) و options.to؛ حالت‌ها: Alami (طبیعی، پیش‌فرض)، Formal (رسمی)، Santai (خودمانی).
thesisایدهٔ عنوان و طرح فصل‌های پایان‌نامه.
abstractچکیدهٔ ساختاریافته از خلاصهٔ پژوهش.
captionکپشن شبکه‌های اجتماعی؛ options.platform: instagram، tiktok، linkedin.
emailایمیل و نامه؛ حالت‌ها: Lamaran kerja (درخواست شغل)، Surat resmi (نامهٔ رسمی)، Follow-up (پیگیری).
headlineعنوان مقاله و تیتر؛ حالت‌ها: Kreatif (خلاقانه)، Ringkas (کوتاه).
productتوضیحات محصول؛ حالت‌ها: Marketplace (بازارچهٔ آنلاین)، Toko online (فروشگاه آنلاین).
synonymفهرست مترادف برای یک واژه یا عبارت.
humanizeطبیعی‌تر کردن متن خشک یا کلیشه‌ای؛ حالت‌ها: Alami (طبیعی)، Pribadi (شخصی)، Profesional (حرفه‌ای).
metaسه جفت عنوان و توضیح متا؛ حالت‌ها: Artikel (مقاله)، Produk (محصول)، Halaman (هر صفحهٔ وب).
hashtagیک خط هشتگ؛ حالت‌ها: Instagram، TikTok، LinkedIn، X.
bioسه بیوی پروفایل؛ حالت‌ها: Instagram، LinkedIn، X، TikTok.
outlineطرح شماره‌دار با زیرنکته‌ها؛ حالت‌ها: Artikel (مقاله)، Esai (انشا)، Skripsi (پایان‌نامه)، Presentasi (ارائه).
sloganده ایدهٔ شعار تبلیغاتی؛ حالت‌ها: Merek (برند)، Kampanye (کمپین)، Produk (محصول).
paragraphیک پاراگراف از یک موضوع؛ حالت‌ها: Pembuka (آغاز)، Isi (متن)، Penutup (پایان).
coverletterپیش‌نویس کاور لتر؛ حالت‌ها: Fresh graduate (تازه‌فارغ‌التحصیل)، Berpengalaman (باتجربه)، Magang (کارآموزی).
poemشعر کوتاه؛ حالت‌ها: Bebas (آزاد)، Berima (قافیه‌دار)، Akrostik (آکروستیک)، Haiku (هایکو).

محدودیت‌ها

طول متن
حداکثر ۶٬۰۰۰ نویسه در هر درخواست (بیشتر از آن 413 too_long می‌گیرد).
برای هر نشانی IP
۳۰ درخواست در دقیقه.
سراسری
۱۰۰ درخواست در دقیقه برای کل سرویس، به‌علاوهٔ سقف روزانه برای امکانات هوش مصنوعی.
سرقت ادبی
۵ بررسی در دقیقه برای هر IP و ۶۰ بررسی در دقیقه برای کل سرویس؛ دست‌کم ۳۰ کلمه.
خروجی
سقف طول برای هر کار، هرگز بیش از ۲٬۰۴۸ توکن؛ پاسخ بریده‌شده truncated: true دارد.
مدل
برای هر زبان جداگانه انتخاب می‌شود: انگلیسی و اندونزیایی روی @cf/aisingapore/gemma-sea-lion-v4-27b-it و همهٔ زبان‌های دیگر، از جمله فارسی، روی @cf/qwen/qwen3-30b-a3b-fp8 اجرا می‌شوند. وقتی مدلی پرمشغله، محدودشده، کند یا ناموفق باشد، درخواست به مدل بعدی زنجیره می‌رود (Qwen3-30B، سپس @cf/google/gemma-4-26b-a4b-it، سپس @cf/meta/llama-3.3-70b-instruct-fp8-fast). فیلد model همیشه مدلی را نام می‌برد که پاسخ داده است.

کدهای خطا

وضعیتکدچه زمانی رخ می‌دهد
400invalid_requestJSON نامعتبر، فیلد الزامی جاافتاده، یا task یا lang ناشناخته.
413too_longtext از ۶٬۰۰۰ نویسه بیشتر است.
403forbiddenدرخواست از یک صفحهٔ adeptwrite.com نیامده است.
429rate_limitedسقف دقیقه‌ای هر IP یا سراسری رد شده است. به‌اندازهٔ ثانیه‌های Retry-After صبر کنید.
429quota_exceededسقف روزانهٔ امکانات هوش مصنوعی تمام شده است. روز بعد (به وقت UTC) دوباره امتحان کنید.
502upstreamهیچ‌یک از مدل‌های زنجیره به‌موقع پاسخ نداد.
502empty_outputمدل‌ها پاسخ دادند اما نتیجه خالی بود.
503disabledاداره‌کننده سرویس را موقتاً خاموش کرده است، یا (برای /api/v1/aidetect) هنوز مستقر نشده است.

قالب خطا

هر خطا به‌صورت JSON و با کد وضعیت HTTP متناظر و همین ساختار برمی‌گردد:

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

ابتدا ok را بررسی کنید و برای رسیدگی برنامه‌نویسی‌شده error.code را بخوانید؛ error.message برای نشان‌دادن به کاربر مناسب است.

روش پیشنهادی

  • متن را تکه‌تکه (مثلاً پاراگراف به پاراگراف) بفرستید، نه یک سند بلند؛ نتیجه سریع‌تر می‌رسد و بررسی‌اش آسان‌تر است.
  • 429 را با عقب‌نشینی نمایی مدیریت کنید، نه با تلاش دوبارهٔ فوری.
  • دادهٔ شخصی یا محرمانه‌ای را که لازم ندارید نفرستید؛ حتی اگر ما ذخیره‌اش نمی‌کنیم، کمینه‌سازی داده همچنان اصل است.
  • خروجی هوش مصنوعی می‌تواند اشتباه باشد؛ آن را پیشنهادی برای بازبینی نشان دهید، نه حقیقتی نهایی.

پرسش‌های متداول

آیا می‌توانم رابط را از برنامه یا دامنهٔ خودم صدا بزنم؟

هنوز نه. این Worker فعلاً سرایند CORS نمی‌فرستد و فقط به صفحه‌های adeptwrite.com پاسخ می‌دهد. دسترسی بیرونی با کلید رابط برای طرح Pro برنامه‌ریزی شده است و وقتی فراهم شود این مستندات به‌روز می‌شود.

آیا متنی که به رابط می‌فرستم ذخیره می‌شود؟

خیر. متن برای ساختن پاسخ به مدل داده می‌شود و بعد دور ریخته می‌شود. گزارش‌ها فقط فراداده دارند (کد وضعیت، کار، مدت). همهٔ جزئیات را در سیاست حریم خصوصی ببینید.

چرا خروجی متن ساده است و JSON ساختاریافته نیست؟

هر کار یک متن آمادهٔ استفاده تولید می‌کند، بدون مقدمه و پرچین Markdown، تا مستقیم در ویرایشگر نشان داده شود. ساختار بیشتر (مثلاً فهرست تغییرها) برای نسخه‌ای بعدی و بی‌آنکه نسخهٔ ۱ عوض شود برنامه‌ریزی شده است.

استفاده از رابط چقدر هزینه دارد؟

از روی adeptwrite.com رایگان است و به ۳۰ درخواست هوش مصنوعی در دقیقه برای هر IP محدود است. قیمت دسترسی بیرونی همراه طرح Pro اعلام می‌شود؛ تا آن زمان چیزی دریافت نمی‌شود.

کدام مدل به درخواست من پاسخ می‌دهد؟

به زبان بستگی دارد: انگلیسی و اندونزیایی به SEA-LION می‌روند و زبان‌های دیگر، از جمله فارسی، به Qwen3-30B. اگر آن مدل مشغول باشد یا شکست بخورد، مدل بعدی زنجیره جایش پاسخ می‌دهد و فیلد model در پاسخ نام همان مدل را می‌آورد.