انتقل إلى المحتوى
وثائق المطورين

واجهة API بالإصدار v1 وخادم MCP

كل ما تحتاج إليه لاستدعاء واجهة API: كيفية المصادقة، وكل نقطة نهاية مع طلبها واستجابتها، والأخطاء والحدود، وأمثلة باستخدام curl وJavaScript وPython.

في هذه الصفحة

البدء

نظرة عامة

رقم إصدار الواجهة جزء من المسار: /api/v1. تستقبل كل نقطة نهاية طلب POST بجسم JSON وتجيب بصيغة JSON، بما في ذلك الأخطاء.

عنوان URL الأساسي https://blurwrite.com

على الموقع فقط، وليست في الواجهة: عدّاد الكلمات، وعدّاد الأحرف، وفاحص الانتحال، وخيار «وقت أطول لإعادة الكتابة» في أداة إعادة الصياغة البشرية.

مُولّد من مستند 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":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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

جسم الطلب

الحقلالنوعمطلوبالوصف
textstringنعمالنص المراد تحليله أو إعادة صياغته.
languagestringلارمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص.
contentTypestringلانوع النص، مثل "essay" أو "email"، عندما ينبغي استخدام منحنى ذلك النوع في القراءة.

الاستجابة

الحقلالنوعالوصف
figurenumberالقراءة من 0 إلى 100: مدى احتمال أن يكون النص مكتوبًا آليًا.
lownumberالحد الأدنى للنطاق المحيط بالدرجة.
highnumberالحد الأعلى للنطاق المحيط بالدرجة.
uncertaintynumberنصف عرض النطاق، بالنقاط.
verdictstringالفئة التي تقع فيها الدرجة؛ وهي فئة وليست حكمًا على هوية كاتب النص. إحدى القيم: human, uncertain, ai.
confidencestringمدى إمكانية الاعتماد على القراءة. إحدى القيم: low, medium, high.
sentencesمصفوفة من SentenceScoreقراءة لكل جملة.
wordsintegerالكلمات التي جرى تحليلها.
languagestringاللغة التي استُخدمت لتحليل النص.
modelstringالنموذج الذي أنتج القراءة.
calibratedbooleanما إذا كان للغة منحنى ملائم. عندما تكون القيمة false، يجب عدم استخدام الدرجة بوصفها نتيجة.
bandHumanFlagRatenumber | nullمعدل تصنيف النصوص البشرية في هذه الفئة على أنها آلية في قياساتنا، أو null.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400no_textلا يحتوي جسم الطلب على "text".
422too_shortالنص أقصر من الحد الأدنى.
413text_too_longالنص أطول مما يستطيع المحرك تحليله في استدعاء واحد. قسّمه. لم تُحتسب أي كلمات.
422not_calibratedلا يمكن تحليل هذه اللغة بعد.
503engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
502engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
503engine_startingالمحرك قيد التشغيل ولم يصبح جاهزًا في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا بعد دقيقة.
503engine_busyكان المحرك مشغولًا وتعذر بدء التحليل في الوقت المحدد؛ تُعطى الأولوية لمستخدمي الكاشف بخطة Pro على الموقع قبل استدعاءات API. لم تُحتسب أي كلمات. حاول مجددًا بعد قليل.
504engine_timeoutلم يُنهِ المحرك تحليل النص في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا أو أرسل نصًا أقصر.
429concurrency_limitedبلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After.
مثال على الطلب
curl -X POST https://blurwrite.com/api/v1/detect \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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[].idstringلامعرّف تختاره للعنصر، ويُعاد مع نتيجته. عند حذفه، يُستخدم موضع العنصر.
items[].textstringنعمالنص المراد تحليله أو إعادة صياغته.
items[].languagestringلارمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص.
items[].contentTypestringلانوع النص، مثل "essay" أو "email"، عندما ينبغي استخدام منحنى ذلك النوع في القراءة.

الاستجابة

الحقلالنوعالوصف
resultsمصفوفة من BatchResultنتيجة واحدة لكل عنصر، بترتيب الإرسال.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400batch_emptyلا يحتوي جسم الطلب على "items"، أو أن القائمة فارغة.
413batch_too_largeعدد عناصر الدفعة يتجاوز الحد المسموح.
429concurrency_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":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}]}'
مثال على الاستجابة
{
  "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

جسم الطلب

الحقلالنوعمطلوبالوصف
textstringنعمالنص المراد تحليله أو إعادة صياغته.
modestringلاوضع إعادة الصياغة. إحدى القيم: natural, formal, simple, academic, creative, shorten, expand, custom. القيمة الافتراضية: natural.
style_samplestringلامع الوضع "custom": عينة من كتابتك، من 150 إلى 2,000 كلمة، تُحلل على الخادم. عند حذفها، تُستخدم العينة المحفوظة في حسابك.
tabstringلاعلامة تبويب أداة إضفاء الطابع البشري: المستوى اللغوي المستخدم في إعادة الصياغة. يحافظ الخيار القياسي على المستوى اللغوي للنص الأصلي. إحدى القيم: standard, academic, professional, casual. القيمة الافتراضية: standard.
strengthstringلايحافظ المستوى العادي على المحتوى والمستوى اللغوي. قد يعيد المستوى المكثف ترتيب النص ويحذف التفاصيل الإضافية، مع الحفاظ على جميع النقاط الرئيسية، وقد تبدو بعض الأجزاء غير مألوفة. إحدى القيم: regular, aggressive. القيمة الافتراضية: regular.
ownTouchstringلاتفصيل أو مثال أو رأي بكلماتك الخاصة، بحد أقصى 400 حرفًا، يُدمج في النص المعاد صياغته.
languagestringلارمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص.

الاستجابة

الحقلالنوعالوصف
textstringالنص بعد إعادة الصياغة.
beforeDetectionقراءة الكاشف لنصك، أو null عند عدم وجود قراءة.
afterDetectionقراءة الكاشف للنص المعاد صياغته، أو null.
passesintegerعدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة.
factsobjectما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة.
latebooleanتكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400no_textلا يحتوي جسم الطلب على "text".
422too_shortالنص أقصر من الحد الأدنى.
400unknown_modeهذا الوضع غير متاح في هذا المسار.
400unknown_optionعلامة التبويب أو مستوى التعديل غير متاح في هذا المسار.
402plan_requiredيتطلب الوضع أو التبويب أو قوة التغيير أو اللمسة الخاصة خطة لا يملكها الحساب؛ ويتطلب الوضع "custom" خطة Pro. لم تُحتسب أي كلمات.
400no_sampleيتطلب الوضع "custom" عينة كتابة مُرسلة أو محفوظة في الحساب.
400sample_too_shortعينة الكتابة أقصر من الحد الأدنى.
400sample_too_longعينة الكتابة أطول من الحد الأقصى.
429concurrency_limitedبلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After.
422no_rewriteاستجاب المحرك، لكن لم تجتز أي مسودة الفحوصات (فارغة، أو رفض، أو نسخة من النص). لم تُحتسب أي كلمات.
503timeoutاستغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات.
503engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
502engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
مثال على الطلب
curl -X POST https://blurwrite.com/api/v1/humanize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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

جسم الطلب

الحقلالنوعمطلوبالوصف
textstringنعمالنص المراد تحليله أو إعادة صياغته.
modestringلاوضع إعادة الصياغة. إحدى القيم: standard, fluency, formal, academic, simple, creative, expand, shorten. القيمة الافتراضية: standard.
strengthstringلامدى التغيير المسموح به مقارنة بالنص الأصلي. إحدى القيم: readable, balanced, strong. القيمة الافتراضية: balanced.
readabilitystringلاالمستوى اللغوي للكتابة. إحدى القيم: casual, professional, academic, creative. القيمة الافتراضية: professional.
purposestringلاالغرض من النص. إحدى القيم: general, essay, article, email, marketing, report, story. القيمة الافتراضية: general.
synonymsstringلامدى حرية استبدال الكلمات. إحدى القيم: few, some, many. القيمة الافتراضية: some.
freezeWordsمصفوفة من stringلاكلمات وعبارات يجب إعادتها كما كُتبت تمامًا: بحد أقصى 25، وحتى 60 حرفًا لكل منها. تُحتسب كلماتها ضمن كلمات الاستدعاء.
customInstructionstringلاتعليمات قصيرة تكتبها لإعادة الصياغة، حتى 500 حرفًا. تُحتسب كلماتها ضمن كلمات الاستدعاء.
languagestringلارمز اللغة، مثل "en" أو "de". عند حذفه، تُكتشف اللغة من النص.
closedLoopbooleanلااضبط القيمة على false لتجاوز الحلقة المغلقة. القيمة الافتراضية: true.

الاستجابة

الحقلالنوعالوصف
textstringالنص بعد إعادة الصياغة.
beforeDetectionقراءة الكاشف لنصك، أو null عند عدم وجود قراءة.
afterDetectionقراءة الكاشف للنص المعاد صياغته، أو null.
passesintegerعدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة.
factsobjectما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة.
latebooleanتكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400no_textلا يحتوي جسم الطلب على "text".
422too_shortالنص أقصر من الحد الأدنى.
400unknown_modeهذا الوضع غير متاح في هذا المسار.
400option_invalidليست freezeWords قائمة كلمات أو عبارات. لم يُحتسب أي استخدام.
400option_too_longتتجاوز freezeWords أو customInstruction الحد المسموح. لم يُحتسب أي استخدام.
429concurrency_limitedبلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After.
422no_rewriteاستجاب المحرك، لكن لم تجتز أي مسودة الفحوصات (فارغة، أو رفض، أو نسخة من النص). لم تُحتسب أي كلمات.
503timeoutاستغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات.
503engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
502engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
مثال على الطلب
curl -X POST https://blurwrite.com/api/v1/paraphrase \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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

جسم الطلب

الحقلالنوعمطلوبالوصف
textstringنعمالنص المراد تحليله أو إعادة صياغته.
modestringلاشكل الملخص. إحدى القيم: key-sentences, paragraph, bullets. القيمة الافتراضية: key-sentences.
lengthstringلاطول الملخص. إحدى القيم: short, medium, long. القيمة الافتراضية: medium.

الاستجابة

الحقلالنوعالوصف
textstringالملخص.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400no_textلا يحتوي جسم الطلب على "text".
422too_shortالنص أقصر من الحد الأدنى.
429concurrency_limitedبلغ هذا المفتاح الحد المسموح من الاستدعاءات المتزامنة من هذا النوع. انتظر انتهاء أحدها، أو انتظر المدة المحددة في Retry-After.
503timeoutاستغرقت إعادة الصياغة وقتًا أطول من المسموح وأُوقفت. لم تُحتسب أي كلمات.
503engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
502engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
مثال على الطلب
curl -X POST https://blurwrite.com/api/v1/summarize \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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

جسم الطلب

الحقلالنوعمطلوبالوصف
textstringنعمالنص المراد تحليله أو إعادة صياغته.
languagestringلارمز لغة التدقيق، مثل "en-US" أو "de-DE". القيمة الافتراضية: en-US.

الاستجابة

الحقلالنوعالوصف
issuesمصفوفة من GrammarIssueالمشكلات المكتشفة، بترتيب ظهورها.
usageUsageما احتسبه هذا الاستدعاء.

الأخطاء الإضافية لهذا المسار

الحالةالرمزالمعنى
400no_textلا يحتوي جسم الطلب على "text".
503engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
502engine_unavailableلم يستجب المحرك. لم تُحتسب أي كلمات.
503engine_startingالمحرك قيد التشغيل ولم يصبح جاهزًا في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا بعد دقيقة.
504engine_timeoutلم يُنهِ المحرك تحليل النص في الوقت المحدد. لم تُحتسب أي كلمات. حاول مجددًا أو أرسل نصًا أقصر.
مثال على الطلب
curl -X POST https://blurwrite.com/api/v1/grammar \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"اجتمعت اللجنة يوم الثلاثاء لمراجعة خطة المكتبة الجديدة. واتفق الأعضاء على إبقاء قاعة القراءة مفتوحة لوقت أطول خلال أيام الأسبوع، وطلبوا من الموظفين إعداد ميزانية للساعات الإضافية. وسيناقش الاجتماع المقبل التكاليف والعدد المتوقع للزوار وتأثير ذلك على بقية المبنى."}'
مثال على الاستجابة
{
  "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 الخاص به وبجسم بهذا الشكل. اعتمد على الرمز؛ فالرسالة تشرح ما الذي حدث وما الخطوة التالية.

الأخطاء التي قد يعيدها أي مسار

الحالةالرمزالمعنى
401key_in_urlأُرسل المفتاح في عنوان URL. أرسله في ترويسة Authorization.
401no_keyلم يُرسل مفتاح.
401bad_keyالمفتاح غير صالح أو أُلغي.
403out_of_scopeلا يحمل المفتاح نطاق الصلاحية الذي يتطلبه هذا المسار.
429rate_limitedعدد الطلبات لهذا المفتاح أكبر من المسموح. انتظر المدة المحددة في Retry-After.
403plan_lapsedلم تعد خطة الحساب تشمل واجهة API.
413too_largeحجم الطلب أكبر من المسموح.
400bad_bodyجسم الطلب ليس كائن JSON.
413too_many_wordsيتجاوز عدد كلمات الطلب الحد المسموح للطلب الواحد. قسّمه. لم يُحتسب أي استخدام.
402quota_exhaustedنُفدت كلمات API في الخطة لفترة الفوترة هذه والرصيد الإضافي فارغ. لم تُحتسب أي كلمات.
402quota_shortيتطلب الاستدعاء كلمات أكثر من مجموع كلمات API المتبقية في الخطة والرصيد. لم تُحتسب أي كلمات.
402monthly_ceilingبلغ الحساب حد API لفترة الفوترة هذه، وهو حد يسري مهما كان الرصيد. لم تُحتسب أي كلمات.
503store_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

الحقلالنوعالوصف
figurenumberالقراءة من 0 إلى 100: مدى احتمال أن يكون النص مكتوبًا آليًا.
lownumberالحد الأدنى للنطاق المحيط بالدرجة.
highnumberالحد الأعلى للنطاق المحيط بالدرجة.
uncertaintynumberنصف عرض النطاق، بالنقاط.
verdictstringالفئة التي تقع فيها الدرجة؛ وهي فئة وليست حكمًا على هوية كاتب النص. إحدى القيم: human, uncertain, ai.
confidencestringمدى إمكانية الاعتماد على القراءة. إحدى القيم: low, medium, high.
sentencesمصفوفة من SentenceScoreقراءة لكل جملة.
wordsintegerالكلمات التي جرى تحليلها.
languagestringاللغة التي استُخدمت لتحليل النص.
modelstringالنموذج الذي أنتج القراءة.
calibratedbooleanما إذا كان للغة منحنى ملائم. عندما تكون القيمة false، يجب عدم استخدام الدرجة بوصفها نتيجة.
bandHumanFlagRatenumber | nullمعدل تصنيف النصوص البشرية في هذه الفئة على أنها آلية في قياساتنا، أو null.

SentenceScore

الحقلالنوعالوصف
textstringالجملة.
scorenumberمن 0 إلى 1، مدى احتمال أن تكون الجملة مكتوبة آليًا.
verdictstringالفئة التي تقع فيها الجملة. إحدى القيم: human, uncertain, ai.

Usage

الحقلالنوعالوصف
recordedbooleanتكون القيمة true عند تسجيل العدد. ولا تكون false إلا عندما يتعذر على دفعة إعادة كلماتها التي لم تُحلل؛ حينها يظهر "words" فقط.
wordsintegerالكلمات التي احتسبها هذا الاستدعاء.
sourcestringمصدرها: كلمات API في الخطة، أو الرصيد الإضافي، أو كلاهما. إحدى القيم: plan, balance, plan_and_balance.
fromPlanintegerالكلمات المخصومة من كلمات API في الخطة. يظهر عندما تكون قيمة recorded هي true.
fromBalanceintegerالكلمات المخصومة من الرصيد الإضافي. يظهر عندما تكون قيمة recorded هي true.
allowanceLeftinteger | nullكلمات الخطة المتبقية لهذه الأداة بعد هذا الاستدعاء، خلال فترة الفوترة الحالية. تكون القيمة null لأداة ليس لها رصيد مخصص في هذه الخطة. يظهر عندما تكون قيمة recorded هي true.
balanceintegerالرصيد الإضافي المتبقي بعد هذا الاستدعاء. يظهر عندما تكون قيمة recorded هي true.

RewriteResult

الحقلالنوعالوصف
textstringالنص بعد إعادة الصياغة.
beforeDetectionقراءة الكاشف لنصك، أو null عند عدم وجود قراءة.
afterDetectionقراءة الكاشف للنص المعاد صياغته، أو null.
passesintegerعدد الصياغات التي أُنتجت قبل اختيار هذه الصياغة.
factsobjectما كشفه التحقق من الحقائق، وسبب عدم سلامة إعادة الصياغة إن لم تكن سليمة.
latebooleanتكون القيمة true عندما تُعاد الصياغة عند بلوغ الحد الزمني دون اكتمال التحقق.

GrammarIssue

الحقلالنوعالوصف
offsetintegerموضع بداية المشكلة في النص المرسل، بوحدات ترميز UTF-16 (فهرس سلسلة نصية في JavaScript).
lengthintegerعدد وحدات ترميز UTF-16 التي تغطيها المشكلة في النص المرسل.
messagestringتوضيح الخطأ.
shortMessagestringالتوضيح نفسه، بكلمات قليلة.
categorystringنوع المشكلة. إحدى القيم: grammar, spelling, punctuation, style, typography.
replacementsمصفوفة من stringالبدائل المقترحة، بدءًا بالأفضل.
contextstringالنص المحيط بالمشكلة.

BatchResult

الحقلالنوعالوصف
idstringمعرّف العنصر.
detectionDetectionالقراءة، عندما يُرجع العنصر قراءة.
errorobjectسبب عدم إرجاع قراءة للعنصر.

Error

الحقلالنوعالوصف
errorobject
usageUsageما احتسبه هذا الاستدعاء.
خادم MCP

خادم MCP

يمكن للوكيل استدعاء الأدوات نفسها عبر بروتوكول سياق النموذج. الخادم مجرد عميل لواجهة API هذه، لذا يحصل الوكيل على القراءة نفسها التي يقدمها الموقع.

  • detect_textيحلل نصًا واحدًا.
  • detect_batchيحلل عدة نصوص.
  • humanize_textيضفي طابعًا بشريًا على النص مع التحقق من حقائقه.
  • paraphrase_textيعيد صياغة نص.
  • summarize_textيلخص نصًا.
  • check_grammarيدقق القواعد والإملاء.

Claude Code يتصل عبر الإنترنت

  1. احفظ مفتاح API في متغير بيئة باسم BLURWRITE_API_KEY، حيث يعمل العميل:

    export BLURWRITE_API_KEY="YOUR_API_KEY"
  2. شغّل هذا في الطرفية:

    claude mcp add --transport http blurwrite https://blurwrite.com/api/mcp --header "Authorization: Bearer $BLURWRITE_API_KEY"
  3. أو ضع ما يلي في .mcp.json بدلًا من ذلك:

    .mcp.json
    {
      "mcpServers": {
        "blurwrite": {
          "type": "http",
          "url": "https://blurwrite.com/api/mcp",
          "headers": {
            "Authorization": "Bearer ${BLURWRITE_API_KEY}"
          }
        }
      }
    }
  4. تحقق من أنه يعمل: اطلب من مساعدك «افحص هذه الفقرة باستخدام Blurwrite وأخبرني بالنطاق ودرجة الثقة.»

تجد مفتاح API في لوحة التحكم ضمن قسم API. لا تضع المفتاح أبدًا في ملف مشترك أو في مستودع.

تتضمن كل قراءة يحصل عليها الوكيل القيمة الرقمية ومستوى عدم اليقين المحيط بها وحالة المعايرة، ليتمكن الوكيل من توضيح معنى القراءة ومتى يجب عدم استخدامها.

مفتاحك

سجّل الدخول، ثم أنشئ مفتاحًا من لوحة التحكم.

احصل على مفتاحك من لوحة التحكم

لا تُنشأ المفاتيح على هذه الصفحة مطلقًا.

ما تقدمه واجهة API وخادم MCP