المطورون
البيانات خلف اللوحات، لبرمجياتك الخاصة.
كل سجل وسلسلة ورقم محسوب تقرؤه اللوحات يُقدَّم من هذا النطاق بصيغة JSON، وعبر بروتوكول سياق النموذج لمساعدي الذكاء الاصطناعي. لا تحتاج معظم النقاط إلى مفتاح، أما طبقات أطلس الطاقة فمجانية بالعضوية وتحتاج إلى مفتاح عضو. ويضيف المفتاح المجاني حصة يومية خاصة به وعدًّا لما استُخدم منها.
منصة تجربة الواجهة البرمجية
استدعِ أي نقطة وصول مباشرةً، واطّلع على ما تعيده.
اختر عملية من وثيقة OpenAPI، وأدخل معاملاتها، ثم أرسلها إلى الواجهة البرمجية لهذا الموقع. وتظهر الاستجابة في صورة شجرة وجدول، ورسم بياني حيث تسمح السجلات بذلك، مع ترويسات حدود الاستخدام التي عادت بها، والاستدعاء نفسه بأربع لغات برمجية.
مشروع واحد من متتبع الطاقة المتجددة السعودية، كما تعرضه صفحته
المعاملات
الاستجابة
اختر عملية وأرسلها، وستظهر الاستجابة هنا في صورة شجرة وجدول، ورسم بياني حيث تسمح السجلات بذلك.
الشيفرة البرمجية
curl -sS 'https://renewablevision.com.sa/api/data/projects/sudair-pv-1500-mw'
تُرسل الطلبات إلى هذا الموقع وحده. وتُحتسب الطلبات دون مفتاح من الحصة المتاحة لعنوانك خلال عشر دقائق، وتُحتسب مع المفتاح من حصته اليومية، كما تبيّن الترويسات.
نظرة عامة
ما تقدّمه الواجهة.
الصفوف نفسها التي ترسمها اللوحات، مع الجهة الناشرة والوحدة والفترة في كل سلسلة، والمصدر في كل رقم محسوب.
- السجلات الرسمية
- سجل مشاريع الطاقة المتجددة لدى المشتري الرئيس، ومحفظة مشاريع المياه لدى الشركة السعودية للشراكات، وفهرس البيانات المفتوحة لهيئة المياه السعودية، تُحدَّث أسبوعيًا، ويمكن إعادة بناء كل منها لتاريخ سابق من سجل التغيّرات.
- السلاسل المنسوخة
- 33 سلسلة من بوابة بيانات الطاقة لدى كابسارك ومن الجهات الناشرة المذكورة مع كل منها: الأحمال والقدرات والتعرفات والتحلية وتوازن النفط والأسعار وغيرها، وكل نقطة بفترتها ومنطقتها ووحدتها.
- سجل التغيّرات والجدول
- كل تغيّر على مستوى الصف في سجل أو سلسلة مع القيمة قبله وبعده، وما يُتوقَّع تحديثه تاليًا.
- مخرجات النماذج
- ميزان القدرات مقابل مستهدف 2030، ونموذج توازن النفط وفق سيناريوهات مسمّاة، والأسبوع المقبل للأسطول الشمسي. وتنص الاستجابة على الأرقام المنمذجة.
- المنشورات
- الموجز الأسبوعي بعنوان دائم لكل أسبوع، ومكتبة التقارير مع تعريفات كل تقرير ومصادره.
دون مفتاح
مع مفتاح مجاني
المصادقة
المفتاح اختياري لمعظم النقاط، ويُرسَل في إحدى ترويستين.
أنشئ مفتاحًا من صفحة حسابك. يظهر المفتاح مرة واحدة عند إنشائه، فاحفظه حيث تقرأ برمجياتك الأسرار، وألغه من الصفحة نفسها إذا انكشف.
إحدى الترويستين
Authorization: Bearer rv_live_… X-API-Key: rv_live_…
طبقات أطلس الطاقة تحتاج إلى مفتاح عضو
طبقة المشاريع في الأطلس (/api/data/atlas)، وشبكة الموارد (/api/data/resource/grid)، وسلاسل دول الخليج (/api/data/gcc-series)، وملف متتبّع المملكة (/data/saudi-renewables.json)، والإنتاج التقديري لكل مشروع متتبَّع (/api/data/project-output، وسجلات PVGIS في /api/data/integrations/pvgis)، والملفات الكاملة التي تحملها (gcc-renewables وsaudi-captive-solar وresource-grid وgcc-series وproject-output)، وأدوات MCP التي تقرؤها، مجانيةٌ بالعضوية. أرسل مفتاح عضو، أو استدعِها من الموقع وأنت مسجّل الدخول. ودون أيٍّ منهما تكون الإجابة 401 membersOnly، مع السبب بالعربية والإنجليزية ورابط للانضمام.
المفتاح المُرسَل يجب أن يكون صالحًا
يُجاب الطلب الذي يحمل مفتاحًا برمز 401 إذا كان المفتاح مشوّه الصيغة أو غير معروف أو ملغًى، بدل تقديمه دون المفتاح. ويذكر نص الاستجابة السبب. احذف الترويسة للعودة إلى الحد المتاح دون مفتاح، في كل النقاط عدا المتاحة للأعضاء فقط.
احفظ المفاتيح على الخادم. فالمفتاح المكتوب في شيفرة المتصفح يطّلع عليه كل من يفتح الصفحة.
حدود الطلبات
الحصص بحسب الطالب.
تحافظ الحدود على إتاحة الخدمة لكل طالب. تُحدّ الطلبات دون مفتاح لكل عنوان على مدى عشر دقائق، وتُحدّ طلبات المفتاح لكل يوم بالتوقيت العالمي.
| الطالب | النقاط | الحصة | أساس العدّ |
|---|---|---|---|
| دون مفتاح | /api/status, /api/data/*, /api/brief*, /api/reports* | 300 طلب كل 10 دقائق | العنوان، لكل نسخة من الخادم |
| دون مفتاح | /api/search | 240 طلب كل 10 دقائق | العنوان، لكل نسخة من الخادم |
| دون مفتاح | /api/mcp | 300 طلب كل 10 دقائق | العنوان، لكل نسخة من الخادم |
| مفتاح مجاني | كل النقاط المحسوبة | 5,000 طلب لكل يوم بالتوقيت العالمي | المفتاح، عبر كل النسخ |
| مفتاح مرخّص | كل النقاط المحسوبة | يحددها الترخيص | المفتاح، عبر كل النسخ |
كل استجابة محسوبة تبيّن موقعك من الحصة
- X-RateLimit-Limit
- الحصة في الفترة الحالية.
- X-RateLimit-Remaining
- الطلبات المتبقية بعد هذا الطلب.
- X-RateLimit-Reset
- موعد بدء الفترة من جديد بثواني حقبة يونكس. وللمفتاح: منتصف الليل التالي بالتوقيت العالمي.
- Retry-After
- مع الرمز 429 فقط: الثواني اللازمة قبل إعادة المحاولة.
عند تجاوز الحد
تكون الإجابة برمز 429 مع نص JSON يسمّي الحد: نطاقه وفئته والحصة والفترة وموعد بدئها من جديد.
HTTP/1.1 429 Too Many Requests
{
"ok": false,
"error": "tooManyRequests",
"message": "This key has made its 5,000 requests for the day. The count starts again at 00:00 UTC (2026-09-25T00:00:00.000Z).",
"limit": {
"scope": "key",
"tier": "free",
"requests": 5000,
"window": "day",
"windowSeconds": 86400,
"resetAt": "2026-09-25T00:00:00.000Z"
},
"retryAfter": 3600,
"docs": "https://renewablevision.com.sa/en/developers#limits"
}قد تُقدَّم الاستجابات دون مفتاح من ذاكرة الحافة المؤقتة، فلا تُعَدّ ولا تُحدَّث ترويساتها. أما استجابات المفتاح فتُعلَّم خاصةً وتصل دائمًا إلى الخادم الأصلي، فيُعَدّ كل منها.
النقاط
كل نقطة عامة، من وثيقة OpenAPI.
يُعرض هذا المرجع من وثيقة OpenAPI 3.1 نفسها التي تقرؤها أدوات توليد الشيفرة. استخدمها لتوليد عميل برمجي، أو استوردها في أداة واجهات برمجية.
وثيقة OpenAPI 3.1 · https://renewablevision.com.sa/api/openapi.json
المصادر المدمجة · كل مصدر خارجي مع ترخيصه ووتيرة تحديثه وحالته.
البيانات
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
GET /api/statusمحسوبة | حداثة كل سلسلة وسجل منسوخ |
| checkedAt, sources, stale, degraded, series, registers, summary, feeds, endpoints, historySince, method حقول الاستشهاد: series[].publisher, registers[].publisher, checkedAt |
GET /api/data/portal/{series}محسوبة | سلسلة منسوخة واحدة: بياناتها الوصفية وكل نقاطها |
| series, points حقول الاستشهاد: series.publisher, series.source_url, series.licence, series.last_success_at |
GET /api/data/registers/{register}محسوبة | سجل رسمي كما نُسخ آخر مرة، أو كما كان في يوم سابق |
| register, rows, vintage حقول الاستشهاد: register.publisher, register.source_url, register.last_success_at, vintage.asOf |
GET /api/data/projects/{id}محسوبة | مشروع واحد من متتبع الطاقة المتجددة السعودية، كما تعرضه صفحته |
| — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/companies/{company}محسوبة | مطوّر أو مساهم واحد، وكل مشروع مرصود يرد فيه اسمه |
| — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/gcc-projectsمحسوبة | متتبع الطاقة المتجددة في دول الخليج: مشاريع بحجم المرافق في خمس دول خليجية |
| — حقول الاستشهاد: source, asOf, citation, note, projects[].sources |
GET /api/data/gcc-projects/{id}محسوبة | مشروع واحد من متتبع الطاقة المتجددة في دول الخليج، كما تعرضه صفحته |
| — حقول الاستشهاد: source, asOf, citation, note, project.sources |
GET /api/data/changesمحسوبة | سجل التغيّرات: كل تغيّر على مستوى الصف، الأحدث أولًا |
| count, nextBefore, changes حقول الاستشهاد: changes[].sourceId, changes[].occurredOn |
GET /api/data/dueمحسوبة | ما يُتوقَّع تحديثه تاليًا، وما تأخر |
| asOf, windowDays, overdue, items, note حقول الاستشهاد: items[].publisher, asOf |
GET /api/data/power-balanceمحسوبة | القدرة التشغيلية مقابل المشاريع المتعاقد عليها ومستهدف 2030 |
| month, operational, construction, tendered, trackedMw, target, system, reconciliation, stageOverrides, change, comparedWith, vintage, sources, method حقول الاستشهاد: sources[], method, month, vintage.computedAt |
GET /api/data/oil-modelمحسوبة | نموذج توازن النفط على المدخلات الحية |
| asOf, scenario, levers, sources, context, calibration, summary, months, method حقول الاستشهاد: sources[], method, asOf |
GET /api/data/fleet-outlookمحسوبة | الأسبوع المقبل للأسطول الشمسي السعودي المتتبَّع | لا شيء | asOf, stale, days, plants, capacityMw, expectedGwh, normalGwh, deltaPct, daily, heat, sources, method حقول الاستشهاد: sources[], method, asOf |
GET /api/data/resourceمحسوبة | موارد الشمس والرياح لخلية واحدة بدقة 0.5° من شبكة NASA POWER |
| — حقول الاستشهاد: source, asOf, citation, note, licence, acknowledgement, period |
GET /api/data/resource/gridمحسوبة | شبكة موارد NASA POWER كاملةً، وهي أساس أطلس الطاقة (للأعضاء) | لا شيء | — حقول الاستشهاد: source, asOf, citation, note, meta.licence, meta.acknowledgement |
GET /api/data/gcc-seriesمحسوبة | سلاسل بيانات لدول الخليج الست: القدرة والتوليد والطلب والانبعاثات (للأعضاء) |
| — حقول الاستشهاد: source, asOf, citation, note, metrics[].source |
GET /api/data/newsمحسوبة | عناوين إخبارية عن الطاقة في دول الخليج، من خلاصات الناشرين ومن GDELT |
| — حقول الاستشهاد: source, asOf, citation, note, headlines[].url, headlines[].domain |
GET /api/data/atlasمحسوبة | طبقة المشاريع في أطلس الطاقة، مُحدَّدة على مستوى البلدة (للأعضاء) |
| projects, undated, storage, dataCentres, sources حقول الاستشهاد: source, asOf, citation, note, sources, storage[].reports, storage[].sources |
GET /api/data/projectsمحسوبة | كل المشاريع من كل المتتبعات، مع التصفية بأي سمة (للأعضاء) |
| — حقول الاستشهاد: source, asOf, citation, note, projects[].provenance |
GET /api/data/largestمحسوبة | أكبر مشاريع الطاقة الشمسية وطاقة الرياح والمشاريع الهجينة في المملكة في ملف Excel (للأعضاء) |
| — حقول الاستشهاد: Source sheet |
GET /api/tenders/xlsxمحسوبة | مناقصات الطاقة والمياه في ملف Excel (للأعضاء) |
| — حقول الاستشهاد: About sheet |
GET /api/data/integrationsمحسوبة | جميع المصادر الخارجية التي يقرأ منها الموقع، مع ترخيص كل مصدر وحالته | لا شيء | — حقول الاستشهاد: source, asOf, citation |
GET /api/data/integrations/{source}محسوبة | سجلات مصدر واحد من المصادر المدمجة، مع عوامل التصفية وترخيص المصدر الأصلي |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/project-outputمحسوبة | الإنتاج السنوي التقديري لكل مشروع شمسي متتبَّع، منمذجًا بأداة PVGIS (للأعضاء) |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/project-output/{id}محسوبة | الإنتاج السنوي التقديري لمشروع واحد، مع إجماليات المتتبع حسب المرحلة |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/tradeمحسوبة | واردات دول الخليج من معدات الطاقة النظيفة حسب المنتج والسنة والشريك |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/equipment-flowsمحسوبة | تدفقات معدات الطاقة النظيفة إلى دول الخليج بحسب المستورد والمصدّر والمنتج والسنة |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/emissionsمحسوبة | انبعاثات الغازات الدفيئة في دول الخليج حسب المصدر والدولة والقطاع والسنة |
| — حقول الاستشهاد: source, asOf, citation, note, licence |
GET /api/data/oil-strategy/outlookمحسوبة | توقعات أسعار النفط: مسار النموذج ونطاق عدم اليقين والمقارنات المرجعية | لا شيء | — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/oil-strategy/presetsمحسوبة | مقارنة خمسة مسارات للإنتاج |
| — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/oil-strategy/scenarioمحسوبة | مسار إنتاج جاهز واحد بكامل تفاصيله |
| — حقول الاستشهاد: source, asOf, citation, note |
POST /api/data/oil-strategy/scenarioمحسوبة | تشغيل سيناريو إنتاج مع محاكاة مونت كارلو والحد الكفء |
| — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/oil-strategy/backtestمحسوبة | تقييم النموذج قصير الأجل مقابل الأسعار الفعلية | لا شيء | — حقول الاستشهاد: source, asOf, citation, note |
GET /api/data/bulkمحسوبة | كل مجموعات البيانات، وما يمكن تنزيله منها كاملًا |
| weight, available, datasets حقول الاستشهاد: source, asOf, citation, datasets[].licence, datasets[].asOf |
GET /api/data/bulk/{file}محسوبة | مجموعة بيانات كاملة في ملف CSV أو JSON واحد، مع بيان تراخيصها |
| dataset, citation, manifest, excluded, count, rows حقول الاستشهاد: dataset.licence, dataset.asOf, manifest[].licence, manifest[].attribution, citation |
المنشورات
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
GET /api/briefمحسوبة | كل موجز أسبوعي منشور، الأحدث أولًا |
| count, briefs حقول الاستشهاد: briefs[].url, briefs[].issued |
GET /api/brief/latestمحسوبة | الموجز الأسبوعي الحالي |
| week, issued, locale, subject, preheader, blocks, social, summary, url, api حقول الاستشهاد: url, issued, week |
GET /api/brief/{week}محسوبة | موجز أسبوع واحد بعنوانه الدائم |
| week, issued, locale, subject, preheader, blocks, social, summary, url, api حقول الاستشهاد: url, issued, week |
GET /api/reportsمحسوبة | كل تقرير منشور، الأحدث إصدارًا أولًا |
| count, reports حقول الاستشهاد: reports[].url, reports[].edition, reports[].contentUpdated |
GET /api/reports/{id}محسوبة | تقرير واحد: النص التعريفي والتعريفات المقتبسة والمصادر وصفحات المعاينة |
| report حقول الاستشهاد: report.url, report.sources, report.definitions, report.contentUpdated |
البحث
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
GET /api/searchمحسوبة | نتائج مرتبة عبر مجموعات البيانات والسلاسل والتحليلات والمشاريع |
| groups حقول الاستشهاد: groups[].items[].href |
MCP
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
POST /api/mcpمحسوبة | بروتوكول سياق النموذج على نقل Streamable HTTP |
| — حقول الاستشهاد: result.structuredContent.source, result.structuredContent.asOf, result.structuredContent.citation |
GET /api/mcpغير محسوبة | لا يُفتح بث أحداث من الخادم | لا شيء | — |
DELETE /api/mcpغير محسوبة | إنهاء الجلسة | لا شيء | — |
البطاقات والخصائص
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
GET /api/cards/{card}غير محسوبة | بطاقة مشاركة بمقاس 1200 × 630 بالأرقام الحالية |
| — |
GET /api/propertiesغير محسوبة | خصائص ديناميكا حرارية من معادلات الحالة المرجعية في CoolProp |
| — |
نقاط المطورين
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
GET /api/openapi.jsonغير محسوبة | وثيقة OpenAPI 3.1 لكل النقاط العامة | لا شيء | — |
POST /api/licence-requestsغير محسوبة | طلب ترخيص بيانات |
| message |
GET /api/postman.jsonغير محسوبة | هذه الواجهة البرمجية في صورة مجموعة Postman مولّدة من وثيقة OpenAPI | لا شيء | — |
نماذج الموقع
تخدم نماذج الموقع صفحات هذا الموقع نفسه، وتُدرج هنا لتكتمل الوثيقة. ولا تقبل مفتاحًا، وليست جزءًا من واجهة البيانات.
| النقطة | ما تُعيده | المعاملات | حقول الاستجابة |
|---|---|---|---|
POST /api/privacy-requestsغير محسوبة | تقديم طلب وفق نظام حماية البيانات الشخصية |
| message |
POST /api/inquiriesغير محسوبة | نموذج التواصل | لا شيء | message |
POST /api/coverage-requestsغير محسوبة | طلب تغطية بيانات لا يغطيها الموقع بعد |
| message |
POST /api/coverage-requests/{id}/voteغير محسوبة | التصويت لطلب على لوحة طلبات البيانات |
| voted, votes |
POST /api/coverage-requests/{id}/briefغير محسوبة | طلب أحد طلبات اللوحة موجزًا مخصصًا |
| already |
POST /api/subscribeغير محسوبة | الانضمام إلى قائمة مواد RV Plus وRV X بتأكيد مزدوج | لا شيء | message |
GET /api/subscribe/confirmغير محسوبة | رابط التأكيد: ينقل الزائر إلى صفحة التأكيد | لا شيء | — |
POST /api/subscribe/confirmغير محسوبة | تأكيد الاشتراك من صفحة التأكيد | لا شيء | — |
GET /api/subscribe/unsubscribeغير محسوبة | رابط إلغاء الاشتراك: يفتح الصفحة التي تؤكد الإزالة | لا شيء | — |
POST /api/subscribe/unsubscribeغير محسوبة | مغادرة القائمة من الصفحة، أو بنقرة واحدة من برنامج البريد | لا شيء | message |
GET /api/subscribe/weeklyغير محسوبة | ما إذا كان العضو المسجّل دخوله يستلم الموجز الأسبوعي | لا شيء | message |
POST /api/subscribe/weeklyغير محسوبة | الموجز الأسبوعي بحقل واحد: تأكيد مزدوج لعنوان بريد إلكتروني، أو نقرة واحدة من العضو على عنوانه | لا شيء | message |
POST /api/experts/readغير محسوبة | قراءة السيرة الذاتية لعضو مسجّل الدخول (PDF) وتعبئة حقول الطلب منها | لا شيء | message |
POST /api/experts/applyغير محسوبة | التقدّم بطلب بصفة متخصص (عضو مسجّل الدخول) | لا شيء | message |
POST /api/experts/briefsغير محسوبة | إرسال سؤال إلى محللي رينيوبل فيجن | لا شيء | message |
POST /api/askغير محسوبة | RV Analyst: إجابة عن سؤال من بيانات هذا الموقع (للأعضاء) | لا شيء | — |
GET /api/assistantغير محسوبة | جاهزية مساعد الموقع للإجابة الآن (docs/ASSISTANT.md) | لا شيء | ready |
POST /api/assistantغير محسوبة | مساعد الموقع: إجابة عن سؤال الزائر من صفحات الموقع وبياناته | لا شيء | — |
GET /api/discoverغير محسوبة | بطاقات «اكتشف»: بطاقات لمتتبعات الموقع وخرائطه ومشاريعه، مع أرقام حية |
| — |
GET /api/materials/{id}غير محسوبة | ملف للأعضاء: تقرير بصيغة PDF أو حزمة بيانات |
| — |
أمثلة برمجية
طلب واحد بثلاث طرق.
يجلب كل مثال أحدث موجز أسبوعي باستخدام مفتاح ويطبع ترويسات حدود الطلبات. احذف سطر المفتاح لإرسال الطلب دون مفتاح.
curl
curl -i https://renewablevision.com.sa/api/brief/latest \ -H "Authorization: Bearer $RV_API_KEY"
Python
import os
import requests
res = requests.get(
"https://renewablevision.com.sa/api/brief/latest",
headers={"Authorization": f"Bearer {os.environ['RV_API_KEY']}"},
timeout=30,
)
res.raise_for_status()
brief = res.json()
print(brief["subject"], brief["url"])
print(res.headers["X-RateLimit-Remaining"], "requests left today")JavaScript
const res = await fetch('https://renewablevision.com.sa/api/brief/latest', {
headers: { Authorization: `Bearer ${process.env.RV_API_KEY}` }
});
if (res.status === 429) {
const { limit, retryAfter } = await res.json();
throw new Error(`Limit of ${limit.requests} per ${limit.window}; retry in ${retryAfter} s`);
}
const brief = await res.json();
console.log(brief.subject, brief.url);
console.log(res.headers.get('X-RateLimit-Remaining'), 'requests left today');المكتبات البرمجية
مكتبتان للغتي TypeScript وPython، مولّدتان من وثيقة OpenAPI.
دالة محددة الأنواع لكل عملية، بالأسماء نفسها في اللغتين، مع ما يحتاجه أي عميل منضبط: الانتظار بعد الاستجابة 429 قبل إعادة المحاولة، وقراءة سجل التغيّرات صفحة بعد صفحة، والتحقق من الملفات الكاملة بوسم ETag، والتحقق من تواقيع الإشعارات الفورية.
TypeScript
دون أي اعتماديات خارجية: تستخدم fetch المدمجة في Node 18 وما بعده وDeno وBun والمتصفح، مع أنواع لمعاملات كل عملية.
الحزمة: @renewable-vision/sdk · المصدر: sdk/typescript
import { RenewableVision, verifyWebhook } from '@renewable-vision/sdk';
const rv = new RenewableVision({ apiKey: process.env.RV_API_KEY });
// Typed calls, one per operation, with rate-limit-aware retry built in.
const { data, rateLimit } = await rv.getProject({ id: 'sudair-pv-1500-mw' });
console.log(data.project, rateLimit.remaining);
// Every page of the change ledger since a date.
for await (const change of rv.paginateChanges({ since: '2026-09-01' })) {
console.log(change.entityName, change.change);
}
// A whole dataset, revalidated with its ETag.
const file = await rv.downloadBulk('gcc-renewables', 'csv');Python
مبنية على مكتبة requests، ومحددة الأنواع عبر TypedDict وdataclasses، لإصدار Python 3.9 وما بعده.
الحزمة: renewable-vision · المصدر: sdk/python
import os
from renewable_vision import RenewableVision, verify_webhook
rv = RenewableVision(api_key=os.environ.get("RV_API_KEY"))
res = rv.get_project(id="sudair-pv-1500-mw")
print(res.data["project"], res.rate_limit.remaining)
for change in rv.paginate_changes(since="2026-09-01"):
print(change["entityName"], change["change"])
file = rv.download_bulk("gcc-renewables", "csv")- تُعاد محاولة الطلب بعد الاستجابة 429 عقب المدة التي تحددها ترويسة Retry-After، حتى ثلاث مرات، وتُعاد محاولة الاستجابات 5xx بعد مهلة قصيرة متزايدة.
- يُقرأ سجل التغيّرات صفحة بعد صفحة بمؤشر تاريخي، فلا يحتاج التاريخ الطويل إلى أي متابعة يدوية.
- تتحقق الدالتان verifyWebhook وverify_webhook من ترويسة RV-Signature والطابع الزمني وكل قيمة v1 بمقارنة ثابتة الزمن.
- الإصدار الأول على npm وPyPI قيد الإعداد، وتُستخدم الاستدعاءات كما هو معروض هنا.
الإشعارات الفورية
طلب POST موقّع إلى عنوانك عند حدوث أي تغيير.
يستطيع حاملو المفاتيح الاشتراك من صفحة مفاتيح الواجهة البرمجية في التغيّرات التي تطرأ على المشاريع ومجموعات البيانات والعناوين الإخبارية والموجز الأسبوعي، مع إمكانية حصرها في مشاريع أو شركات أو مجموعات بيانات محددة. ويحمل كل تسليم الحدث بصيغة JSON، موقّعًا بالمفتاح السري الخاص بالاشتراك.
| الحدث | يُرسل عندما |
|---|---|
project.stage_changed | تغيّرت مرحلة مشروع في أحد السجلات أو المتتبعات. |
project.added | أُضيف مشروع إلى أحد السجلات أو المتتبعات. |
project.updated | تغيّرت سعة مشروع أو أحد تواريخه أو إدراجه. |
dataset.refreshed | حُدّث سجل أو سلسلة أو متتبع أو مصدر من جهته الناشرة. |
news.mention | ذكر عنوان إخباري مشروعًا أو شركة من المتتبَّعة. |
brief.published | نُشر الموجز الأسبوعي. |
التوقيع والحماية من إعادة الإرسال
تحمل الترويسة RV-Signature القيمة t، وهي وقت التوقيع بتوقيت يونكس، والقيمة v1، وهي بصمة HMAC-SHA256 للطابع الزمني متبوعًا بنقطة ثم المتن الخام، باستخدام مفتاحك السري. أعد حسابها على البايتات نفسها التي استلمتها، وقارن بمقارنة ثابتة الزمن. وارفض أي طابع زمني يبتعد عن ساعتك أكثر من 300 ثانية، واحتفظ بمعرّفات الأحداث التي عالجتها، لأن إعادة المحاولة تحمل المعرّف نفسه.
RV-Signature: t=1790236800,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
التسليم وإعادة المحاولة
أجب بأي رمز 2xx خلال عشر ثوانٍ، وإلا أُعيدت المحاولة بعد 1 د، 5 د، 30 د، 2 س، 12 س، أي 6 محاولات في المجموع. وإذا لم تُقبل المحاولة الأخيرة يُوقف الاشتراك ويُبلَّغ صاحب المفتاح بالبريد الإلكتروني. أما الاستجابة 410 Gone فتوقفه فورًا. ويعرض السجل في صفحة مفاتيح الواجهة البرمجية كل محاولة: رمز الحالة وزمن الاستجابة وفئة المشكلة، دون أي نص من استجابتك.
بعد تجديد المفتاح السري يستمر المفتاح السابق في التوقيع إلى جانب الجديد مدة يوم، فتحمل الترويسة قيمتين من نوع v1، ويمكنك قبول أيٍّ منهما خلال الانتقال.
يجب أن يستخدم عنوان الاستقبال بروتوكول https على عنوان عام. وتُرفض العناوين الخاصة وعناوين الاسترجاع المحلي والعناوين المحلية للوصلة عند حفظ الاشتراك، ثم عند اتصال كل تسليم، ولا تُتّبع عمليات إعادة التوجيه.
التحقق عبر مكتبة TypeScript
import { verifyWebhook } from '@renewable-vision/sdk';
// Express, with the raw body kept: the signature is over the exact bytes.
app.post('/hooks/rv', express.raw({ type: 'application/json' }), async (req, res) => {
const ok = await verifyWebhook({
payload: req.body,
header: req.get('RV-Signature'),
secret: process.env.RV_WEBHOOK_SECRET
});
if (!ok) return res.sendStatus(400);
const event = JSON.parse(req.body);
if (alreadySeen(event.id)) return res.sendStatus(200); // retries reuse the id
queue(event);
res.sendStatus(204);
});التحقق عبر المكتبة القياسية في Python
import hmac, hashlib, time
def verify(header: str, body: bytes, secret: str, tolerance: int = 300) -> bool:
parts = [p.split("=", 1) for p in header.split(",") if "=" in p]
t = next((int(v) for k, v in parts if k == "t"), None)
sigs = [v for k, v in parts if k == "v1"]
if t is None or abs(time.time() - t) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
return any(hmac.compare_digest(expected, s) for s in sigs)التنزيل الكامل
مجموعات بيانات كاملة بصيغتي CSV وJSON، حيث تسمح تراخيصها.
يمكن تنزيل 12 من أصل 35 مجموعة بيانات كاملة. ويحمل كل ملف بيانًا للتراخيص يسمّي الجهة الناشرة والترخيص لكل مجموعة من الأعمدة، ووسم ETag للتحقق من التحديث، ويُحتسب بعدد 10 طلبات، بينما تُحتسب الاستجابة 304 بطلب واحد.
curl -sS -D - -o global-ccus.csv https://renewablevision.com.sa/api/data/bulk/global-ccus.csv # later: ask again with the ETag; 304 costs one request, not 10 curl -sS -D - -H 'If-None-Match: "<etag>"' https://renewablevision.com.sa/api/data/bulk/global-ccus.csv
MCP
اربط مساعدًا ذكيًا.
البيانات نفسها متاحة عبر خادم بروتوكول سياق النموذج على نقل Streamable HTTP. ويحتاج المساعد الذي يقبل خادم MCP بعيدًا إلى العنوان فقط. وتحمل كل نتيجة الجهة الناشرة وتاريخ سريان أرقامها والصفحة التي يُستشهد بها.
POST https://renewablevision.com.sa/api/mcp
إعداد العميل
{
"mcpServers": {
"renewable-vision": {
"type": "http",
"url": "https://renewablevision.com.sa/api/mcp",
"headers": {
"Authorization": "Bearer rv_live_…"
}
}
}
}لاحتساب طلبات المساعد على مفتاحك، أضف المفتاح في ترويسة Authorization ضمن إعداد العميل. ودونه تجيب النقطة وفق الحد المتاح لكل عنوان، وترفض الأدوات التي تقرأ طبقات أطلس الطاقة (search_projects على متتبّعات المملكة والطاقة الشمسية المخصصة ودول الخليج ومراكز البيانات، وgcc_series، وproject_output_estimate دون تحديد مشروع)، لأنها مجانية بالعضوية.
سجل الاستكشاف: /.well-known/mcp/server.json
ذكر المصدر
اذكر الجهة الناشرة ورينيوبل فيجن.
لكل رقم مصدران يُذكران: الجهة التي نشرته، وهذه المنصة التي جمعته أو نسخته أو حسبته.
- اذكر الجهة الناشرة الأصلية الواردة في الاستجابة، ورينيوبل فيجن، مع الصفحة التي تشير إليها الاستجابة.
- اذكر تاريخ سريان الرقم كما يرد في الاستجابة، لا تاريخ جلبه.
- أبقِ الرقم المنمذج موصوفًا بأنه منمذج، إذ تبيّن الاستجابة الأرقام المنمذجة.
- تحتفظ سلاسل الأطراف الثالثة بتراخيص جهاتها الناشرة. وحيث تقصر شروط المصدر الاستخدام على الأغراض غير التجارية، تسري الشروط نفسها على أي إعادة استخدام.
- تجميعات رينيوبل فيجن مرخّصة بموجب CC BY-NC 4.0 ما لم ينص ترخيص على خلاف ذلك.
سجل الإصدارات
ما تغيّر، ومتى.
تُضاف النقاط دون تغيير ما نُشر منها. ويُدرج هنا كل تغيير قد يلاحظه المستخدم.
القيود نفسها، مع سائر تغييرات المنصة، في سجل التحديثات
| التاريخ | التغيير | النقاط |
|---|---|---|
| 2026-10-01 | متاحة للأعضاء فقط بدءًا من هذا الإصدار: `/api/data/project-output` (بصيغتي JSON وCSV)، و`/api/data/integrations/pvgis`، والملف الكامل `project-output`، وأداة MCP project_output_estimate دون تحديد `project`. ويحصل مفتاح API لعضو أو جلسة عضو مسجّل الدخول على الإجابة نفسها كما كانت، وتكون إجابة غيرهما 401 `membersOnly`. ويبقى `/api/data/project-output/{id}` وproject_output_estimate مع تحديد `project` متاحَين للجميع. ولم تتغير بنية الاستجابات. | /api/data/project-output, /api/data/integrations/{source}, /api/mcp |
| 2026-09-28 | متاحة للأعضاء فقط بدءًا من هذا الإصدار: بمفتاح API لعضو، أو بجلسة عضو مسجّل الدخول في الموقع. ودون أيٍّ منهما تكون الإجابة 401 `membersOnly` مع السبب بالعربية والإنجليزية ورابط للانضمام، ويُجاب المفتاح الذي تعذّر التحقق منه برمز 503 `keyUnverified`. وينطبق ذلك على /data/saudi-renewables.json وعلى أداتَي MCP search_projects (متتبّعات المملكة والطاقة الشمسية المخصصة ودول الخليج ومراكز البيانات) وgcc_series. ولم تتغير بنية الاستجابات. | /api/data/atlas, /api/data/resource/grid, /api/data/gcc-series, /api/mcp |
| 2026-09-27 | قائمة `storage` جديدة والمعامل `segment=storage`: كل مشروع لتخزين الطاقة بالبطاريات في المملكة مع سعته بالميجاواط ساعة ومرحلته ومعرّف التقرير وصفحته والمصادر التي يستشهد بها التقرير وأي رقم مختلف يذكره مصدر آخر. ولم تتغير الحقول الحالية. | /api/data/atlas |
| 2026-09-24 | التوقعات مع مقاييسها المرجعية ومعايرتها، والمسارات الخمسة حتى عام 2050، وسيناريو واحد بطلب GET أو بطلب POST مُتحقَّق منه (المعاملات والصدمات، وللأعضاء وأصحاب المفاتيح مسار مخصص ومحاكاة مونت كارلو والحد الكفء، ويُحتسب بخمسة طلبات)، والاختبار الرجعي. وأداتا MCP هما oil_outlook وoil_scenario. وتحمل كل استجابة مصدرها وتاريخ صحتها وملاحظة بأنها منمذجة. | /api/data/oil-strategy/outlook, /api/data/oil-strategy/presets, /api/data/oil-strategy/scenario, /api/data/oil-strategy/backtest |
| 2026-09-24 | تأتي العناوين الآن من خلاصات الناشرين أولًا ثم من GDELT، كل ثلاث ساعات، دون تغيير في بنية الاستجابة. | /api/data/news |
| 2026-09-24 | جديد: واردات دول الخليج من معدات الطاقة النظيفة بحسب المستورد والمصدّر ومجموعة المنتجات والسنة، من 2017 فصاعدًا، من قاعدة BACI لدى CEPII، بصيغة JSON أو CSV. | /api/data/equipment-flows |
| 2026-09-24 | ملفات كاملة لكل مجموعة بيانات يسمح ترخيصها بإعادة التوزيع، مع بيان للتراخيص ووسم ETag، ويُحتسب الملف بعشرة طلبات والاستجابة 304 بطلب واحد، أما المجموعات الأخرى فتُجيب بالرمز 403 مع السبب. ومجموعة Postman مولّدة من وثيقة OpenAPI، التي أصبحت تصف أحداث الإشعارات الفورية الستة في قسم webhooks. ويقبل سجل التغيّرات مؤشر before ويُعيد nextBefore عند امتلاء الصفحة. | /api/data/bulk, /api/data/bulk/{file}, /api/postman.json, /api/data/changes |
| 2026-09-24 | موارد NASA POWER لأي خلية بدقة 0.5° والشبكة كاملة؛ وسلاسل بيانات الدول الخليجية من IRENA وOur World in Data والبنك الدولي؛ وطبقة مشاريع الأطلس على مستوى البلدة؛ والعناوين الإخبارية المطابَقة مع المشاريع والشركات. ويحمل كلٌّ منها مصدره وترخيصه وتاريخ صحته. | /api/data/resource, /api/data/resource/grid, /api/data/gcc-series, /api/data/atlas, /api/data/news |
| 2026-09-24 | ست نقاط وصول محسوبة: فهرس المصادر مع حالتها، وسجلات أي مصدر مدمج بعوامل التصفية الخاصة به، وتقديرات إنتاج المشاريع مع إجمالياتها حسب المرحلة، ومجاميع تجارة المعدات، وانبعاثات دول الخليج. ويتوفر ملف CSV حيث يسمح ترخيص المصدر، وتجيب نقطتا الأمم المتحدة للتجارة وPeeringDB عن طلب الملف بالرمز 403. | /api/data/integrations, /api/data/integrations/{source}, /api/data/project-output, /api/data/project-output/{id}, /api/data/trade, /api/data/emissions |
| 2026-09-24 | تضيف نقطة الحالة وتيرة كل مصدر وحالته وآخر خطأ سُجّل له، وفحصًا ذاتيًا لكل نقطة وصول عامة، وسجل الفحوص المحفوظة حيثما وُجد. وتُقدَّم طلبات الخصوصية من النموذج المتاح في الموقع. | /api/status, /api/privacy-requests |
| 2026-09-24 | مفاتيح API اختيارية بحصة يومية وعدّاد للاستخدام، وترويسات حدود الطلبات في كل استجابة محسوبة، ووثيقة OpenAPI 3.1، وطلبات تراخيص البيانات. | /api/openapi.json, /api/licence-requests |
| 2026-09-24 | مشروع واحد من المتتبّع وشركة واحدة بصيغة JSON، مع حقول الإسناد. | /api/data/projects/{id}, /api/data/companies/{company} |
| 2026-09-22 | نقطة بروتوكول سياق النموذج. | /api/mcp |
| 2026-09-22 | مكتبة التقارير بصيغة JSON. | /api/reports, /api/reports/{id} |
| 2026-09-21 | الموجز الأسبوعي بصيغة JSON، بعنوان دائم لكل أسبوع. | /api/brief, /api/brief/latest, /api/brief/{week} |
| 2026-09-20 | سجل التغيّرات، وجدول ما يُتوقَّع تحديثه، وميزان القدرات، وتوقعات إنتاج الأسطول الشمسي. | /api/data/changes, /api/data/due, /api/data/power-balance, /api/data/fleet-outlook |
| 2026-09-20 | المعامل asOf: السجل كما كان في نهاية يوم سابق، وميزان القدرات كما حُفظ لشهر سابق. | /api/data/registers/{register}, /api/data/power-balance |
| 2026-09-14 | نموذج توازن النفط، مع سيناريوهات مسمّاة وإمكانية ضبط كل رافعة عبر الاستعلام. | /api/data/oil-model |
| 2026-09-13 | حداثة البيانات، والبحث في الموقع، وبطاقات المشاركة. | /api/status, /api/search, /api/cards/{card} |
| 2026-09-12 | السلاسل المنسوخة من بوابة بيانات الطاقة لدى كابسارك، والسجلات الرسمية الثلاثة. | /api/data/portal/{series}, /api/data/registers/{register} |
هل تحتاج إلى استخدام البيانات تجاريًا أو إعادة توزيعها؟
تُرخَّص الأغراض البحثية والاستخدام التجاري الداخلي وإعادة التوزيع كلٌّ على حدة، ولكل منها نطاقه وطريقة ذكر المصدر. ولا يتجاوز الترخيص شروط المصدر الأصلي، وتبيّن صفحة التراخيص مجموعات البيانات التي تقصر مصادرها الاستخدام على الأغراض غير التجارية.