PassHive

PassHive API

أصدر بطاقات ولاء على Apple Wallet و Google Wallet من نظام الكاشير أو تطبيقك أو موقعك. العنوان الأساسي https://passhive.app/v1، والطلبات والردود بصيغة JSON.

التوثيق

أنشئ مفتاح من لوحة التحكم (مفاتيح API) وابعثه كـBearer token. المفتاح يظهر مرة وحدة، فخليه على السيرفر تبعك، وما تحطه بمتصفح أو تطبيق.

Authorization: Bearer ph_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

GET/v1/me

يرجع بيانات نشاطك وتصميم البطاقة والباقة.

العملاء والبطاقات

كل عميل إله بطاقة ولاء وحدة. أنشئ العميل، وبعدين ابعتله addToAppleWallet أو addToGoogleWallet (أو cardUrl، وهي صفحة فيها الزرين). البطاقة المحفوظة بتتحدث لحالها لما تتغير الأختام أو النقاط.

POST/v1/customers

الحقلالنوعملاحظات
nameنصبيظهر على البطاقة، لحد 60 حرف.
phoneنصاختياري، بالصيغة الدولية، وما بيتكرر بنفس النشاط.
externalIdنصاختياري، رقمك الخاص (رقم العميل بنظام الكاشير). إذا بعثت رقم موجود بيرجعلك نفس العميل.
branchIdنصاختياري. إذا الفرع موقف، بطاقاته بتوقف.

بيرجع 201 لعميل جديد، و200 مع "created": false إذا الرقم أو externalId موجود.

{
  "data": {
    "id": "cu_8f2c1e0b5a7d4c3b9e6f1a2d",
    "name": "Lina",
    "phone": "+962790000000",
    "externalId": "pos-4471",
    "branchId": "br_...",
    "stamps": 3,
    "stampTarget": 10,
    "points": 0,
    "pointsPerReward": null,
    "rewardsAvailable": 0,
    "rewardsClaimed": 1,
    "visits": 13,
    "status": "active",
    "cardUrl": "https://passhive.app/c/cu_....sig",
    "addToAppleWallet": "https://passhive.app/c/cu_....sig/apple.pkpass",
    "addToGoogleWallet": "https://passhive.app/c/cu_....sig/google",
    "createdAt": "2026-11-02T09:12:00.000Z",
    "updatedAt": "2026-11-02T10:40:00.000Z"
  }
}

GET/v1/customers?phone=+962790000000

GET/v1/customers?externalId=pos-4471

GET/v1/customers?limit=50&before=<next>

القائمة من الأحدث، واستعمل قيمة next للصفحة اللي بعدها.

GET/v1/customers/{id}

الأختام والنقاط والمكافآت

بطاقة الأختام بتستعمل /stamps، وبطاقة النقاط /points. لما تكمل البطاقة بتنضاف مكافأة والعداد بيبدأ من جديد، والعميل بيوصله إشعار على الجوال.

POST/v1/customers/{id}/stamps

{ "count": 1, "branchId": "br_..." }

POST/v1/customers/{id}/points

{ "points": 25 }

POST/v1/customers/{id}/redeem

بيستعمل مكافأة وحدة جاهزة، وبيرجع no_reward_available إذا ما في.

الرسائل

بيحط عرض على البطاقات المحفوظة. على iPhone بيظهر كإشعار من البطاقة، وعلى Android بتعرضه Google على البطاقة مع تنبيه. بدون customerId بيروح للكل. الحد 3 إرسالات باليوم لكل جمهور.

POST/v1/messages

{ "title": "Weekend offer", "body": "2 stamps for every coffee this Friday.", "customerId": null }

الفروع

مواقع الفروع بتنضاف للبطاقات (Apple لحد 10 مواقع، وبتظهر على شاشة القفل قريب من الفرع). الباقة بتحدد كم فرع ممكن يكون شغال.

GET/v1/branches

POST/v1/branches

{ "name": "Abdoun", "address": "Abdoun Circle, Amman", "lat": 31.9539, "lng": 35.8836 }

PATCH/v1/branches/{id}

{ "active": false }

الأخطاء والحدود

الأخطاء بترجع رقم حالة و{"error": "code"}.

الحالةالرمزالمعنى
400invalid_json، invalid_phone، invalid_amount، card_uses_pointsصحح الطلب.
401missing_api_key، invalid_api_keyتأكد من ترويسة Authorization.
402branch_limit_reachedكبّر الباقة أو وقف فرع.
404customer_not_foundرقم غلط أو تابع لنشاط ثاني.
429rate_limited600 طلب بالدقيقة لكل مفتاح، و 3 رسائل باليوم.