توثيق واجهة API
اقرأ تقارير السوق والإشغال وتقديرات الإيرادات والاتجاهات اليومية والعقارات المجمّعة وتوقعات الإيرادات في الخليج ومصر بصيغة JSON. استخدمها من جداول البيانات أو النصوص البرمجية أو برامجك الخاصة، أو من مساعدي الذكاء الاصطناعي عبر خادم MCP.
المصادقة
سجّل الدخول وافتح البيانات وواجهة API (Data & API) وأنشئ مفتاحًا. تحدد خطتك عدد المفاتيح النشطة في الحساب (5 خلال التجربة المجانية). يبدأ المفتاح بـ ss_ ويظهر مرة واحدة ولا يُحفظ إلا قيمةً مجزّأة، فانسخه عند إنشائه. ويمكنك إلغاء أي مفتاح من الصفحة نفسها في أي وقت، فتفشل الطلبات التي تستخدمه فورًا.
أرسل المفتاح في ترويسة Authorization مع كل طلب. جميع الاستجابات بصيغة JSON عبر HTTPS.
Base URL: https://jokerprice.com
Authorization: Bearer ss_0123456789abcdef0123456789abcdef01234567حدود الطلبات
الحدود لكل حساب، وتتقاسمها جميع مفاتيحه. خلال التجربة المجانية يتيح الحساب 120 طلبًا في الدقيقة و25,000 طلب في اليوم بتوقيت UTC، ولكل خطة حدودها المعروضة في أسعار API. وتُرجع الطلبات التي تتجاوز الحد الرمز 429 مع ترويسة Retry-After بالثواني. وإذا انتهت التجربة دون خطة، تُرجع الطلبات 402 PLAN_REQUIRED حتى تُختار خطة. وتعرض صفحة البيانات وواجهة API حدود الحساب واستخدام كل مفتاح اليوم وفي الدقيقة الحالية وآخر وقت استُخدم فيه.
الأخطاء
تستخدم الأخطاء رموز حالة HTTP القياسية وجسم JSON يتضمن رمزًا ثابتًا code، ورسالة مقروءة message، ومعرّف الطلب requestId (ويُرسل أيضًا في X-Request-ID).
{
"error": {
"code": "RATE_LIMIT",
"message": "Limit of 120 requests per minute reached."
},
"requestId": "6f1c2a9e-3b0d-4c55-9a51-2f7e0f0f4b11"
}| الحالة | الرموز | المعنى |
|---|---|---|
400 | INVALID_INPUT, INVALID_AREA, INVALID_JSON, INVALID_METRIC, INVALID_SOURCE | أحد المعاملات مفقود أو خارج النطاق المسموح، وتوضح الرسالة أيّها. |
401 | API_KEY_REQUIRED, API_KEY_INVALID | لا توجد ترويسة Authorization، أو أن المفتاح غير صحيح أو أُلغي. |
402 | PLAN_REQUIRED | المفتاح صالح، لكن التجربة المجانية للحساب انتهت دون خطة. اختر خطة ليعمل المفتاح من جديد. |
404 | NOT_FOUND | سوق أو مسار غير معروف. |
429 | RATE_LIMIT, DAILY_LIMIT | بلغت الحد الأقصى للطلبات في الدقيقة أو في اليوم. انتظر عدد الثواني المذكور في Retry-After. |
500 | INTERNAL_ERROR | حدث خطأ من جهتنا. اذكر قيمة requestId إذا تواصلت معنا. |
503 | STORAGE_UNAVAILABLE | التخزين غير متاح مؤقتًا. أعد المحاولة لاحقًا. |
تقسيم النتائج إلى صفحات
نقطة الوصول الوحيدة المقسّمة إلى صفحات هي عرض العقارات. تُرجع nextCursor؛ أعد إرساله في cursor حتى تصبح قيمته null. والصفحات مرتبة حسب listingKey، لذا يبقى المؤشر صالحًا أثناء جمع عقارات جديدة.
أنواع العقارات
تستخدم العقارات والمؤشرات والتقديرات معرّفات الأنواع التالية.
1 منتجع، 2 شاليه، 3 استراحة، 4 مزرعة، 5 مخيم، 6 شقة، 7 فيلا، 8 غرفة، 9 استوديو، 11 شقة فندقية
عرض الأسواق
GET/api/v1/markets
كل وجهة تضم 20 عقارًا مجمّعًا على الأقل، مرتبة حسب عدد العقارات. تكون قيمة tracker هي null إلى أن تتوفر للوجهة تقويمات متتبَّعة، ولا تصبح أرقام الإشغال ومتوسط السعر اليومي والإيرادات فيها ذات دلالة إلا عندما تكون قيمة maturity هي "estimating".
لا توجد معاملات.
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/markets"مثال على الاستجابة
{
"markets": [
{
"slug": "riyadh",
"name": "Riyadh",
"latitude": 24.7136,
"longitude": 46.6753,
"listings": 9412,
"sources": {
"gathern": 7650,
"airbnb": 1762
},
"nightly": {
"median": 420,
"p25": 300,
"p75": 650
},
"tracker": {
"maturity": "estimating",
"trackingDays": 41,
"tracked": 812,
"occupancy": 0.47,
"adr": 512.4,
"revpar": 240.8,
"monthlyRevenuePerListing": 7225,
"onTheBooks": 0.18
}
},
{
"slug": "jeddah",
"name": "Jeddah",
"latitude": 21.4858,
"longitude": 39.1925,
"listings": 6120,
"sources": {
"gathern": 5011,
"airbnb": 1109
},
"nightly": {
"median": 450,
"p25": 320,
"p75": 700
},
"tracker": null
}
]
}تقرير سوق واحد
GET/api/v1/markets/{slug}
التقرير الكامل الذي تستند إليه صفحة بيانات السوق العامة (/market-data): العرض حسب المصدر، وأرباع السعر المعروض، ووسيط السعر المعروض حسب عدد غرف النوم (للمجموعات التي تضم 5 عقارات فأكثر)، وتوزيع أنواع العقارات، ومتوسط التقييم (0–10)، وعند توفر التتبّع: الإشغال لآخر 90 يومًا، ومتوسط السعر اليومي (ADR)، والإيراد لكل وحدة متاحة (RevPAR)، والإيراد لكل عقار، مع تفصيل حسب أيام الأسبوع والأشهر والمهلة المسبقة للحجز.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
slug | المسار | نعم | معرّف السوق بأحرف صغيرة كما يرد في «عرض الأسواق»، مثل riyadh وdubai وcairo. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/markets/riyadh"مثال على الاستجابة
{
"market": {
"slug": "riyadh",
"name": "Riyadh",
"latitude": 24.7136,
"longitude": 46.6753,
"listings": 9412,
"sources": {
"gathern": 7650,
"airbnb": 1762
},
"nightly": {
"median": 420,
"p25": 300,
"p75": 650
},
"bedrooms": [
{
"bedrooms": 1,
"listings": 2210,
"median": 300
},
{
"bedrooms": 2,
"listings": 3105,
"median": 420
},
{
"bedrooms": 3,
"listings": 1980,
"median": 600
}
],
"types": [
{
"type": "Apartment",
"count": 5120
},
{
"type": "Chalet",
"count": 1870
},
{
"type": "Villa",
"count": 990
}
],
"rating": 8.9,
"tracker": {
"maturity": "estimating",
"trackingDays": 41,
"tracked": 812,
"occupancy": 0.47,
"adr": 512.4,
"revpar": 240.8,
"monthlyRevenuePerListing": 7225,
"onTheBooks": 0.18,
"observedNights": 30122,
"byMonth": [
{
"month": "2026-09",
"period": "observed",
"bookedNights": 11920,
"nights": 24800,
"occupancy": 0.48,
"adr": 505
}
],
"byWeekday": [
{
"weekday": 4,
"bookedNights": 2410,
"nights": 3900,
"occupancy": 0.62,
"adr": 560
}
],
"leadTimes": [
{
"label": "0–1 days",
"nights": 3120
},
{
"label": "2–7 days",
"nights": 4800
}
]
}
}
}مؤشرات الأداء
GET/api/v1/metrics
الإشغال ومتوسط السعر اليومي والإيرادات من التتبّع اليومي للتقويمات، لمدينة أو لمستطيل على الخريطة. يغطي past الليالي السابقة لليوم، ويمثل forward نسبة الليالي القادمة المحجوزة مسبقًا، ويضم series صفًا لكل ليلة. وتبقى قيمة maturity هي "collecting" حتى يتوفر سجل لمدة 7 أيام و100 ليلة عقار مرصودة.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
city | الاستعلام | لا | معرّف السوق أو اسمه. أرسل city، أو المعاملات الأربعة north وsouth وeast وwest معًا. |
north, south, east, west | الاستعلام | لا | مستطيل بالدرجات العشرية، لا يتجاوز عرضه 5 درجات. |
past_days | الاستعلام | لا | عدد الليالي السابقة، من 1 إلى 365. القيمة الافتراضية 30. |
forward_days | الاستعلام | لا | عدد الليالي القادمة، من 1 إلى 365. القيمة الافتراضية 60. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/metrics?city=riyadh&past_days=30&forward_days=60"
# Or a map rectangle
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/metrics?north=24.85&south=24.70&east=46.80&west=46.60"مثال على الاستجابة
{
"metrics": {
"source": "all",
"today": "2026-10-28",
"from": "2026-09-28",
"to": "2026-12-27",
"trackingDays": 41,
"maturity": "estimating",
"listings": {
"tracked": 812,
"checked": 806,
"medianAskingNightly": 430,
"bedrooms": [
{
"value": "2",
"count": 301
},
{
"value": "1",
"count": 244
}
],
"types": [
{
"value": "6",
"count": 520
},
{
"value": "2",
"count": 160
}
]
},
"past": {
"nights": 24180,
"bookedNights": 11365,
"occupancy": 0.47,
"adr": 512.4,
"revpar": 240.8,
"monthlyRevenuePerListing": 7225
},
"forward": {
"nights": 48360,
"bookedNights": 8705,
"onTheBooks": 0.18
},
"byWeekday": [
{
"weekday": 0,
"bookedNights": 1450,
"nights": 3460,
"occupancy": 0.42,
"adr": 480
},
{
"weekday": 4,
"bookedNights": 2410,
"nights": 3460,
"occupancy": 0.7,
"adr": 560
}
],
"byMonth": [
{
"month": "2026-10",
"period": "mixed",
"bookedNights": 10220,
"nights": 21900,
"occupancy": 0.47,
"adr": 510
}
],
"leadTimes": [
{
"label": "0–1 days",
"nights": 3120
},
{
"label": "2–7 days",
"nights": 4800
},
{
"label": "8–14 days",
"nights": 1900
}
],
"series": [
{
"night": "2026-10-27",
"past": true,
"booked": 401,
"eligible": 806,
"occupancy": 0.4975,
"adr": 498.2
}
]
}
}الاتجاهات اليومية
GET/api/v1/trends
لقطة يومية محفوظة لكل وجهة، تُعرض سلسلةً زمنية لمؤشر واحد. يغطي الإشغال ومتوسط السعر اليومي والإيراد لكل وحدة متاحة في كل لقطة الليالي الثلاثين السابقة لذلك اليوم، بينما يغطي on_the_books الليالي الثلاثين التالية له. ويقارن changes أحدث قيمة بقيمتها قبل 7 و30 و90 يومًا متى توفر سجل بهذا الطول، وتبقى قيمة yearOverYear هي null حتى يُحفظ عام كامل.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
city | الاستعلام | نعم | معرّف السوق أو اسمه. |
metric | الاستعلام | لا | occupancy (افتراضي)، أو adr، أو revpar، أو asking، أو listings، أو tracked، أو on_the_books. |
source | الاستعلام | لا | all (افتراضي)، أو gathern، أو airbnb. |
days | الاستعلام | لا | عدد أيام السجل المطلوبة، من 7 إلى 1100. القيمة الافتراضية 365. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/trends?city=riyadh&metric=occupancy&days=90"مثال على الاستجابة
{
"trends": {
"metric": "occupancy",
"label": "Occupancy",
"unit": "share",
"source": "all",
"days": 365,
"windowNights": 30,
"today": "2026-10-28",
"destination": {
"slug": "riyadh",
"name": "Riyadh"
},
"sources": [
"all",
"gathern",
"airbnb"
],
"points": [
{
"day": "2026-10-27",
"value": 0.46,
"origin": "daily",
"observedNights": 23950
},
{
"day": "2026-10-28",
"value": 0.47,
"origin": "daily",
"observedNights": 24180
}
],
"changes": [],
"yearOverYear": null,
"supply": {
"latest": {
"day": "2026-10-28",
"value": 9412,
"tracked": 812
},
"first": {
"day": "2026-10-27",
"value": 9390,
"tracked": 806
},
"changes": [],
"points": [
{
"day": "2026-10-28",
"value": 9412,
"tracked": 812
}
]
},
"history": {
"days": 2,
"firstDay": "2026-10-27",
"dailySince": "2026-10-27",
"backfilledDays": 0
},
"notice": "Only 2 days of history so far (since 2026-10-27). JokerPrice stores one snapshot a day, so trends firm up over the coming weeks; year-over-year appears after a full year."
}
}وتيرة الحجز في السوق
GET/api/v1/pace
وتيرة الحجز من اللقطات اليومية. لكل تاريخ إقامة خلال الأيام الثلاثين القادمة: يمثل onTheBooks نسبة الليالي المحجوزة من الليالي المتتبَّعة في أحدث لقطة، ويمثل pickup7 وpickup14 مقدار ارتفاع هذه النسبة خلال الأيام السبعة والأربعة عشر السابقة. ويحسب curve متوسط نسبة الحجز حسب عدد الأيام السابقة للوصول. وتبقى قيمة status هي "collecting" حتى تتوفر لقطات 7 أيام.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
city | الاستعلام | نعم | معرّف السوق أو اسمه. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/pace?city=dubai"مثال على الاستجابة
{
"pace": {
"destination": "dubai",
"today": "2026-11-20",
"snapshotDays": 21,
"minSnapshotDays": 7,
"basis": "tracked public calendars (estimate)",
"status": "ready",
"latestSnapshot": "2026-11-20",
"stayDates": [
{
"stayDate": "2026-11-27",
"onTheBooks": 0.41,
"eligible": 1180,
"pickup7": 0.09,
"pickup14": 0.15
}
],
"curve": [
{
"lead": 0,
"onTheBooks": 0.52,
"stayDates": 14
},
{
"lead": 7,
"onTheBooks": 0.4,
"stayDates": 14
}
]
}
}المناسبات والعطلات
GET/api/v1/events
تقويم العطل والمناسبات المحلية الموثّق المصادر، الذي تعتمد عليه قواعد التسعير حسب المناسبات. لكل مناسبة اسم بالعربية والإنجليزية، ونوع، والمدن التي تشملها (all-sa لجميع مدن السعودية)، وتاريخا بداية ونهاية شاملان، ودرجة تأكيد، ومصدر. وقد تتغير التواريخ المصنفة "expected" (مثل التواريخ الهجرية قبل إعلان رؤية الهلال).
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
city | الاستعلام | لا | معرّف السوق أو اسمه؛ احذفه لعرض جميع المناسبات. |
from, to | الاستعلام | لا | نطاق التواريخ بصيغة YYYY-MM-DD، وتُرجع المناسبات التي تتقاطع مع هذا النطاق. |
kind | الاستعلام | لا | أنواع مفصولة بفواصل: religious وnational وschool وseason وsports وculture وbusiness. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/events?city=riyadh&from=2026-11-01&to=2027-03-31"مثال على الاستجابة
{
"version": "2026-10-28.2",
"lastReviewed": "2026-10-28",
"coverage": {
"start": "2026-01-01",
"end": "2027-12-31"
},
"certainty": {
"official": "Published by the authority or organiser itself on its own site.",
"expected": "Computed (for example from the Umm al-Qura calendar), not fully announced, or reported only in the news; may move."
},
"count": 1,
"events": [
{
"id": "saudi-national-day-2026",
"name": {
"en": "Saudi National Day",
"ar": "اليوم الوطني السعودي"
},
"kind": "national",
"cities": [
"all-sa"
],
"start": "2026-09-23",
"end": "2026-09-23",
"certainty": "official",
"sourceUrl": "https://www.my.gov.sa/",
"verifiedAt": "2026-10-28"
}
]
}عرض العقارات
GET/api/v1/listings
العقارات المجمّعة لوجهة ما، مرتبة حسب listingKey. قيمة source هي gathern أو airbnb أو agoda. ويمثل nightly آخر سعر معروض رُصد بالريال السعودي قبل الرسوم، والتقييم rating من 10 (تُضاعف تقييمات Airbnb). واصل الطلب مع cursor=nextCursor حتى تصبح قيمة nextCursor هي null.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
city | الاستعلام | نعم | معرّف السوق أو اسمه. |
limit | الاستعلام | لا | عدد العقارات في كل صفحة، من 1 إلى 500. القيمة الافتراضية 100. |
cursor | الاستعلام | لا | قيمة nextCursor من الصفحة السابقة. |
مثال على الطلب
curl -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
"https://jokerprice.com/api/v1/listings?city=riyadh&limit=100"مثال على الاستجابة
{
"listings": [
{
"id": "48213",
"source": "gathern",
"sourceListingId": "48213",
"listingKey": "gathern:48213",
"title": "Modern 2BR in Al Malqa",
"city": "Riyadh",
"district": "Al Malqa",
"typeId": "6",
"latitude": 24.8094,
"longitude": 46.6112,
"bedrooms": 2,
"area": 120,
"nightly": 420,
"rating": 9.4,
"reviews": 87,
"url": "https://gathern.co/view/1234/unit/48213",
"updatedAt": "2026-10-27T21:14:03.000Z"
}
],
"nextCursor": "gathern:48213"
}تقدير الإيرادات
POST/api/v1/estimate
حاسبة الإيرادات. العقارات المماثلة هي العقارات المحفوظة ضمن نصف القطر التي تطابق عدد غرف النوم والنوع. يعتمد متوسط السعر اليومي على أسعار الليالي المحجوزة في التقويمات المتتبَّعة القريبة (أو ضمن 20 كم) متى اكتمل نضج البيانات، وإلا فعلى وسيط السعر المعروض للعقارات المماثلة. وفي غياب إشغال مقيس تكون قيمة projection هي null، ويضم scenarios سيناريوهات إشغال بنسب 40٪ و55٪ و70٪. أضف كائن investment لتحصل على التدفق النقدي ومعدل العائد (Cap rate) وفترة الاسترداد للتوقع نفسه.
المعاملات
| المعامل | الموضع | إلزامي | الوصف |
|---|---|---|---|
latitude, longitude | جسم الطلب | نعم | موقع العقار بالدرجات العشرية. |
radiusKm | جسم الطلب | لا | نصف قطر البحث عن العقارات المماثلة، من 0.5 إلى 20 كم. القيمة الافتراضية 3. |
bedrooms | جسم الطلب | لا | عدد غرف النوم بالضبط من 1 إلى 6، أو 0 لأي عدد. القيمة الافتراضية 0. |
typeId | جسم الطلب | لا | معرّف نوع العقار (انظر أدناه) أو "all". القيمة الافتراضية "all". |
investment | جسم الطلب | لا | اختياري. purchasePrice، وdownPaymentPct (افتراضيًا 25)، وloanRatePct (6)، وloanTermYears (25)، وsetupCost، وmonthlyFixedCosts، وplatformFeePct (15)، وcleaningPerStay، وavgStayNights (2)، وmanagementFeePct. تُكتب النسب أعدادًا صحيحة (6 = 6٪). |
comps | جسم الطلب | لا | اختياري. من 3 إلى 50 قيمة key من candidates. يستخدم التقدير عندها هذه العقارات وحدها: أسعارها المعروضة، ومتوسط سعر لياليها المحجوزة وإشغالها من تقويماتها المتتبَّعة متى بلغت 7 أيام و100 ليلة مرصودة، دون اللجوء إلى نطاق أوسع. وتُستبعد المفاتيح التي لم تعد بين العقارات المرشحة، ويُحسب عددها في selection.ignored. |
أنواع العقارات
1 منتجع، 2 شاليه، 3 استراحة، 4 مزرعة، 5 مخيم، 6 شقة، 7 فيلا، 8 غرفة، 9 استوديو، 11 شقة فندقية
مثال على الطلب
curl -X POST -H "Authorization: Bearer $JOKERPRICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"latitude":24.7743,"longitude":46.7386,"radiusKm":3,"bedrooms":3,"typeId":"7"}' \
"https://jokerprice.com/api/v1/estimate"مثال على الاستجابة
{
"estimate": {
"input": {
"latitude": 24.7743,
"longitude": 46.7386,
"radiusKm": 3,
"bedrooms": 3,
"typeId": "7"
},
"asking": {
"count": 64,
"median": 900,
"p25": 700,
"p75": 1200
},
"adr": {
"value": 860,
"basis": "booked nights nearby"
},
"occupancy": {
"value": 0.44,
"basis": "tracked calendars nearby",
"trackingDays": 41,
"trackedNearby": 58
},
"projection": {
"occupancy": 0.44,
"adr": 860,
"monthly": 11352,
"annual": 138116
},
"range": {
"low": {
"occupancy": 0.44,
"adr": 700,
"monthly": 9240,
"annual": 112420
},
"high": {
"occupancy": 0.44,
"adr": 1200,
"monthly": 15840,
"annual": 192720
}
},
"scenarios": [],
"seasonality": [
{
"month": "2026-09",
"period": "observed",
"occupancy": 0.41,
"adr": 840,
"revenue": 10332
}
],
"comparables": [
{
"id": "50991",
"source": "gathern",
"title": "Villa with pool",
"nightly": 950,
"bedrooms": 3,
"typeId": "7",
"rating": 9.1,
"url": "https://gathern.co/view/2211/unit/50991",
"latitude": 24.771,
"longitude": 46.741,
"distanceKm": 0.43
}
],
"selection": {
"mode": "all",
"status": "ok",
"inRadius": 64,
"candidates": 50,
"kept": 50,
"requested": 0,
"ignored": 0,
"minimum": 3,
"maximum": 50
},
"candidates": [
{
"key": "gathern:50991",
"ref": "3f9c2a7e01b4",
"kept": true,
"source": "gathern",
"title": "Villa with pool",
"url": "https://gathern.co/view/2211/unit/50991",
"nightly": 950,
"checkIn": "2026-10-29",
"bedrooms": 3,
"typeId": "7",
"rating": {
"value": 9.1,
"scale": 10
},
"reviews": 42,
"distanceKm": 0.43,
"position": "within",
"tracked": {
"since": "2026-09-14T06:00:00.000Z",
"observedNights": 44,
"bookedNights": 19,
"minNights": 30,
"occupancy": 0.4318,
"adr": 905
}
}
]
}
}مع مدخلات الاستثمار
{
"latitude": 24.7743,
"longitude": 46.7386,
"bedrooms": 3,
"typeId": "7",
"investment": {
"purchasePrice": 1500000,
"downPaymentPct": 30,
"loanRatePct": 6,
"loanTermYears": 25,
"monthlyFixedCosts": 900,
"platformFeePct": 15,
"cleaningPerStay": 120,
"avgStayNights": 2
}
}وتتضمن الاستجابة عندئذٍ الحقل estimate.investment:
{
"investment": {
"inputs": {
"purchasePrice": 1500000,
"downPaymentPct": 30,
"loanRatePct": 6,
"loanTermYears": 25,
"monthlyFixedCosts": 900,
"platformFeePct": 15,
"cleaningPerStay": 120,
"avgStayNights": 2,
"setupCost": 0,
"managementFeePct": 0
},
"basis": "projection",
"projection": {
"occupancy": 0.44,
"adr": 860,
"revenue": 138116,
"expenses": {
"platformFees": 20717,
"management": 0,
"cleaning": 9636,
"fixed": 10800
},
"operatingExpenses": 41153,
"netOperatingIncome": 96963,
"capRate": 0.0646,
"loanAmount": 1050000,
"annualDebtService": 81181,
"cashInvested": 450000,
"annualCashFlow": 15782,
"monthlyCashFlow": 1315,
"cashOnCash": 0.0351,
"paybackYears": 28.5,
"breakEvenOccupancy": 0.3756
},
"scenarios": []
}
}نقطة وصول MCP
يستطيع مساعدو الذكاء الاصطناعي قراءة البيانات نفسها عبر خادم MCP المستضاف على https://jokerprice.com/mcp: بروتوكول JSON-RPC 2.0 عبر طلبات HTTP POST (بروتوكول النقل Streamable HTTP في MCP مع استجابات JSON)، مع المصادقة بالمفتاح نفسه. يُحتسب كل استدعاء لأداة طلبًا واحدًا من الحدود المذكورة أعلاه، بينما لا تُحتسب طلبات initialize وtools/list وping. راجع إعداد MCP والأدوات.
POST https://jokerprice.com/mcp
Authorization: Bearer ss_0123456789abcdef0123456789abcdef01234567
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_market","arguments":{"slug":"riyadh"}}}عن البيانات
- تأتي العقارات من عمليات البحث العامة في Airbnb وGathern وAgoda. المبالغ بالريال السعودي، و
nightlyهو السعر المعروض قبل رسوم التنظيف والخدمة. - يُقدَّر الإشغال من تقويمات التوفر العامة التي تُفحص يوميًا: تُحتسب الليلة محجوزة إذا أُغلقت بين فحصين، أما الإغلاقات الطويلة أو البعيدة زمنيًا فتُعد ليالي محجوبة يغلقها المالك. ومتوسط السعر اليومي (ADR) هو السعر المعروض للليالي المحجوزة، لا السعر المحقق فعليًا.
- الإيراد الشهري لكل عقار = متوسط السعر اليومي × الإشغال × 30، والإيراد لكل وحدة متاحة (RevPAR) = متوسط السعر اليومي × الإشغال.
- تُخزَّن تقارير السوق مؤقتًا لمدة تصل إلى 30 دقيقة.
- جوكر برايس جهة مستقلة لا ترتبط بـ Airbnb أو Gathern أو Agoda. والأرقام تقديرات وليست ضمانات.