תיעוד ה־API

שכתוב, בדיקת דקדוק, סיכום, תרגום ובדיקת העתקות ב־56 שפות, כולל עברית. REST פשוט שמוגש מהקצה של Cloudflare.

אותו מקור (Same-origin)
כרגע ה־API משרת רק בקשות מהאתר adeptwrite.com עצמו (בלי כותרות CORS). גישה חיצונית באמצעות מפתחות API מתוכננת יחד עם חבילת Pro. התיעוד מתפרסם מוקדם כדי שהחוזה יהיה פתוח ואפשר יהיה להיערך אליו.
בקצרה

ל־API של AdeptWrite בגרסה 1 יש שלוש נקודות קצה פעילות. POST /api/v1/run מקבלת JSON עם task, mode, lang ו־text (עד 6,000 תווים) ומחזירה טקסט פשוט ממודל של Cloudflare Workers AI שנבחר לפי השפה; POST /api/v1/plagiarism משווה טקסט למקורות פתוחים ומפרטת כל מקור שנסרק; GET /api/v1/health מחזירה את מצב השירות. הטקסט אינו נשמר ואינו נרשם ביומנים, ובקשות הבינה המלאכותית מוגבלות ל־30 בדקה לכל כתובת IP.

עקרונות בסיסיים

  • כתובת בסיס: https://adeptwrite.com/api/v1
  • פורמט: הבקשות והתשובות הן JSON (Content-Type: application/json, קידוד UTF-8). עברית נשלחת כ־UTF-8 רגיל, בלי טיפול מיוחד בכיווניות.
  • אימות: עדיין אין; הבקשות חייבות להגיע מעמודי adeptwrite.com (אותו מקור). מפתחות API יגיעו עם Pro.
  • פרטיות: שדה text אינו נשמר ואינו נרשם ביומנים; התשובות נשלחות עם Cache-Control: no-store.
  • גרסאות: הנתיב /v1/ לא ישתנה באופן שאינו תואם לאחור; שינויים שוברים ישתמשו ב־/v2/.

POST/api/v1/run

מריצה משימת בינה מלאכותית אחת על טקסט ומחזירה את התוצאה כטקסט פשוט (בלי פתיח ובלי גדרות Markdown).

בקשה

FieldTypeRequiredNotes
taskstring✓שם המשימה; ראו את רשימת המשימות בהמשך.
textstring✓טקסט הקלט, 1–6,000 תווים.
langstring✓שפת התוצאה: אחד מ־56 קודי השפה של האתר (he, 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": "he",
  "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":"he","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: 'he', 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

בוחרת 4–8 ביטויים ייחודיים מהטקסט, מחפשת אותם במקורות פתוחים בשפת הטקסט (ויקיפדיה, ויקיטקסט, טקסט מלא של Internet Archive, Europe PMC, DOAJ, arXiv; ספק חיפוש ברשת רק כשהוגדר ונתבקש) ומחשבת ציון חפיפה. רק הביטויים הקצרים האלה יוצאים מהשרת.

בקשה

FieldTypeRequiredNotes
textstring✓לפחות 30 מילים, לכל היותר 6,000 תווים.
langstring✓קוד שפה של האתר או auto.
optionsobject—web: true מפעיל גם את ספק החיפוש ברשת כשהמפעיל הגדיר אחד; webSearched בתשובה מציין אם הוא באמת ענה.
POST /api/v1/plagiarism HTTP/1.1
Content-Type: application/json

{ "text": "…לפחות 30 מילים…", "lang": "he", "options": { "web": false } }

תגובה

סטטוס 200 עם score (מילים תואמות לחלק במספר המילים, 0–1), matches לפי מקור עם passages מסומנים (היסטים של תווים בטקסט שלכם), sourcesSearched (בדיוק המקורות שתשובותיהם נכללות בתוצאה), sourcesSkipped עם סיבה, ו־webSearched.

{
  "ok": true,
  "score": 0.42,
  "words": 52,
  "matchedWords": 22,
  "matches": [{ "source": "wikipedia", "title": "…", "url": "https://he.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":"he","text":"…לפחות 30 מילים…"}'

GET/api/v1/health

מדווחת אילו שירותים מופעלים. אינה מקבלת גוף בקשה ואינה נספרת במכסה.

תגובה

סטטוס 200. הערך ai הוא false כשמתג הכיבוי של הבינה המלאכותית פעיל; plagiarism מפרט את המקורות שבדיקת ההעתקות יכולה לשאול; aidetect מתאר את הניתוח המעמיק בצד השרת של גלאי ה־AI, שעדיין לא פרוס (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 (הייקו).

מגבלות

אורך הטקסט
עד 6,000 תווים לבקשה (מעבר לכך: 413 too_long).
לכל כתובת IP
30 בקשות בדקה.
כללי
100 בקשות בדקה בכל השירות, ובנוסף תקרה יומית לתכונות הבינה המלאכותית.
בדיקת העתקות
5 בדיקות בדקה לכל כתובת IP ו־60 בדקה בכל השירות; מינימום 30 מילים.
פלט
תקציב אורך לכל משימה, לעולם לא יותר מ־2,048 אסימונים (tokens); תשובה שנחתכה נושאת 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 חורג מ־6,000 תווים.
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) ולא בניסיונות חוזרים מיידיים.
  • אל תשלחו מידע אישי או חסוי שאינכם צריכים, גם אם איננו שומרים אותו; עקרון צמצום הנתונים עדיין חל.
  • פלט בינה מלאכותית עלול להיות שגוי; הציגו אותו כהצעה לבדיקה ולא כאמת סופית.

שאלות נפוצות

אפשר לקרוא ל־API מהיישום או מהדומיין שלי?

עדיין לא. ה־Worker כרגע אינו שולח כותרות CORS ומשרת רק עמודים של adeptwrite.com. גישה חיצונית באמצעות מפתחות API מתוכננת יחד עם חבילת Pro; התיעוד יתעדכן כשהיא תהיה זמינה.

האם טקסט שנשלח ל־API נשמר?

לא. הטקסט מועבר למודל כדי להפיק את התשובה ואז נמחק. היומנים כוללים מטא־נתונים בלבד (קוד סטטוס, משימה, משך). כל הפרטים במדיניות הפרטיות.

למה הפלט הוא טקסט פשוט ולא JSON מובנה?

כל משימה מפיקה טקסט אחד מוכן לשימוש, בלי פתיח ובלי גדרות Markdown, כדי שאפשר יהיה להציג אותו ישירות בעורך. מבנה נוסף (למשל רשימת שינויים) מתוכנן לגרסה מאוחרת יותר בלי לשנות את v1.

כמה עולה ה־API?

מתוך adeptwrite.com הוא חינמי, ומוגבל ל־30 בקשות בינה מלאכותית בדקה לכל כתובת IP. התמחור לגישה חיצונית יפורסם עם חבילת Pro; עד אז לא מחייבים דבר.

איזה מודל עונה לבקשה שלי?

זה תלוי בשפה: אנגלית ואינדונזית עוברות ל־SEA-LION, ושאר השפות, ובהן עברית, ל־Qwen3-30B. אם המודל עמוס או נכשל, המודל הבא בשרשרת הגיבוי עונה במקומו, והשדה model בתשובה מציין את זה שענה.