في هذه الصفحة
البدء
نظرة عامة
رقم إصدار الواجهة جزء من المسار: /api/v1. تستقبل كل نقطة نهاية طلب POST بجسم JSON وتجيب بصيغة JSON، بما في ذلك الأخطاء.
عنوان URL الأساسي https://blurwrite.com
- POST /api/v1/detectتحليل نص واحد
- POST /api/v1/detect/batchتحليل عدة نصوص
- POST /api/v1/humanizeإضفاء طابع بشري على نص
- POST /api/v1/paraphraseإعادة صياغة نص
- POST /api/v1/summarizeتلخيص نص
- POST /api/v1/grammarتدقيق لغوي
على الموقع فقط، وليست في الواجهة: عدّاد الكلمات، وعدّاد الأحرف، وفاحص الانتحال، وخيار «وقت أطول لإعادة الكتابة» في أداة إعادة الصياغة البشرية.
مُولّد من مستند OpenAPI، لذا يسرد بدقة المسارات والحقول التي تقبلها واجهة API. مستند OpenAPI
استدعاؤك الأول
يجب أن يحتوي النص على 50 كلمة على الأقل.
اقرأ "calibrated" أولًا: عندما تكون قيمته false، لا يكون للغة منحنى ملائم بعد، لذا يجب عدم استخدام الدرجة بوصفها نتيجة.
تُعرض كل قيمة بنوعها. أما الاستجابة الفعلية فتحمل قراءة نصك.
curl -X POST https://blurwrite.com/api/v1/detect \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}المصادقة
أرسل مفتاحك في ترويسة Authorization بوصفه رمز bearer. يُرفض المفتاح إذا أُرسل في عنوان URL.
يحمل المفتاح نطاقات صلاحية: detect وrewrite وsummarize وgrammar. يعيد المسار 403 out_of_scope إذا لم يحمل المفتاح نطاق الصلاحية المطلوب.
Authorization: Bearer YOUR_API_KEYنقاط النهاية
POST /api/v1/detect
تحليل نص واحد. قراءة الكاشف لنص واحد: درجة من 0 إلى 100، والنطاق المحيط بها، وقراءة لكل جملة، وبيان ما إذا كانت اللغة معايرة.
نطاق صلاحية المفتاح: detect
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| language | string | لا | رمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص. |
| contentType | string | لا | نوع النص، مثل "essay" أو "email"، عندما ينبغي استخدام منحنى ذلك النوع في القراءة. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| figure | number | القراءة من 0 إلى 100: مدى احتمال أن يكون النص مكتوبًا آليًا. |
| low | number | الحد الأدنى للنطاق المحيط بالدرجة. |
| high | number | الحد الأعلى للنطاق المحيط بالدرجة. |
| uncertainty | number | نصف عرض النطاق، بالنقاط. |
| verdict | string | الفئة التي تقع فيها الدرجة؛ وهي فئة وليست حكمًا على هوية كاتب النص. إحدى القيم: human, uncertain, ai. |
| confidence | string | مدى إمكانية الاعتماد على القراءة. إحدى القيم: low, medium, high. |
| sentences | مصفوفة من SentenceScore | قراءة لكل جملة. |
| words | integer | الكلمات التي جرى تحليلها. |
| language | string | اللغة التي استُخدمت لتحليل النص. |
| model | string | النموذج الذي أنتج القراءة. |
| calibrated | boolean | ما إذا كان للغة منحنى ملائم. عندما تكون القيمة false، يجب عدم استخدام الدرجة بوصفها نتيجة. |
| bandHumanFlagRate | number | null | معدل تصنيف النصوص البشرية في هذه الفئة على أنها آلية في قياساتنا، أو null. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | no_text | لا يحتوي جسم الطلب على "text". |
| 422 | too_short | النص أقصر من الحد الأدنى. |
| 413 | text_too_long | النص أطول مما يستطيع المحرك تحليله في استدعاء واحد. قسّمه. لم تُحتسب أي كلمات. |
| 422 | not_calibrated | لا يمكن تحليل هذه اللغة بعد. |
| 503 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 502 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 503 | engine_starting | المحرك قيد التشغيل ولم يصبح جاهزًا في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا بعد دقيقة. |
| 503 | engine_busy | كان المحرك مشغولًا وتعذر بدء التحليل في الوقت المحدد؛ تُعطى الأولوية لمستخدمي الكاشف بخطة Pro على الموقع قبل استدعاءات API. لم تُحتسب أي كلمات. حاول مجددًا بعد قليل. |
| 504 | engine_timeout | لم يُنهِ المحرك تحليل النص في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا أو أرسل نصًا أقصر. |
| 429 | concurrency_limited | بلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After. |
curl -X POST https://blurwrite.com/api/v1/detect \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/detect', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/detect/batch
تحليل عدة نصوص. نصوص في استدعاء واحد حتى الحد الأقصى للدفعة. يتطلب الاستدعاء رصيدًا مسبقًا يكفي لكلمات كل نص يمكن تحليله (50 كلمة أو أكثر)؛ وتُعاد لاحقًا كلمات أي نص لا تُرجع له قراءة. فشل نص واحد لا يؤدي إلى فشل الدفعة.
نطاق صلاحية المفتاح: detect
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| items | مصفوفة من object | نعم | النصوص، ولكل منها حقل "text" خاص به وحقول اختيارية هي "id" و"language" و"contentType". |
| items[].id | string | لا | معرّف تختاره للعنصر، ويُعاد مع نتيجته. عند حذفه، يُستخدم موضع العنصر. |
| items[].text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| items[].language | string | لا | رمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص. |
| items[].contentType | string | لا | نوع النص، مثل "essay" أو "email"، عندما ينبغي استخدام منحنى ذلك النوع في القراءة. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| results | مصفوفة من BatchResult | نتيجة واحدة لكل عنصر، بترتيب الإرسال. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | batch_empty | لا يحتوي جسم الطلب على "items"، أو أن القائمة فارغة. |
| 413 | batch_too_large | عدد عناصر الدفعة يتجاوز الحد المسموح. |
| 429 | concurrency_limited | بلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After. |
curl -X POST https://blurwrite.com/api/v1/detect/batch \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"id":"1","text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."},{"id":"2","text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}]}'const res = await fetch('https://blurwrite.com/api/v1/detect/batch', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"items": [
{
"id": "1",
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
},
{
"id": "2",
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}
]
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/detect/batch",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"items": [
{
"id": "1",
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
{
"id": "2",
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
],
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"results": [
{
"id": "string",
"detection": {
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"error": {
"code": "string",
"message": "string"
}
}
],
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/humanize
إضفاء طابع بشري على نص. أداة إضفاء الطابع البشري مع التحقق من الحقائق: تُحفظ الأرقام والأسماء والاقتباسات، وتُصحح إعادة الصياغة التي غيّرت حقيقة أو يُبلّغ عنها. يكتب الوضع "custom" (Pro) بأسلوبك الخاص، المستخلص من عينة من كتابتك.
عبر الواجهة تنفّذ أداة إعادة الصياغة البشرية إعادة الكتابة القياسية. أما «وقت أطول لإعادة الكتابة» فمتاح على الموقع فقط.
نطاق صلاحية المفتاح: rewrite
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| mode | string | لا | وضع إعادة الصياغة. إحدى القيم: natural, formal, simple, academic, creative, shorten, expand, custom. القيمة الافتراضية: natural. |
| style_sample | string | لا | مع الوضع "custom": عينة من كتابتك، من 150 إلى 2,000 كلمة، تُحلل على الخادم. عند حذفها، تُستخدم العينة المحفوظة في حسابك. |
| tab | string | لا | علامة تبويب أداة إضفاء الطابع البشري: المستوى اللغوي المستخدم في إعادة الصياغة. يحافظ الخيار القياسي على المستوى اللغوي للنص الأصلي. إحدى القيم: standard, academic, professional, casual. القيمة الافتراضية: standard. |
| strength | string | لا | يحافظ المستوى العادي على المحتوى والمستوى اللغوي. قد يعيد المستوى المكثف ترتيب النص ويحذف التفاصيل الإضافية، مع الحفاظ على جميع النقاط الرئيسية، وقد تبدو بعض الأجزاء غير مألوفة. إحدى القيم: regular, aggressive. القيمة الافتراضية: regular. |
| ownTouch | string | لا | تفصيل أو مثال أو رأي بكلماتك الخاصة، بحد أقصى 400 حرفًا، يُدمج في النص المعاد صياغته. |
| language | string | لا | رمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| text | string | النص بعد إعادة الصياغة. |
| before | Detection | قراءة الكاشف لنصك، أو null عند عدم وجود قراءة. |
| after | Detection | قراءة الكاشف للنص المعاد صياغته، أو null. |
| passes | integer | عدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة. |
| facts | object | ما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة. |
| late | boolean | تكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | no_text | لا يحتوي جسم الطلب على "text". |
| 422 | too_short | النص أقصر من الحد الأدنى. |
| 400 | unknown_mode | هذا الوضع غير متاح في هذا المسار. |
| 400 | unknown_option | علامة التبويب أو مستوى التعديل غير متاح في هذا المسار. |
| 402 | plan_required | يتطلب الوضع أو التبويب أو قوة التغيير أو اللمسة الخاصة خطة لا يملكها الحساب؛ ويتطلب الوضع "custom" خطة Pro. لم تُحتسب أي كلمات. |
| 400 | no_sample | يتطلب الوضع "custom" عينة كتابة مُرسلة أو محفوظة في الحساب. |
| 400 | sample_too_short | عينة الكتابة أقصر من الحد الأدنى. |
| 400 | sample_too_long | عينة الكتابة أطول من الحد الأقصى. |
| 429 | concurrency_limited | بلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After. |
| 422 | no_rewrite | استجاب المحرك، لكن لم تجتز أي مسودة الفحوصات (فارغة، أو رفض، أو نسخة من النص). لم تُحتسب أي كلمات. |
| 503 | timeout | استغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات. |
| 503 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 502 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
curl -X POST https://blurwrite.com/api/v1/humanize \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/humanize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/humanize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"before": {
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"after": {
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"passes": "integer",
"facts": "object",
"late": "boolean",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/paraphrase
إعادة صياغة نص. أداة إعادة الصياغة، بقائمة الأوضاع نفسها المتاحة في أداة إعادة الصياغة على الموقع.
نطاق صلاحية المفتاح: rewrite
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| mode | string | لا | وضع إعادة الصياغة. إحدى القيم: standard, fluency, formal, academic, simple, creative, expand, shorten. القيمة الافتراضية: standard. |
| strength | string | لا | مدى التغيير المسموح به مقارنة بالنص الأصلي. إحدى القيم: readable, balanced, strong. القيمة الافتراضية: balanced. |
| readability | string | لا | المستوى اللغوي للكتابة. إحدى القيم: casual, professional, academic, creative. القيمة الافتراضية: professional. |
| purpose | string | لا | الغرض من النص. إحدى القيم: general, essay, article, email, marketing, report, story. القيمة الافتراضية: general. |
| synonyms | string | لا | مدى حرية استبدال الكلمات. إحدى القيم: few, some, many. القيمة الافتراضية: some. |
| freezeWords | مصفوفة من string | لا | كلمات وعبارات يجب إعادتها كما كُتبت تمامًا: بحد أقصى 25، وحتى 60 حرفًا لكل منها. تُحتسب كلماتها ضمن كلمات الاستدعاء. |
| customInstruction | string | لا | تعليمات قصيرة تكتبها لإعادة الصياغة، حتى 500 حرفًا. تُحتسب كلماتها ضمن كلمات الاستدعاء. |
| language | string | لا | رمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص. |
| closedLoop | boolean | لا | اضبط القيمة على false لتجاوز الحلقة المغلقة. القيمة الافتراضية: true. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| text | string | النص بعد إعادة الصياغة. |
| before | Detection | قراءة الكاشف لنصك، أو null عند عدم وجود قراءة. |
| after | Detection | قراءة الكاشف للنص المعاد صياغته، أو null. |
| passes | integer | عدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة. |
| facts | object | ما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة. |
| late | boolean | تكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | no_text | لا يحتوي جسم الطلب على "text". |
| 422 | too_short | النص أقصر من الحد الأدنى. |
| 400 | unknown_mode | هذا الوضع غير متاح في هذا المسار. |
| 400 | option_invalid | ليست freezeWords قائمة كلمات أو عبارات. لم يُحتسب أي استخدام. |
| 400 | option_too_long | تتجاوز freezeWords أو customInstruction الحد المسموح. لم يُحتسب أي استخدام. |
| 429 | concurrency_limited | بلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After. |
| 422 | no_rewrite | استجاب المحرك، لكن لم تجتز أي مسودة الفحوصات (فارغة، أو رفض، أو نسخة من النص). لم تُحتسب أي كلمات. |
| 503 | timeout | استغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات. |
| 503 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 502 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
curl -X POST https://blurwrite.com/api/v1/paraphrase \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/paraphrase', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/paraphrase",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"before": {
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"after": {
"figure": "number، من 0 إلى 100",
"low": "number، من 0 إلى 100",
"high": "number، من 0 إلى 100",
"uncertainty": "number",
"verdict": "human | uncertain | ai",
"confidence": "low | medium | high",
"sentences": [
{
"text": "string",
"score": "number، من 0 إلى 1",
"verdict": "human | uncertain | ai"
}
],
"words": "integer",
"language": "string",
"model": "string",
"calibrated": "boolean",
"bandHumanFlagRate": "number | null"
},
"passes": "integer",
"facts": "object",
"late": "boolean",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/summarize
تلخيص نص. أداة التلخيص، في صورة جمل أساسية أو فقرة أو نقاط.
نطاق صلاحية المفتاح: summarize
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| mode | string | لا | شكل الملخص. إحدى القيم: key-sentences, paragraph, bullets. القيمة الافتراضية: key-sentences. |
| length | string | لا | طول الملخص. إحدى القيم: short, medium, long. القيمة الافتراضية: medium. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| text | string | الملخص. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | no_text | لا يحتوي جسم الطلب على "text". |
| 422 | too_short | النص أقصر من الحد الأدنى. |
| 429 | concurrency_limited | بلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After. |
| 503 | timeout | استغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات. |
| 503 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 502 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
curl -X POST https://blurwrite.com/api/v1/summarize \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/summarize', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/summarize",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"text": "string",
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}POST /api/v1/grammar
تدقيق لغوي. مشكلات النحو والإملاء والترقيم والأسلوب، مع موضع كل منها في النص والبدائل المقترحة.
نطاق صلاحية المفتاح: grammar
جسم الطلب
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| text | string | نعم | النص المراد تحليله أو إعادة صياغته. |
| language | string | لا | رمز لغة التدقيق، مثل "en-US" أو "de-DE". القيمة الافتراضية: en-US. |
الاستجابة
| الحقل | النوع | الوصف |
|---|---|---|
| issues | مصفوفة من GrammarIssue | المشكلات المكتشفة، بترتيب ظهورها. |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
الأخطاء الإضافية لهذا المسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | no_text | لا يحتوي جسم الطلب على "text". |
| 503 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 502 | engine_unavailable | لم يستجب المحرك. لم تُحتسب أي كلمات. |
| 503 | engine_starting | المحرك قيد التشغيل ولم يصبح جاهزًا في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا بعد دقيقة. |
| 504 | engine_timeout | لم يُنهِ المحرك تحليل النص في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا أو أرسل نصًا أقصر. |
curl -X POST https://blurwrite.com/api/v1/grammar \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'const res = await fetch('https://blurwrite.com/api/v1/grammar', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."
}),
})
const data = await res.json()
if (!res.ok) throw new Error(`${data.error.code}: ${data.error.message}`)import os
import requests
res = requests.post(
"https://blurwrite.com/api/v1/grammar",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"text": "اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى.",
},
timeout=90,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{data['error']['code']}: {data['error']['message']}"){
"issues": [
{
"offset": "integer",
"length": "integer",
"message": "string",
"shortMessage": "string",
"category": "grammar | spelling | punctuation | style | typography",
"replacements": [
"string"
],
"context": "string"
}
],
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}المرجع
الأخطاء
يجيب الخطأ برمز حالة HTTP الخاص به وبجسم بهذا الشكل. اعتمد على الرمز؛ فالرسالة تشرح ما الذي حدث وما الخطوة التالية.
الأخطاء التي قد يعيدها أي مسار
| الحالة | الرمز | المعنى |
|---|---|---|
| 401 | key_in_url | أُرسل المفتاح في عنوان URL. أرسله في ترويسة Authorization. |
| 401 | no_key | لم يُرسل مفتاح. |
| 401 | bad_key | المفتاح غير صالح أو أُلغي. |
| 403 | out_of_scope | لا يحمل المفتاح نطاق الصلاحية الذي يتطلبه هذا المسار. |
| 429 | rate_limited | عدد الطلبات لهذا المفتاح أكبر من المسموح. انتظر المدة المحددة في Retry-After. |
| 403 | plan_lapsed | لم تعد خطة الحساب تشمل واجهة API. |
| 413 | too_large | حجم الطلب أكبر من المسموح. |
| 400 | bad_body | جسم الطلب ليس كائن JSON. |
| 413 | too_many_words | يتجاوز عدد كلمات الطلب الحد المسموح للطلب الواحد. قسّمه. لم يُحتسب أي استخدام. |
| 402 | quota_exhausted | نُفدت كلمات API في الخطة لفترة الفوترة هذه والرصيد الإضافي فارغ. لم تُحتسب أي كلمات. |
| 402 | quota_short | يتطلب الاستدعاء كلمات أكثر من مجموع كلمات API المتبقية في الخطة والرصيد. لم تُحتسب أي كلمات. |
| 402 | monthly_ceiling | بلغ الحساب حد API لفترة الفوترة هذه، وهو حد يسري مهما كان الرصيد. لم تُحتسب أي كلمات. |
| 503 | store_unavailable | تعذرت قراءة المفتاح أو عدد كلمات الحساب أو عينة الكتابة المحفوظة حاليًا، أو لا يحتوي هذا النشر على مخزن للحسابات. لم يُنفذ أي شيء ولم تُحتسب أي كلمات. |
يحجز الطلب كلماته قبل التنفيذ ويعيدها إذا فشل. إذا تعذّر تسجيل عدد الكلمات في تلك اللحظة، تبقى الكلمات محتسبة: يوضح الطلب الفاشل ذلك ويُضمّن "recorded": false في بيانات الاستخدام، وتُرجع الدفعة "recorded": false في بيانات الاستخدام، ولا يُقدّر عدد الكلمات تخمينًا.
{
"error": {
"code": "string",
"message": "string",
"docs": "string",
"available": "integer"
},
"usage": {
"recorded": "boolean",
"words": "integer",
"source": "plan | balance | plan_and_balance",
"fromPlan": "integer",
"fromBalance": "integer",
"allowanceLeft": "integer | null",
"balance": "integer"
}
}الحدود
كل قيمة هنا هي القيمة التي تفرضها واجهة API.
- يتيح كل مفتاح إرسال 60 طلبًا كحد أقصى كل 60 ثانية.
- يتيح كل مفتاح تشغيل 4 استدعاء للكشف كحد أقصى (تُحسب الدفعة استدعاءً واحدًا) و2 استدعاء لإضفاء الطابع البشري أو إعادة الصياغة أو التلخيص في الوقت نفسه؛ ويُرد على أي استدعاء إضافي بالحالة 429 concurrency_limited مع ترويسة Retry-After.
- عندما تكون المحركات مشغولة، تُعطى الأولوية لقراءات حسابات Pro على الموقع قبل استدعاءات API، لذا قد ينتظر استدعاء API دوره.
- تحتوي الدفعة على 50 نصًا كحد أقصى.
- الحد الأقصى للطلب الواحد هو 20,000 كلمة، سواء أكان نصًا واحدًا أم دفعة كاملة.
- تقرأ أداة الكشف نصًا واحدًا بحد أقصى 90,000 حرفًا، أي نحو 10,000 كلمة، في جميع الخطط. يُعاد الرد 413 text_too_long لأي نص أطول، حتى إن كان ضمن حد كلمات الطلب.
- يمكن للحساب الاحتفاظ بما يصل إلى 5 مفتاحًا نشطًا، مما يتيح استبدال المفتاح دون انقطاع الخدمة.
كائنات الاستجابة
الكائنات التي تعيدها نقاط النهاية، حقلًا بحقل.
Detection
| الحقل | النوع | الوصف |
|---|---|---|
| figure | number | القراءة من 0 إلى 100: مدى احتمال أن يكون النص مكتوبًا آليًا. |
| low | number | الحد الأدنى للنطاق المحيط بالدرجة. |
| high | number | الحد الأعلى للنطاق المحيط بالدرجة. |
| uncertainty | number | نصف عرض النطاق، بالنقاط. |
| verdict | string | الفئة التي تقع فيها الدرجة؛ وهي فئة وليست حكمًا على هوية كاتب النص. إحدى القيم: human, uncertain, ai. |
| confidence | string | مدى إمكانية الاعتماد على القراءة. إحدى القيم: low, medium, high. |
| sentences | مصفوفة من SentenceScore | قراءة لكل جملة. |
| words | integer | الكلمات التي جرى تحليلها. |
| language | string | اللغة التي استُخدمت لتحليل النص. |
| model | string | النموذج الذي أنتج القراءة. |
| calibrated | boolean | ما إذا كان للغة منحنى ملائم. عندما تكون القيمة false، يجب عدم استخدام الدرجة بوصفها نتيجة. |
| bandHumanFlagRate | number | null | معدل تصنيف النصوص البشرية في هذه الفئة على أنها آلية في قياساتنا، أو null. |
SentenceScore
| الحقل | النوع | الوصف |
|---|---|---|
| text | string | الجملة. |
| score | number | من 0 إلى 1، مدى احتمال أن تكون الجملة مكتوبة آليًا. |
| verdict | string | الفئة التي تقع فيها الجملة. إحدى القيم: human, uncertain, ai. |
Usage
| الحقل | النوع | الوصف |
|---|---|---|
| recorded | boolean | تكون القيمة true عند تسجيل العدد. ولا تكون false إلا عندما يتعذر على دفعة إعادة كلماتها التي لم تُحلل؛ حينها يظهر "words" فقط. |
| words | integer | الكلمات التي احتسبها هذا الاستدعاء. |
| source | string | مصدرها: كلمات API في الخطة، أو الرصيد الإضافي، أو كلاهما. إحدى القيم: plan, balance, plan_and_balance. |
| fromPlan | integer | الكلمات المخصومة من كلمات API في الخطة. يظهر عندما تكون قيمة recorded هي true. |
| fromBalance | integer | الكلمات المخصومة من الرصيد الإضافي. يظهر عندما تكون قيمة recorded هي true. |
| allowanceLeft | integer | null | كلمات الخطة المتبقية لهذه الأداة بعد هذا الاستدعاء، خلال فترة الفوترة الحالية. تكون القيمة null لأداة ليس لها رصيد مخصص في هذه الخطة. يظهر عندما تكون قيمة recorded هي true. |
| balance | integer | الرصيد الإضافي المتبقي بعد هذا الاستدعاء. يظهر عندما تكون قيمة recorded هي true. |
RewriteResult
| الحقل | النوع | الوصف |
|---|---|---|
| text | string | النص بعد إعادة الصياغة. |
| before | Detection | قراءة الكاشف لنصك، أو null عند عدم وجود قراءة. |
| after | Detection | قراءة الكاشف للنص المعاد صياغته، أو null. |
| passes | integer | عدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة. |
| facts | object | ما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة. |
| late | boolean | تكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق. |
GrammarIssue
| الحقل | النوع | الوصف |
|---|---|---|
| offset | integer | موضع بداية المشكلة في النص المرسل، بوحدات ترميز UTF-16 (فهرس سلسلة نصية في JavaScript). |
| length | integer | عدد وحدات ترميز UTF-16 التي تغطيها المشكلة في النص المرسل. |
| message | string | توضيح الخطأ. |
| shortMessage | string | التوضيح نفسه، بكلمات قليلة. |
| category | string | نوع المشكلة. إحدى القيم: grammar, spelling, punctuation, style, typography. |
| replacements | مصفوفة من string | البدائل المقترحة، بدءًا بالأفضل. |
| context | string | النص المحيط بالمشكلة. |
BatchResult
| الحقل | النوع | الوصف |
|---|---|---|
| id | string | معرّف العنصر. |
| detection | Detection | القراءة، عندما يُرجع العنصر قراءة. |
| error | object | سبب عدم إرجاع قراءة للعنصر. |
Error
| الحقل | النوع | الوصف |
|---|---|---|
| error | object | |
| usage | Usage | ما احتسبه هذا الاستدعاء. |
خادم MCP
يمكن للوكيل استدعاء الأدوات نفسها عبر بروتوكول سياق النموذج. الخادم مجرد عميل لواجهة API هذه، لذا يحصل الوكيل على القراءة نفسها التي يقدمها الموقع.
- detect_textيحلل نصًا واحدًا.
- detect_batchيحلل عدة نصوص.
- humanize_textيضفي طابعًا بشريًا على النص مع التحقق من حقائقه.
- paraphrase_textيعيد صياغة نص.
- summarize_textيلخص نصًا.
- check_grammarيدقق القواعد والإملاء.
Claude Code يتصل عبر الإنترنت
احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:
شغّل هذا في الطرفية:
أو ضع ما يلي في .mcp.json بدلًا من ذلك:
.mcp.json{ "mcpServers": { "blurwrite": { "type": "http", "url": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${BLURWRITE_API_KEY}" } } } }تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Claude Desktop يشغّل ملف الخادم
نزّل ملف الخادم ودوّن المكان الذي حفظته فيه. يحتاج الملف إلى Node.js.
نزّل ملف الخادمفي التطبيق: Settings > Developer > Edit Config.
أضف ما يلي إلى claude_desktop_config.json:
claude_desktop_config.json{ "mcpServers": { "blurwrite": { "command": "node", "args": [ "/path/to/server.mjs" ], "env": { "BLURWRITE_API_KEY": "YOUR_API_KEY" } } } }أغلق Claude Desktop تمامًا ثم أعد تشغيله ليحمّل الخادم.
تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Claude (claude.ai) قريبًا
ربط claude.ai عبر تسجيل الدخول إلى حسابك في Blurwrite قادم قريبًا. وحتى ذلك الحين، تعمل الأدوات نفسها اليوم في Claude Desktop مع ملف الخادم، أو في Claude Code، وتجد الإعداد في تبويبيهما.
فقط إذا كان لدى مؤسستك خيار ترويسات الطلب للموصلات المخصصة: أضف العنوان مع هذه الترويسة.
ChatGPT قريبًا
ربط ChatGPT عبر تسجيل الدخول إلى حسابك في Blurwrite قادم قريبًا. وحتى ذلك الحين، تعمل الأدوات نفسها اليوم في Codex وClaude Code، وتجد الإعداد في تبويبيهما.
Codex يتصل عبر الإنترنت
احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:
شغّل هذا في الطرفية:
أو ضع ما يلي في ~/.codex/config.toml بدلًا من ذلك:
~/.codex/config.toml[mcp_servers.blurwrite] url = "https://blurwrite.com/api/mcp" bearer_token_env_var = "BLURWRITE_API_KEY"في التطبيق: MCP servers > Add server > Streamable HTTP.
تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Cursor يتصل عبر الإنترنت
احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:
أضف ما يلي إلى ~/.cursor/mcp.json:
~/.cursor/mcp.json{ "mcpServers": { "blurwrite": { "url": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${env:BLURWRITE_API_KEY}" } } } }تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
VS Code (Copilot) يتصل عبر الإنترنت
أضف ما يلي إلى .vscode/mcp.json:
.vscode/mcp.json{ "inputs": [ { "type": "promptString", "id": "blurwrite-key", "description": "Blurwrite API key", "password": true } ], "servers": { "blurwrite": { "type": "http", "url": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${input:blurwrite-key}" } } } }عند بدء الخادم، يطلب VS Code مفتاحك مرة واحدة ويحتفظ به.
تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Windsurf يتصل عبر الإنترنت
احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:
في التطبيق: Cascade > ... > Open MCP config file.
أضف ما يلي إلى mcp_config.json:
mcp_config.json{ "mcpServers": { "blurwrite": { "serverUrl": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer ${env:BLURWRITE_API_KEY}" } } } }أغلق Windsurf تمامًا ثم أعد تشغيله ليحمّل الخادم.
تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Gemini CLI يتصل عبر الإنترنت
احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:
شغّل هذا في الطرفية:
أو ضع ما يلي في ~/.gemini/settings.json بدلًا من ذلك:
~/.gemini/settings.json{ "mcpServers": { "blurwrite": { "httpUrl": "https://blurwrite.com/api/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } }تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
Other clients عبر الإنترنت أو جسر أو الملف
العميل الذي يتصل بخوادم MCP البعيدة عبر HTTP لا يحتاج إلا إلى هاتين القيمتين:
العميل الذي لا يشغّل إلا خوادم محلية يمكنه الوصول إلى العنوان عبر جسر mcp-remote مفتوح المصدر (يحتاج إلى Node.js):
أو شغّل ملف الخادم الخاص بنا بنفسك:
نزّل ملف الخادم
تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.
تتضمن كل قراءة يحصل عليها الوكيل القيمة الرقمية ومستوى عدم اليقين المحيط بها وحالة المعايرة، ليتمكن الوكيل من توضيح معنى القراءة ومتى يجب عدم استخدامها.
مفتاحك
سجّل الدخول، ثم أنشئ مفتاحًا من لوحة التحكم.
احصل على مفتاحك من لوحة التحكم
لا تُنشأ المفاتيح على هذه الصفحة مطلقًا.
ما تقدمه واجهة API وخادم MCP