واجهة REST + خادم MCP

API تقرير SEO لـ
المطورين ووكلاء AI

أنشئ تقارير عبر REST، استعلم عنها حتى الاكتمال، واقرأ التقرير المحفوظ نفسه الذي يراه فريقك على الموقع. نفس مفتاح API من خطتك المدفوعة يربط أي وكيل يدعم MCP.

نموذج الوصول

خطة مدفوعة + مفتاح API

الوصول إلى API مرتبط بالحساب ومفتاحي. اختر خطة، أنشئ مفتاح API في حسابك، وكل موقع جديد تشغله عبر API يستخدم أرصدة خطتك، تماماً كما لو كان على الموقع. يُعاد ضبط الأرصدة في اليوم الأول من كل شهر (UTC) ولا تُنقل أبداً.

كائن تقرير واحد

جلسات الموقع، مكالمات API، وجلسات الوكيل تُقرأ من نفس حالة التقرير المحفوظ.

تدفق مباشر

أنشئ تقريرًا، استعلم عن الحالة، ثم اقرأ النتائج الكاملة من نفس الكائن.

نقاط النهاية المتاحة

POST/api/v1/reports/preview

أنشئ معاينة درجة لدمج الشركاء على خطة مدفوعة.

POST/api/v1/reports

أنشئ تقريراً جديداً أو أعد استخدام تقرير موجود بالفعل. أضف "forceRerun": true لإعادة فحص الموقع بدلاً من ذلك.

GET/api/v1/reports/:id

احصل على أحدث حالة تقارير وأقسامها.

GET/api/v1/reports/:id/result

اقرأ نتائج التقرير الكامل.

GET/api/v1/reports/:id/download?format=json

تصدير حمولة التقرير كـ JSON للدمج البرمجي.

مقدمة سريعة: تقرير SEO من curl

تغطي ثلاث طلبات كامل التدفق، باستخدام مفتاح API من خطتك المدفوعة. الأول ينشئ التقرير، الثاني يستعلم عنه حتى لا يبقى في قائمة الانتظار أو يعمل، والثالث يصدّره. يستخدم موقع جديد رصيدًا واحدًا؛ تشغيل موقع لديك تقرير بالفعل مرة أخرى لا يستخدم رصيدًا.

إنشاء، استطلاع وتصدير تقريرBash
export SEOREPORT_API_KEY="sr__live_your_api_key"
# Send the key as a header file so it never sits in curl's argv, where ps shows
# it to every local user. printf is a shell builtin, so it spawns no process.
auth() { printf 'Authorization: Bearer %s\n' "$SEOREPORT_API_KEY"; }

# 1. Create a report and keep its job ID
JOB_ID=$(curl -s -X POST https://seoreport.dev/api/v1/reports \
  -H @<(auth) \
  -H "Content-Type: application/json" \
  -d '{"url": "example.com"}' | jq -r '.report.jobId')

# 2. Poll until the report is no longer queued or running
while :; do
  STATUS=$(curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID" \
    -H @<(auth) | jq -r '.report.status')
  case "$STATUS" in queued|running) sleep 3 ;; *) break ;; esac
done
echo "status: $STATUS"

# 3. Export the finished report (format=pdf, md and txt also work)
curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID/download?format=json" \
  -H @<(auth) -o report.json

ما الذي تُرجعه واجهة برمجة تقارير SEO

يُصدَّر كل تقرير مكتمل كمستند JSON واحد: الدرجة الإجمالية وفئتها، ودرجة لكل مجال، وعدد الصفحات التي جرى تحليلها، والمشكلات المفتوحة حسب الخطورة، وكل نتيجة مرتبة حسب أولوية الإصلاح مع سبب أهميتها وطريقة إصلاحها وطريقة التحقق من الإصلاح، والأدلة والصفحات التي تستند إليها. وتُولَّد ملفات Markdown والنص وPDF من التشخيص نفسه.

GET /api/v1/reports/:id/download?format=json (مقتطف)JSON
{
  "exportVersion": 1,
  "jobId": "3f6c2a1e-8d4b-4c7a-9e21-5b0d7f4a6c18",
  "targetUrl": "https://example.com",
  "status": "completed",
  "isSnapshotReady": true,
  "auditedAt": "2026-10-14T09:12:41.000Z",
  "locale": "en",
  "score": { "overall": 72, "band": "stable" },
  "areas": [
    { "id": "access_crawl", "name": "Crawl & Index", "score": 61 },
    { "id": "metadata_onpage", "name": "On-Page SEO", "score": 78 },
    { "id": "security", "name": "Security", "score": 84 }
  ],
  "pagesAnalyzed": 24,
  "openIssues": { "critical": 0, "high": 2, "medium": 5, "low": 3, "total": 10 },
  "findings": [
    {
      "rank": 1,
      "title": "Render parity mismatch",
      "status": "fail",
      "severity": "high",
      "area": { "id": "access_crawl", "name": "Crawl & Index" },
      "whyItMatters": "Raw HTML and rendered DOM should tell the same SEO story so crawlers and AI systems do not see conflicting versions of the page.",
      "fix": "Ensure raw HTML and rendered DOM contain the same critical SEO elements (title, H1, canonical, meta description, structured data). If content is injected by JavaScript, move it to server-side rendering so crawlers see it immediately.",
      "verification": [
        "Recheck these recorded examples: https://example.com/pricing. Method: compare the raw HTML with the rendered DOM. Previously observed: H1 present only after rendering",
        "Expected after the change: the same critical elements in both. Obtain a fresh capture and compare the same check and URLs; a changed sample alone does not verify a fix."
      ],
      "evidence": ["Raw HTML and rendered DOM were compared for critical elements."],
      "pages": ["https://example.com/pricing"]
    }
  ]
}

الأخطاء والحدود

كل رفض أدناه يذكر رمزه. عند التعامل مع هذه الرموز لا يعيد البرنامج النصي المحاولة عشوائيًا.

402PAYMENT_REQUIREDلا توجد خطة مدفوعة وراء الطلب: المفتاح مفقود أو غير صالح أو أُلغي، أو لا توجد خطة نشطة في الحساب. عند غياب المفتاح تكون الاستجابة 402 وليس 401.
402REPORT_CREDITS_EXHAUSTEDنفدت أرصدة المواقع الجديدة لهذا الشهر. لا تزال إعادة تشغيل موقع لديك تقرير عنه ممكنة، وتتجدد الأرصدة في اليوم الأول من كل شهر (UTC).
429FRESH_RUN_LIMITأكثر من 30 تشغيلًا جديدًا (forceRerun) خلال ساعة واحدة للحساب نفسه. انتظر المدة المذكورة في ترويسة Retry-After.
200status: failed | dead_letteredتعذّر إكمال التقرير. يعيد GET /api/v1/reports/:id الحقول error.code وerror.message وerror.retryable عندما يكون السبب مسجّلًا؛ أعد المحاولة فقط إذا كانت retryable تساوي true.
200pollAfterMsالمدة التي تنتظرها قبل الاستعلام عن الحالة مرة أخرى؛ وتكون 0 عند اكتمال التقرير.

API لمراقبة SEO

يتم إعادة تدقيق النطاق المسجل للمراقبة كل أسبوع. عندما يتغير شيء ما، يتلقى عنوان التنبيه بريدًا إلكترونيًا: اكتشاف حرج أو عالي الخطورة جديد، اكتشاف حرج تم حله، أو انتقال إلى نطاق درجة مختلف. لا يرسل أي شيء إذا لم يحدث تغيير خلال أسبوع.

PUT/api/v1/monitors

يبدأ المراقبة الأسبوعية لنطاق؛ "enabled": false يوقفها.

GET/api/v1/monitors

يعرض النطاقات التي يراقبها هذا الحساب.

DELETE/api/v1/monitors?url=

يوقف مراقبة نطاق ويحذف نتائجه المخزنة.

مراقبة نطاقBash
# Uses the auth() helper from the quickstart above.
# Re-audit a domain every week and email [email protected] when it changes
curl -X PUT https://seoreport.dev/api/v1/monitors \
  -H @<(auth) \
  -H "Content-Type: application/json" \
  -d '{"url": "example.com", "alertEmail": "[email protected]"}'

# List monitored domains
curl https://seoreport.dev/api/v1/monitors \
  -H @<(auth)

# Stop monitoring (pass the host the list returns)
curl -X DELETE "https://seoreport.dev/api/v1/monitors?url=example.com" \
  -H @<(auth)

يتضمن المراقبة مع الخطط المدفوعة ولا ينفق أرصدة التقرير.

العميل الرسمي TypeScript

عميل مكتوب للـ REST API. احصل على المصادقة باستخدام مفتاح API الخاص بخطتك، ثم أنشئ واستعلم وأصدر تقارير من TypeScript.

سطر الأوامر

شغِّل تقارير من طرفك باستخدام مفتاح API. تثبيت عالمي واحد.

Bash
npm install -g @seoreport/client

خادم MCP — نفس الواجهة، نفس المفتاح

وجّه أي عميل يدعم MCP إلى https://seoreport.dev/mcp وصادِق باستخدام نفس مفتاح API من نوع Bearer الذي تستخدمه مع REST. تُعرض أدوات التقارير والحساب عند الاتصال، فيستطيع الوكيل تشغيل التدقيق وقراءة النتائج دون أي شيفرة وسيطة.

إعداد عميل MCPJSON
{
  "mcpServers": {
    "seoreport": {
      "url": "https://seoreport.dev/mcp",
      "headers": {
        "Authorization": "Bearer sr__live_your_api_key"
      }
    }
  }
}
seoreport_create_report

ابدأ تقريراً لرابط معيّن واحصل على معرّف المهمة.

seoreport_get_report_status

استعلم عن المهمة حتى يصبح التقرير جاهزاً.

seoreport_get_report

اقرأ التقرير المكتمل بدرجته ونتائجه.

seoreport_list_reports

اعرض قائمة تقارير الحساب.

seoreport_get_report_download

احصل على رابط تنزيل بصيغة JSON أو Markdown أو نص أو PDF.

seoreport_get_account

تحقق من خطة الحساب والرصيد المتبقي وتاريخ التجديد.

يعيد الدفع رابطاً يُفتح في المتصفح بدلاً من الخصم المباشر: يمكن للوكيل بدؤه، ولا يدفع إلا شخص. أما إلغاء الخطة وإدارة مفاتيح API وحذف الحساب فتبقى في لوحة التحكم.

جاهز للبناء?

اختر خطة، أنشئ مفتاح API، وابدأ دمج تقارير SEO في منتجك.