الإصدار
الإصدار الرئيسي في المسار: /api/v1. داخل v1 لا نكسر التكاملات القائمة. الإصدار الحالي للعقد هو info.version في /openapi.json، ويزداد مع كل تغيير.
ما الذي قد يتغير دون إشعار
هذه التغييرات متوافقة، ويجب أن يتعامل عميلك معها:
- عمليات وأدوات جديدة؛
- حقول طلب جديدة اختيارية؛
- حقول رد جديدة؛
- قيم جديدة في تعدادات الردود (الحالات، والرموز)، ورموز أخطاء جديدة في
title، وأنواع جديدة من أحداث webhook؛ - تغييرات في نص
detail؛ - حدود أعلى.
كيف تكتب العميل
- تجاهل حقول الرد غير المعروفة.
- تعامل مع قيمة تعداد أو رمز خطأ أو نوع حدث غير معروف على أنه «آخر» لا على أنه عطل.
- ابنِ التفرع على
statusوtitleوcode، لا على نصdetail. - لا تعتمد على ترتيب الحقول أو طول المعرّفات.
- اعتمد على حالة المهمة
state، لا علىstatusالخام للأداة.
ما الذي يُعد كاسرا
حذف عملية أو حقل أو نطاق أو حدث أو إعادة تسميته؛ حقل طلب إلزامي جديد؛ تغيير نوع الحقل أو معناه؛ تغيير رمز الحالة للحالة نفسها؛ تضييق القيم المسموح بها. لا نجري هذه التغييرات في v1 دون إشعار: تُعلَّم العملية أولا بأنها deprecated في /openapi.json وفي هذا السجل، وتستمر في العمل 6 أشهر على الأقل. الاستثناء هو سد ثغرة أمنية.
التصحيح الذي يجعل الرد مطابقا لهذا التوثيق ليس تغييرا كاسرا.
سجل التغييرات
2026-10-03: الإصدار 1.16
تغيّر:
- يحمل
429الحقلcode:minute_limitأوdaily_limit(الحد اليومي للمفتاح، يُعاد ضبطه عند 00:00 UTC). - العقار المكتوب بمفتاح وكالة يخص الوكالة؛ وتصل ويب هوك
object.*وlead.*لعقارات الوكالة وعملائها إلى عناوين الوكالة أيضا. - صور العقار: حتى 50 لكل نوع، كما في لوحة التحكم.
- SDK 1.7.2: لم يعد جزء فارغ من التدفق يقسم حدث الدردشة.
أُصلح:
- يحافظ
PUT /objects/{kind}/{id}على حالة الإشراف وisSoldونشر العقار؛ وكان يعيد ضبطها (تعديل عادي كان يلغي نشر عقار منشور). - لم يعد
GET /objectsيعرض عقارات المالكين الموقوفين؛ ولا تُقدَّم بالمعرّف بطاقة مخفية عن الزوار. PATCH /leads/{id}: يستطيع مرسل العميل بلا عقد تغيير حالته كما في لوحة التحكم؛ ويُسجَّل التغيير والأرشفة في سجل العميل.
2026-10-03: الإصدار 1.15
تغيّر:
- يتبع
PATCH /leads/{id}(الحالة) وDELETE /leads/{id}قواعد لوحة التحكم: الإنهاء وتحصيل العمولة والعقد أو الاتفاق الساري:422مع السبب فيcode. ولم يعد?expand=historyيحمل بيانات وصفية داخلية (رموز، ومعرّفات مستخدمين آخرين). - يرد الحد اليومي للدردشة المجانية بـ
code: free_daily_limitمعRetry-Afterحتى الساعة 00:00 UTC. GET /works: الحقولpreviewUrlوlinkوobject.photoUrlمسارات/files/...لـGET /artifacts/{path}؛ وفي الصفحة الأخيرة تكونnextCursorبقيمةnull.- إنشاء العميل: تُسقط الحقول غير المعروفة (ولا تُرفض)؛ وتذكر المواصفة الأطوال التي تتحقق منها الخدمة؛ و
pool: trueيسلّم العميل إلى مجمع المنصة. - SDK 1.7.1: ينتظر
jobs.waitانقضاء429؛ ويعالجchat.streamCRLF المقسوم بين الأجزاء؛ ويقبلartifact()المعاملsignal.
أُصلح:
- معاينة الموسيقى:
Rangeبعد نهاية الملف يعطي416(كان يعطي404)؛ وعطل خدمة الملفات يعطي502لا404. - الملف الأكبر من 15 ميغابايت في
POST /uploadsيعطي413. ورفضstrictPhotosيذكر الصور التي فشل تحميلها (code: photo_fetch_failed). - رفض حزمة المحتوى يذكر
form.media.photos. بيئة الاختبار: تأخذ مراجعة التقرير أول ملف بأي اسم؛ ولا تُرفض نصوص الإيجار ولا مفاتيح الصورة الداخلية.
2026-10-03: الإصدار 1.14
تغيّر:
- إعادة التقييم السريع بالمفتاح
Idempotency-Keyنفسه أصبحت مجانية تماما: لا يُخصم استدعاء API أيضا. GET /works: قيمةcursorالتي ليستnextCursorتعطي400(كانت القائمة تبدأ من جديد بصمت).POST /webhooks/{id}/test: قيمةeventTypeغير الموجودة في القائمة تعطي400(كان يُرسل اختبار عام).- Swipe Match: لا يقبل
reasonCodeإلا الأسباب المدرجة، كما كانت الخدمة تشترط دائما؛ ويمكن أن تكون قيمةkindللعميلpool. - SDK 1.7.0: يصمد
jobs.waitأمام استعلام فاشل واحد؛ ويقبلartifact()المعاملrange؛ ويقرأchat.streamتدفقات CRLF ويستدعي مرة لكل حدث.
أُصلح:
- معاينة الموسيقى:
bytes=-Nتعيد آخر N بايت، وRangeبعد نهاية الملف يعطي416. - انتهاء مهلة الاتصال قبل إرسال الطلب يحرر
Idempotency-Key. - بيئة الاختبار: صور الفيديو بأي اسم حقل تقرؤه الخدمة، وأرقام الإيجار كنصوص، وصور PNG للمنشور بالحجم المذكور.
2026-10-03: الإصدار 1.13
أُضيف:
- يعيد
GET /worksما تعرضه لوحة التحكم لكل نتيجة:streetوstreetNumberوpreviewUrlوlinkوrepeatIndexوerrorوالعقار (object). - يوثّق
GET /chat/sessionsمعاملاته:limitوcursorوqوprojectIdوarchivedOnlyوsort. - يتضمن
Problem.titleفي المواصفة القيمةrange_not_satisfiable؛ وتحمل قائمة الويب هوكrequestId. - SDK 1.6.1: يقبل
chat.listSessionsمعاملات القائمة.
تغيّر:
- تذكر المواصفة حدودا كان الإنتاج يطبقها أصلا:
scriptTextللأفاتار حتى 1200 حرف، وformatsللمنشور حتى 3 وlayoutsحتى 5، وأطوال حقولcontactsللمنشور، وseedللصورة حتى 2147483647، ولا مفاتيح غير معروفة فيdataللصورة. - التقييم السريع: لا ترفض البوابة إلا طلبا بلا مساحة إطلاقا وبلا نوع عقار؛ والخدمة تقرر هل تُحتسب
landPlotArea(وتُحتسب أيضا للأرض المذكورة فيpropertyTypeأوapartmentType).
أُصلح:
- ترفض بيئة الاختبار الصور كما يرفضها الإنتاج (JPEG أو PNG أو WebP حتى 25 ميغابايت:
JOB_CREATE_FAILED؛ والقناع خارج cleanup:MASK_NOT_SUPPORTED) وتقبل ما يقصّه الإنتاج أو يستبدله (عنوان الفيديو ومستوى الصوت والإطار الختامي وخيارات العبارة الختامية، ولغة صفحة الهبوط، وأكثر من 20 صورة للمحتوى، وfurnishedكلمةً في الإيجار). ولم تعد مهمة التقرير تُظهرpendingبعدrunning. - إعادة توجيه التنزيل المرفوضة تُذكر كما هي لا كانتهاء مهلة؛ ولاحقة
Rangeالأطول من الملف تعيد الملف كله. - SDK 1.6.1: تعمل
verifyWebhookSignatureفي Node 18.
2026-10-03: الإصدار 1.12
أُضيف:
416 range_not_satisfiableكمشكلة RFC 9457 (كان يصل بجسم فارغ).priceMinorعند بدء تحسين الصور: ما يُخصم مقابل الاستدعاء كما تعرضه لوحة التحكم.- SDK 1.6.0: يقبل
worksالمعاملينfrom/to، ويقبلchat.historyالمعاملينlimit/cursor، ويقبلchat.sendMessageالمعاملstyle.
تغيّر:
GET /match/leads: قيمةlimitأكبر من 50 أوpageأكبر من 1000 تعطي400(لم تكن تُقصّ قط).POST /match/leads/{id}/events: مفتاحIdempotency-Keyبصيغة أخرى يعطي400بدل تجاهله بصمت.- الحقل الذي يرفضه المنشور الإعلاني يعطي
400 validationمع اسم الحقل (كان422). - الاستدعاء الذي ما زال دفعه قيد الحجز تحت
Idempotency-Keyنفسه يعطي409 idempotency_conflict(كان422). - التقييم السريع: تُحتسب
landPlotAreaمساحةً فقط معland، كما في الخدمة. - انتهاء المهلة أو انقطاع الاتصال أو إغلاق المقبس في منتصف الرد يُبقي
Idempotency-Keyمحجوزا؛ ولا يحرره إلا طلب لم يصل إلى الخدمة. - SDK 1.6.0: لا يُعاد الرفع أبدا بعد
503؛ ويُزال مستمع الإلغاء بعد كل فترة انتظار.
أُصلح:
- رفض PDF وصفحة الهبوط يحمل سببه:
402معINSUFFICIENT_FUNDSأوQUOTA_EXCEEDED(كان422دونcode). - بيئة الاختبار ترفض تماما ما يرفضه الإنتاج: نوع الملفات المرفوعة وحجمها؛ والنصوص تُقصّ بدل رفضها؛ وقيم
lengthوaspectوlanguageغير المعروفة للفيديو تعود إلى الافتراضي؛ ورموز المنشور الإعلاني لا تميّز حالة الأحرف؛ ومسودة دونtype. ومحاكاة نقص الرصيد ترد بالرمزINSUFFICIENT_FUNDSالذي يرسله الإنتاج. - البوابة نفسها تقصّ
limitوpageإلى النطاق (GET /chat/history?limit=500كان يرد400؛ وlimit=0كان يعطي 20 بدل 1).
2026-10-03: الإصدار 1.11
أُضيف:
- نتائج المهام تحمل الحقول التي تعرضها لوحة التحكم: حزمة المحتوى والنصوص والفيديو
progressوmasterProfile(الإطار القصصي الذي بُنيت عليه النصوص والتعليق الصوتي) وerrorللمهمة الفاشلة؛ الصورmetadata.error؛ المخططrooms[].stableوrooms[].placementوsourceFileId. - يمكن للمتصفحات (CORS) قراءة الترويسات
RateLimit-*وRetry-AfterوGrem-SandboxوX-Request-IdوContent-Range.
تغيّر:
- Webhooks: مفتاح الاختبار ينشئ ويدير عناوين بيئة الاختبار فقط؛ وهذه لا تتلقى إلا أحداث مهام بيئة الاختبار، والعناوين الفعلية لا تتلقاها أبدا.
limitوpageخارج المدى يُردّان إليه بدلا من400؛ وkindفيGET /objectsلا يتأثر بحجم الأحرف؛ وroomsقد تكون كسرية.Idempotency-Keyيرتبط بمفتاح API والطريقة والمسار الفعلي (POST /objects/propertyوPOST /objects/rentalعمليتان مختلفتان). بعد انتهاء المهلة يحجز إنشاء العقار والعميل المحتمل المفتاح 15 دقيقة مثل الأدوات؛ والطلب الذي لم يصل إلى الخدمة يحرر المفتاح.text/generate: تُقصcustomDirectionإلى 500 حرف.- SDK 1.5.1: الرد
503على الكتابة يُعاد فقط معIdempotency-Key؛ ولا يُنتظرRetry-Afterأطول من 30 ثانية؛ وmaxRetriesحده الأقصى 10؛ وAbortSignalالخاص بك يلغي الانتظار؛ ومعرّفات الرسائل تعمل في Node 18.
أُصلح:
- بيئة الاختبار تعمل كالإنتاج: فحص حقول
multipartوحقول التقرير حسب الفئة وقيم تدفئة المنزل وقيمapartmentTypeالتجارية والمجمعات؛ الملفات فقط للمهام المكتملة، على مسار أداتها ومع معرّفات عناصر معروفة؛Grem-Sandboxأيضا في الردود الصادرة قبل فحص المفتاح؛Grem-Simulateلا يتأثر بحجم الأحرف. - دون مفتاح، تعيد معاملات الاستعلام غير الصالحة
401أولا. - مفتاح الوكالة المرتبط بوكيل لم يعد يقرأ المهام التي بدأت بمفتاح الوكالة العام.
- عناوين webhook المحفوظة سابقا بمنفذ آخر تستمر في تلقي التسليمات.
Rangeغير القابل للتلبية يعيد416بدلا من404؛ ويُقبل مستند مراجعة التقرير حتى 40 ميغابايت.
2026-10-03: الإصدار 1.10
أُضيف:
- رمز الخطأ
conflict(409): المورد في حالة لا تسمح بالإجراء (الأخطاء). - حقول العبارة الختامية للفيديو في
POST /video/create:ctaMode،ctaIntent،ctaText،ctaMarket؛ وخياراتGET /video/endingsتحملintentوtext. GET /works: المرشحانfromوto.- SDK 1.5.0: الخيار
maxRetries؛ يُعاد429و503بعدRetry-After.
تغيّر:
- معاملات الاستعلام تُفحص: المعامل المعروف بقيمة غير صالحة يعيد
400 validationمع اسم الحقل. - Webhooks:
httpsعلى المنفذ 443 فقط، دون بيانات دخول في URL؛ والعنوان الحادي عشر يعيد422؛ وتُدار Webhooks الوكالة بمفتاح الوكالة كلها فقط. Idempotency-Keyيرتبط بمفتاح API وبالعملية؛ وبعد انتهاء مهلة أداة يبقى المفتاح محجوزا 15 دقيقة.- الرفض لأسباب مالية (الحصة، الدين، الاستخدام العادل، الرصيد) هو
402 insufficient_fundsمعcode. - مفتاح الوكيل في الوكالة يرى مهامه وملفاته فقط.
- تنزيل الملفات يُحسب ضمن حد المعدل.
أُصلح:
- كل خطأ، بما فيه الجسم الكبير جدا أو التالف، يصل بصيغة RFC 9457
application/problem+json؛ والجسم الذي يتجاوز الحد يعيد413 payload_too_large. - حقل الفيديو
endingلم يكن يُقرأ أبدا؛ استخدمctaIntentأوctaText. - SDK:
simulateمع مفتاح حقيقي يرمي خطأ بدلا من تنفيذ الاستدعاء.
2026-10-03: الإصداران 1.8-1.9
أُضيف:
- العقارات المماثلة:
estimate.analogsفي التقييم السريع، وanalogsفي التقرير الكامل، وcompsفي تقدير الإيجار - كما في لوحة التحكم وملف PDF. - حقول المهام المكتملة موصوفة بالكامل: أرقام التقرير بأسمائها الحقيقية (
potPrice،priceRangeLow،priceRangeHigh، …)، ومراجعة التقرير، والمخطط، والصورة، والنشرة، والمسودة. - SDK 1.4.0: النوع
Analog.
تغيّر:
- ردود الأدوات تحمل الحقول الموصوفة فقط؛ الحقول الداخلية التي كانت تتسرب لم تعد تُعاد.
- الأداة التي يُظهرها
GET /tools/statusغير متاحة تردّ503 service_unavailableقبل أي خصم (سابقًا فقط حزمة المحتوى والنصوص والفيديو). - رد تأكيد مراجعة التقرير يحمل حقول المهمة فقط (
jobId،state،status)؛ ولم يعد فيه_idالقديم.
أُصلح:
- فيديو الأفاتار:
artifactsيحوي المعرّفات اللازمة لرابط التنزيل. checkIn/checkOutللإيجار موصوفان كساعة من اليوم.
2026-10-02: الإصدار 1.7
أُضيف:
- بيئة الاختبار: مفاتيح الاختبار (
gsk_test) تحاكي الأدوات دون خصم؛ والترويسةGrem-Simulateتختار النتيجة. estimate.confidenceScoreفي التقييم السريع.
تغيّر:
- الاستدعاءات التي تشغّل أداة تنتظر حتى 5 دقائق بدلا من 60 ثانية.
- التقييم السريع المعاد بالمفتاح
Idempotency-Keyنفسه يعيد النتيجة الجاهزة دون خصم ثان، بما في ذلك بعد انتهاء المهلة.
أُصلح:
- كان
estimate.confidenceفي التقييم السريع دائماnull. - لم تعد ردود المخطط تحتوي على حقول داخلية.
GET /objectsدونkindوحالات رفض العقارات والعملاء المحتملين تشرح الآن السبب فيdetail.
2026-10-02: الإصدار 1.6
تغيّر:
- كل رد مهمة يحتوي على الحقل نفسه
jobId. الأسماء السابقةidو_idوcontentGenJobIdما زالت تُعاد لكنها مهملة. - SDK 1.2.0: الحقل
Job.jobIdموجود دائما.
2026-10-02: الإصدارات من 1.2 إلى 1.5
أُضيف:
GET /voices،GET /avatar/avatars،GET /video/music،GET /video/endings: معرّفات للأدوات (البيانات المرجعية).GET /tools/status: إتاحة الأدوات؛GET /works: سجل الأعمال.POST /flyer/create: النشرة الشخصية، النطاقtools:flyer.POST /valuation/review/jobs/{id}/confirm: تأكيد بيانات مراجعة التقرير.- الحقل
stateفي كل رد مهمة. - في الأخطاء: الحقلان
codeوerrors، والرموزforbiddenوpayload_too_largeوservice_unavailable. - في وصف API: مخططات كاملة للطلب والرد لكل أداة، وعقد كتابة العقارات الكامل لكل نوع، وفئة الفوترة لكل عملية (
x-grem-billing)، وقائمة النطاقات والأحداث. - توثيق المعاملين
scope(العقارات) وpool(العملاء المحتملون).
تغيّر:
- الرفض بسبب نقص البيانات (مثلا نصوص دون وصف أو مدينة) صار
422 business_ruleمع سبب ورمز. كان سابقا502 provider_error. - الرفض بسبب صلاحيات على مورد صار
403 forbiddenمع سبب. كان سابقا500. - التسليم التجريبي لـ webhook الخاص بالأدوات صار بشكل التسليم الحقيقي نفسه:
{ jobId, status, state }.
أُصلح:
- مفاتيح الوكالة تعمل مع كل الأدوات والمحادثة وتنزيل الملفات.
- مراجعة التقرير والمخطط: حالة المهمة متاحة بالمعرّف الوارد في الرد، وتصل webhooks.
- تنزيل ملفات حزمة المحتوى والنصوص والفيديو متاح لمالك المهمة فقط.