نقاط النهاية
كل نقطة نهاية عامة في واجهة API لمنصة Kaleidr موثقة في قسم مستقل.
- عنوان URL الأساسي:
https://api.kaleidr.com/inference-api/b2b/v1 - بيانات الاعتماد: استخدم
Authorization: Bearer …أوX-Api-Key: …. من الخادم الخلفي، استخدم مفتاح خادم (kld_sk_live_…)، ومن المتصفح، استخدم رمز جلسة (kld_sess_live_…). لا يُقبل المفتاح القابل للنشر إلا عند تبادل الجلسة. راجع المصادقة والنطاقات. - أجسام الطلبات: تكون بصيغة JSON وترميز UTF-8. أرسل
Content-Type: application/jsonفي كل طلبPOST. الحد الأقصى لجسم الطلب هو 2 MiB، أو 5 MiB لنقاط النهاية/design/*. تُرفض الطلبات الأكبر برمز 413request_too_large. - الأخطاء: استجابات 4xx أو 5xx مصحوبة بجسم JSON كما هو موضح في الأخطاء. توجد نقطة نهاية واحدة تعلن الفشل برمز 200: راجع الاتجاهات.
تستخدم الأمثلة مفتاح خادم محفوظاً في متغير بيئة:
export KALEIDR_KEY="kld_sk_live_…"
ملخص
| نقطة النهاية | الغرض | النطاق | التكلفة |
|---|---|---|---|
POST /sdk/sessions | تبادل مفتاح قابل للنشر للحصول على جلسة | نطاق المنتج | تحميل خريطة واحد عند استخدام tile؛ وبخلاف ذلك مجانًا |
POST /sdk/share-sessions | تبادل معرّف خريطة منشورة للحصول على جلسة دردشة | لا يوجد | مجانًا |
POST /chat/control/stream | طرح سؤال وبث الإجابة مع الأماكن والإجراءات والمسارات | ai | أرصدة الذكاء الاصطناعي بحسب الرموز المستهلكة |
POST /chat/control/route | الحصول على اتجاهات بين إحداثيات معروفة | ai | مجانًا |
GET /retrieval/geocode/forward | تحويل النص المدخل إلى أماكن وعناوين | ai | أرصدة الذكاء الاصطناعي، رسم ثابت |
POST /spot | تحديد الموجود في نقطة: المكان وعنوانه ومناطقه ومحتواه اختياريًا | ai | أرصدة الذكاء الاصطناعي، رسم ثابت |
POST /spot/overview/stream | بث نبذة قصيرة عن عنصر من /spot | ai | أرصدة الذكاء الاصطناعي بحسب الرموز المستهلكة |
GET /retrieval/poi/enrich | مهملة، استخدم /spot. تفاصيل وصور مكان واحد | ai | أرصدة الذكاء الاصطناعي، رسم ثابت |
POST /chat/summary/stream | مهملة، استخدم /spot/overview/stream. بث ملخص عن مكان أو مبنى | ai | أرصدة الذكاء الاصطناعي بحسب الرموز المستهلكة |
POST /chat/button/stream | بث إجابة لسؤال واحد عن مكان واحد | ai | أرصدة الذكاء الاصطناعي بحسب الرموز المستهلكة |
POST /design/analyze | اقتراح تصميم خريطة لجدول بيانات | design | أرصدة الذكاء الاصطناعي، رسم ثابت |
POST /design/apply-direct | إنشاء طبقة خريطة من جدول ونمط محدد | design | مجانًا |
GET /design/styles, /design/samples, /design/themes | كتالوجات التصميم | design | مجانًا |
ترد تفاصيل الرسوم والحجوزات والحدود في الحصص وحدود المعدل.
قد تعيد أي نقطة نهاية وقت التشغيل الأخطاء المذكورة في الأخطاء المشتركة بين جميع نقاط نهاية وقت التشغيل. تذكر الأقسام التالية الأخطاء الخاصة بكل نقطة فقط.
POST /sdk/sessions
تستبدل هذه النقطة مفتاحًا قابلًا للنشر برمز جلسة قصير الأجل مرتبط بمصدر الطلب ومنتج واحد. يستدعيها SDK تلقائيًا عند كل تركيب يستخدم مفتاحًا. لا تستدعها بنفسك إلا إذا كنت تطوّر عميلًا خاصًا يعمل في المتصفح.
المصادقة: مفتاح قابل للنشر. مطلوب: ترويسة Origin (يضيفها المتصفح). التكلفة: تحميل خريطة واحد عندما تكون قيمة product هي tile؛ ولا شيء بخلاف ذلك.
| الحقل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
product | سلسلة نصية | نعم | إحدى القيم chat أو editor أو viewer أو tile. |
curl -s https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions \
-H "X-Api-Key: kld_pk_live_…" \
-H "Origin: https://www.example.com" \
-H "Content-Type: application/json" \
-d '{"product":"chat"}'
{
"session_token": "kld_sess_live_eyJhbGciOi…",
"expires_in": 900,
"product": "chat",
"basemap_style_id": null
}
يمثل basemap_style_id خريطة الأساس الافتراضية لمؤسستك، أو null إذا لم تُعيَّن خريطة افتراضية.
| الحالة | الرمز | متى يحدث |
|---|---|---|
| 401 | Invalid or missing API key | المفتاح غير معروف أو أُلغي أو انتهت صلاحيته. |
| 403 | publishable_key_required | أُرسل مفتاح خادم أو مفتاح قديم. |
| 403 | origin_required | ترويسة Origin مفقودة. |
| 403 | origin_not_allowed | المصدر غير موجود في قائمة المصادر المسموح بها للمفتاح. |
| 403 | product_not_allowed | قائمة منتجات المفتاح المسموح بها لا تشمل product. |
| 403 | tier_capability_not_allowed | خطتك لا تتضمن المنتج أو نطاقه. |
| 403 | insufficient_scope | أُنشئ المفتاح دون النطاق المطلوب للمنتج. |
| 422 | خطأ التحقق | product غير موجود أو ليس واحدة من القيم الأربع. |
| 429 | rate_limited | حدثت عمليات تبادل كثيرة لهذا المفتاح. Retry-After: 5. |
| 429 | map_load_quota_exceeded | خاص بـtile: استُنفد رصيد تحميل الخرائط. |
| 404 | sessions_disabled | الجلسات معطلة على المنصة. تواصل مع الدعم. |
| 503 | sessions_not_configured | خلل في المنصة. أعد المحاولة، واتصل بالدعم إن استمر. |
توضح المصادقة والنطاقات: تبادل الجلسة مدة الصلاحية وقاعدة التجديد وترتيب هذه الفحوص.
POST /sdk/share-sessions
تستبدل معرّف خريطة منشورة بجلسة دردشة، بحيث يمكن للزوار استخدام الدردشة دون تضمين مفتاح في الصفحة. يجب أن تفعّل لوحة Kaleidr AI الخاصة بالخريطة في Studio الميزة المطلوبة.
المصادقة: لا شيء. مطلوب: ترويسة Origin. التكلفة: لا شيء؛ وتُحمّل تكلفة مكالمات الدردشة بهذه الجلسة على مؤسسة مالك الخريطة.
| الحقل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
share_id | سلسلة نصية | نعم | من 1 إلى 128 حرفًا: حروف وأرقام و_ و-. |
feature | سلسلة نصية | لا | control_tower (الافتراضية)، وهي لوحة Ask Kaleidr الخاصة بالخريطة، أو popups، وهي محادثة AI في نوافذها المنبثقة. لا تُمنح كل منهما إلا ما دام مفتاحها مفعّلًا. |
curl -s https://api.kaleidr.com/inference-api/b2b/v1/sdk/share-sessions \
-H "Origin: https://www.example.com" \
-H "Content-Type: application/json" \
-d '{"share_id":"your-map-id","feature":"control_tower"}'
{ "session_token": "kld_sess_live_eyJhbGciOi…", "expires_in": 300, "product": "chat" }
| الحالة | الرمز | متى يحدث |
|---|---|---|
| 403 | origin_required | ترويسة Origin مفقودة. |
| 404 | not_found | لا توجد خريطة منشورة أو رابط مشاركة بهذا المعرّف، أو أُلغي نشر خريطة رابط المشاركة. |
| 403 | chat_disabled | لا يفعّل Kaleidr AI الخاص بالخريطة الميزة المطلوبة. |
| 403 | origin_not_allowed | الصفحة ليست ضمن النطاقات المسموح بها للخريطة. |
| 403 | owner_has_no_organization | مالك الخريطة غير تابع لمؤسسة. |
| 403 | tier_capability_not_allowed | خطة المالك لا تتضمن الدردشة. |
| 422 | خطأ التحقق | share_id مفقود أو يتضمن أحرفًا غير مسموح بها، أو feature ليست أيًّا من القيمتين. |
| 429 | rate_limited | عمليات تبادل كثيرة لهذه الخريطة أو من هذا العنوان. Retry-After: 5. |
| 404 | sessions_disabled | الجلسات معطلة على المنصة. |
| 503 | share_grant_unavailable, sessions_not_configured | خلل في المنصة. أعد المحاولة. |
راجع Kaleidr AI على خريطة منشورة.
POST /chat/control/stream
تتلقى هذه النقطة سؤالًا وتبث الإجابة نصًا أثناء كتابتها، مع الأماكن المذكورة وإحداثياتها وإجراءات الخريطة والمسارات. وهي نقطة النهاية التي تشغّل Kaleidr Chat.
المصادقة: مفتاح خادم أو رمز جلسة أو مفتاح قديم. النطاق: ai.
التكلفة: رصيد AI بحسب عدد الرموز التي استخدمتها الإجابة. الاستجابة: text/event-stream كما توضح مواصفات نقل SSE.
| الحقل | النوع | مطلوب | الافتراضي | ملاحظات |
|---|---|---|---|---|
messages | مصفوفة من { role, content } | لا | [] | المحادثة حتى الآن، من الأقدم إلى الأحدث، وتنتهي برسالة المستخدم الجديدة. يجب أن يكون role هو user أو assistant. تُتجاهل الرسائل بأي دور آخر، بما في ذلك system، وكذلك الرسائل التي يكون فيها content فارغًا. السؤال الذي تجيب عنه المنصة هو آخر رسالة user. حدود الحجم موضحة أدناه. |
session_id | سلسلة نصية | لا | يُنشأ تلقائيًا | معرّف المحادثة: من 1 إلى 128 حرفًا من الحروف والأرقام و_ و. و: و-. أرسل معرّفًا ثابتًا وكرره في كل تفاعل. عند إغفاله ينشئ الخادم معرّفًا للطلب ويعيده في حدثَي phase وstart. |
location | كائن { lat, lng } | لا | لا يوجد | الموضع الذي ينظر إليه المستخدم، أي مركز الخريطة. يُستخدم لفهم «بالقرب من هنا». |
map_zoom | رقم | لا | لا يوجد | مستوى تكبير الخريطة. |
lang | سلسلة نصية | لا | "en" | لغة الإجابة بعلامة BCP 47 مثل fr أو pt-BR. بحد أقصى 35 حرفًا. |
layout | سلسلة نصية | لا | لا يوجد | تخطيط viewer الذي تجري فيه المحادثة: "guide" ما دام viewer المضمَّن يعرض تخطيط الدليل؛ ويُحذف في غير ذلك. بحد أقصى 16 حرفًا. |
app_snapshot | كائن | لا | لا يوجد | مقبول لكنه غير ضروري؛ يُفضّل تركه. |
auto_actions | قيمة منطقية | لا | لا يوجد | مقبول لكنه غير ضروري؛ يُفضّل تركه. |
تُقبل الحقول غير المعروفة ولكن تُتجاهل. لا يوجد حقل لتعليمات النظ ام أو الشخصية أو الأدوات أو سياق مخصص من جانبك؛ يحمل الطلب المحادثة والموقع واللغة فحسب.
لا يحتفظ الخادم بنص المحادثة نيابة عنك. أرسل التبادلات السابقة ضمن messages في كل مرة، مع session_id نفسه.
session_id خاص بمؤسستك. تُحفظ حالة المحادثة قصيرة الأجل لكل مؤسسة على حدة، لذلك لا تستطيع مؤسسة أخرى تقرأ المعرّف نفسه الوصول إلى محادثتك أو تعديلها. داخل مؤسستك، امنح محادثة كل مستخدم نهائي معرّفًا فريدًا.
حدود الطلبات
أي طلب يتجاوز هذه الحدود يُرفض بالرمز 422 قبل توليد الإجابة، ولا تُفرض عليه رسوم. يكون المتن {"detail": "<code>"}.
| الحد | القيمة | الرمز |
|---|---|---|
عدد الرسائل في messages | 400 | too_many_messages |
طول content في الرسالة الواحدة | 64,000 حرف | message_too_long |
مجموع أطوال كل قيم content | 200,000 حرف | conversation_too_long |
session_id | من 1 إلى 128 حرفًا: حروف وأرقام و_ و. و: و- | invalid_session_id |
lang | 35 حرفًا | lang_too_long |
layout | 16 حرفًا | invalid_layout |
تُحتسب جميع الرسائل ضمن هذه الحدود، حتى الرسائل التي تُتجاهل. غالبًا ما تصل المحادثة الطويلة إلى حد الطول الإجمالي قبل حد عدد الرسائل؛ لذلك أرسل أحدث التفاعلات اللازمة واحذف الأقدم. راجع قراءة البث.
curl -N https://api.kaleidr.com/inference-api/b2b/v1/chat/control/stream \
-H "Authorization: Bearer $KALEIDR_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"session_id": "trip-42",
"messages": [{"role": "user", "content": "Where is the Louvre, and what is next to it?"}],
"location": {"lat": 48.8566, "lng": 2.3522},
"map_zoom": 12,
"lang": "en"
}'
يعطّل الخيار -N التخزين المؤقت لمخرجات curl لتظهر الإطارات عند وصولها. وهذه استجابة مختصرة بقيم توضيحية:
event: phase
data: {"type": "phase", "phase": "thinking", "session_id": "trip-42"}
: keep-alive
event: start
data: {"type": "start", "session_id": "trip-42", "purpose": "control"}
data: {"text": "The [[Louvre Museum]] is on the right bank of the Seine"}
event: place
data: {"name": "Louvre Museum", "coordinates": {"lat": 48.8606, "lng": 2.3376}, "category": "museum"}
data: {"text": ", with the [[Tuileries Garden]] directly to its west."}
event: place
data: {"name": "Tuileries Garden", "coordinates": {"lat": 48.8635, "lng": 2.3275}, "category": "park"}
event: early_actions
data: {"type": "early_actions", "actions": [{"type": "map.fitBounds", "payload": {"coordinates": [[2.3376, 48.8606], [2.3275, 48.8635]], "padding": 50, "maxZoom": 15, "duration": 1000}}], "places_count": 2, "is_partial": true}
event: end
data: {"type": "end", "full_text": "The [[Louvre Museum]] is on the right bank of the Seine, with the [[Tuileries Garden]] directly to its west.", "places": [{"name": "Louvre Museum", "coordinates": {"lat": 48.8606, "lng": 2.3376}, "category": "museum"}, {"name": "Tuileries Garden", "coordinates": {"lat": 48.8635, "lng": 2.3275}, "category": "park"}], "actions": [], "question_type": "…", "response_time": 6.4, "total_tokens": 3120}
event: quota
data: {"type": "quota", "product": "b2b", "meter": "b2b.tokens", "tier": "pro", "used": 184223, "limit": 5000000, "reset_at": "2026-11-01T04:00:00+00:00", "period": "month"}
| الحالة | الرمز | متى يحدث |
|---|---|---|
| 413 | request_too_large | جسم الطلب أكبر من 2 MiB. |
| 422 | خطأ التحقق |