JISR PARTNER API · v1

توثيق API لجهات الإحالة الشريكة

واجهة برمجية تتيح للجمعيات والجهات المتعاونة إحالة مستفيدين مباشرة إلى مزودي الدعم النفسي الأولي على منصة جسر — استعراض المزودين، حجز موعد باسم المستفيد، ومتابعة حالة الإحالة.

Base URL https://jisr.lifepulse.bh/api/v1

المصادقة

كل طلب يحتاج مفتاح API خاص بجهتكم، يُرسل كـ Bearer Token. المفتاح يُصدره فريق جسر لكم مرة واحدة — احفظوه بمكان آمن، لا يمكن استرجاعه لاحقًا (بس يمكن توليد مفتاح جديد يلغي القديم).

  1. قدّموا طلب شراكة عبر jisr.lifepulse.bh/partners/apply — يطلع لكم مفتاحكم فورًا، بس يبقى غير مُفعّل لين نراجع الطلب.
  2. يصلكم مفتاح بالشكل jisr_partner_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  3. أرفقوه بترويسة Authorization بكل طلب.
Authorization: Bearer jisr_partner_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

شارة "بدعم من جسر" — شرط أساسي للشراكة

أي جهة تستخدم هالـ API لازم تعرض شارة جسر بموقعها — بفوتر الموقع تحديدًا، نفس مكان شارات "trusted site" المعتادة. الشارة كود مستقل عن مفتاح الـ API — مايكشف أي بيانات حساسة، بس يربط زوّاركم بجسر ويأكد الشراكة.

  1. يوصلكم رمز شارة خاص بجهتكم من فريق جسر (شكله jisr-xxxxxxxxxxxxxxxx — مختلف عن مفتاح الـ API).
  2. الصقوا السطر التالي داخل فوتر الموقع (Footer) — نفس الفوتر يظهر بكل صفحات موقعكم، مو بس صفحة الإحالة.
  3. الشارة تظهر تلقائيًا مكان الكود بالضبط (الشعار + رابط لجسر)، وترسل إشارة بسيطة تأكد لفريقنا إنها فعلاً معروضة — بدون أي تتبع لزوّار موقعكم.
<script src="https://jisr.lifepulse.bh/js/partner-badge.js"
        data-jisr-partner="jisr-xxxxxxxxxxxxxxxx" async></script>
ⓘ

مهم: الشارة عنصر ثابت بالصفحة (inline) وليست عنصر عائم (floating) — لا تضيفوا لها أي تنسيق يخليها ثابتة فوق المحتوى أو زاوية الشاشة. مكانها الوحيد المعتمد هو فوتر الموقع.

ⓘ

فريق جسر يقدر يشوف حالة الشارة (ظاهرة / متوقفة / ما رُكّبت) لكل جهة من لوحة التحكم — استمرار الشراكة مشروط باستمرار ظهورها بالفوتر.

استعراض المزودين

قائمة مزودي الدعم النفسي الأولي النشطين حاليًا، مع التخصص والفئة المقبولة (ذكور/إناث/الكل).

GET /providers

يرجّع كل المزودين النشطين. استخدموا id الناتج لجلب فتراتهم المتاحة بالخطوة التالية.

مثال
# الطلب
curl https://jisr.lifepulse.bh/api/v1/providers \
  -H "Authorization: Bearer $TOKEN"
{
  "data": [
    {
      "id": 25,
      "name": "Fatema Matrook",
      "specialty": "طبيبة عامة",
      "bio": "...",
      "accepted_gender": "all"
    }
  ]
}
GET /providers/{id}/slots

الفترات المتاحة لمزود معيّن — غير محجوزة بعد، ضمن أفق زمني تحددونه.

معاملات المسار / الاستعلام
الاسمالنوعالوصف
idمسارمعرّف المزود من GET /providers
daysاختياريعدد الأيام القادمة للبحث فيها (افتراضي 14، أقصى 30)
مثال
curl "https://jisr.lifepulse.bh/api/v1/providers/25/slots?days=7" \
  -H "Authorization: Bearer $TOKEN"
{
  "data": [
    {
      "id": 1534,
      "start_at": "2026-09-04T10:00:00+03:00",
      "end_at": "2026-09-04T10:30:00+03:00"
    }
  ]
}

الإحالات

إنشاء إحالة يعني حجز الموعد فعليًا للمستفيد على الفترة المختارة — يصل إشعار للمزود فورًا بنفس آلية أي حجز عادي.

POST /referrals

ينشئ إحالة/حجز جديد باسم المستفيد على فترة محددة.

حقول الطلب
الاسمالنوعالوصف
nameمطلوباسم المستفيد
phoneمطلوببصيغة دولية كاملة، مثل +97300000000
provider_idمطلوبمن GET /providers
slot_idمطلوبمن GET /providers/{id}/slots
emailاختياري—
genderاختياريmale أو female — يُرفض لو ما يطابق فئة المزود المقبولة
reason_categoryاختيارينص حر يصف سبب الإحالة
مثال
curl -X POST https://jisr.lifepulse.bh/api/v1/referrals \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "رانيا",
    "phone": "+97339003940",
    "gender": "female",
    "provider_id": 25,
    "slot_id": 1534,
    "reason_category": "قلق"
  }'
// 201 Created
{
  "data": {
    "referral_id": 142,
    "status": "pending",
    "provider": "Fatema Matrook",
    "start_at": "2026-09-04T10:00:00+03:00"
  }
}
GET /referrals/{id}

متابعة حالة إحالة سبق إنشاؤها. يرجّع الحالة العامة فقط — بدون أي تفاصيل سريرية أو محتوى الجلسة.

مثال
curl https://jisr.lifepulse.bh/api/v1/referrals/142 \
  -H "Authorization: Bearer $TOKEN"
{
  "data": {
    "referral_id": 142,
    "status": "confirmed",
    "provider": "Fatema Matrook",
    "start_at": "2026-09-04T10:00:00+03:00",
    "created_at": "2026-08-28T09:12:00+03:00"
  }
}
قيم الحالة الممكنة
pendingبانتظار تأكيد المزود
confirmedمؤكد
completedتمت الجلسة
rejectedرفضها المزود
cancelledأُلغيت
no_showلم يحضر المستفيد

الأخطاء

كل خطأ يرجع بصيغة {"error": "..."} مع رمز حالة HTTP مناسب.

الرمزالسبب
401مفتاح API مفقود، غير صحيح، أو غير مُفعّل
404المزود أو الإحالة غير موجودة (أو تعود لجهة أخرى)
409الفترة المطلوبة انحجزت للتو من طرف ثاني
422بيانات ناقصة أو غير صالحة — التفاصيل بجسم الرد
429تجاوزتم الحد المسموح من الطلبات

حدود الاستخدام

افتراضيًا 60 طلب بالدقيقة لكل جهة، قابلة للتعديل حسب حجم استخدامكم — تواصلوا معنا لو احتجتوا رفعها.

ملاحظة مهمة حول السلامة والخصوصية

⚠

الإحالات عبر الـ API لا تمر بفحص الأزمات النفسية (تقييم مخاطر الانتحار/إيذاء النفس) اللي يمر فيه الحجز المباشر من موقع جسر.

يعني مسؤوليتكم كجهة محيلة التأكد إن حالة المستفيد مو طارئة قبل الإحالة. لو في أي مؤشر خطر، تواصلوا مباشرة مع فريق جسر أو الطوارئ بدل الإحالة العادية.