توثيق واجهة API

إعادة الصياغة والتدقيق اللغوي والتلخيص والترجمة وفحص الاقتباس بـ ٥٦ لغة، منها العربية. واجهة REST بسيطة تُخدَّم من حافة شبكة Cloudflare.

Same-origin
تخدم الواجهة حاليًا الطلبات الصادرة من adeptwrite.com نفسه فقط (دون ترويسات CORS). والوصول الخارجي بمفاتيح API مخطَّط له مع باقة Pro. ننشر هذا التوثيق مبكرًا ليكون العقد مفتوحًا وتتهيأ له.
الخلاصة

للواجهة v1 ثلاث نقاط نهاية فعّالة. تستقبل POST /api/v1/run ملف JSON فيه task وmode وlang وtext (حتى ٦٬٠٠٠ حرف) وتعيد نصًا عاديًا من نموذج على Cloudflare Workers AI يُختار حسب اللغة؛ وتقارن POST /api/v1/plagiarism النص بمصادر مفتوحة وتسرد كل مصدر بُحث فيه؛ وتعيد GET /api/v1/health حالة الخدمة. لا يُخزَّن النص ولا يُسجَّل، وطلبات الذكاء الاصطناعي محدودة بـ ٣٠ في الدقيقة لكل IP.

الأساسيات

  • العنوان الأساسي (Base URL): https://adeptwrite.com/api/v1
  • الصيغة: الطلبات والاستجابات بصيغة JSON (Content-Type: application/json وترميز UTF-8).
  • المصادقة: لا توجد بعد؛ يجب أن تصدر الطلبات من صفحات adeptwrite.com (same-origin). تصل مفاتيح API مع باقة Pro.
  • الخصوصية: لا يُخزَّن حقل text ولا يُسجَّل؛ وتحمل الاستجابات الترويسة Cache-Control: no-store.
  • الإصدارات: لن يتغير المسار /v1/ بما يكسر التوافق؛ وستستخدم التغييرات الجذرية المسار /v2/.

POST/api/v1/run

ينفّذ مهمة ذكاء اصطناعي واحدة على نص ويعيد النتيجة نصًا عاديًا (بلا مقدمة وبلا أسوار شيفرة Markdown).

الطلب

FieldTypeRequiredNotes
taskstring✓اسم المهمة؛ انظر قائمة المهام أدناه.
textstring✓النص المدخل، من حرف واحد إلى ٦٬٠٠٠ حرف.
langstring✓لغة النتيجة: أحد رموز لغات الموقع الـ٥٦ (ar وen وid وja وpt-pt وzh-hant…؛ وتُحوَّل وسوم BCP 47 مثل pt-BR)، أو auto بمعنى «بلغة النص المدخل نفسها».
modestring—نمط متاح لتلك الأداة، مثل Formal وAkademik وRingkas وPoin-poin (أسماء الأنماط هي تسميات السجل الإندونيسية). يُتجاهل في المهام التي لا أنماط لها.
optionsobject—خيارات خاصة بكل مهمة: from وto لمهمة translate (من أي لغة مدعومة إلى أي لغة أخرى؛ ويجوز أن تكون from هي auto؛ وتطلب sr-Cyrl الصربية بالحرف السيريلي)، و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": "ar",
  "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":"ar","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: 'ar', 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

يختار من ٤ إلى ٨ عبارات مميزة من النص، ويبحث عنها في مصادر مفتوحة بلغة النص (ويكيبيديا وويكي مصدر والنص الكامل في أرشيف الإنترنت و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": "ar", "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://ar.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":"ar","text":"…٣٠ كلمة على الأقل…"}'

GET/api/v1/health

يبيّن الخدمات المفعّلة. لا يأخذ جسمًا (body) ولا يُحتسب من الحصة.

الاستجابة

الحالة 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 و٦٠ في الدقيقة على مستوى الخدمة؛ والحد الأدنى ٣٠ كلمة.
المخرجات
ميزانية طول لكل مهمة، لا تتجاوز ٢٬٠٤٨ رمزًا (token)؛ وتحمل الإجابة المقطوعة 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_longيتجاوز text ٦٬٠٠٠ حرف.
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 بإعادة محاولة متباعدة تصاعديًا (exponential back-off) لا بإعادة فورية.
  • لا ترسل بيانات شخصية أو سرية لا حاجة إليها، فحتى مع أننا لا نخزّنها يبقى تقليل البيانات مبدأً واجبًا.
  • قد يخطئ الذكاء الاصطناعي؛ فاعرض مخرجاته اقتراحًا للمراجعة لا حقيقة نهائية.

الأسئلة الشائعة

هل أستطيع استدعاء الواجهة من تطبيقي أو نطاقي؟

ليس بعد. لا يرسل الـ Worker حاليًا ترويسات CORS ولا يخدم إلا صفحات adeptwrite.com. والوصول الخارجي بمفاتيح API مخطَّط له مع باقة Pro، وسنحدّث هذا التوثيق حين يتوافر.

هل يُخزَّن النص المرسل إلى الواجهة؟

لا. يُمرَّر النص إلى النموذج لإنتاج الإجابة ثم يُتخلَّص منه. وتحتوي السجلات على بيانات وصفية فقط (رمز الحالة والمهمة والمدة). راجع سياسة الخصوصية لمعرفة التفاصيل كلها.

لماذا المخرجات نص عادي لا JSON منظم؟

تنتج كل مهمة نصًا واحدًا جاهزًا للاستخدام بلا مقدمة ولا أسوار Markdown ليُعرض في المحرر مباشرة. وتُخطَّط بنية إضافية (مثل قائمة التعديلات) لإصدار لاحق دون تغيير v1.

كم تبلغ تكلفة استخدام الواجهة؟

من adeptwrite.com مجانية، بحد ٣٠ طلب ذكاء اصطناعي في الدقيقة لكل IP. وسيُعلَن عن أسعار الوصول الخارجي مع باقة Pro، ولا يُحتسب أي مبلغ قبل ذلك.

أي نموذج يجيب عن طلبي؟

يتوقف ذلك على اللغة: تذهب الإنجليزية والإندونيسية إلى SEA-LION، وسائر اللغات، ومنها العربية، إلى Qwen3-30B. وإذا كان النموذج مشغولًا أو فشل أجاب النموذج التالي في سلسلة الاحتياط، ويسمّي حقل model في الاستجابة النموذج الذي أجاب.