انتقل إلى المحتوى
PayMoreالمطورون

المطورون

اللغةEnglish

واجهة PayMore البرمجية

واجهة REST للشركات التي اعتمد حسابها. تعرض الباقات، وتقرأ رصيد الشركة، وترسل التحقق من الهوية، وتطلب البطاقات وتديرها. الطلبات والردود JSON عبر HTTPS.

  • REST
  • JSON
  • HTTPS
  • X-API-Key

العنوان الأساسي: https://api.paymore.io/v1

اطلب مفتاح وصول

المفتاح يصدره فريق PayMore بعد مراجعة الحساب. لا يوجد إصدار ذاتي. المفاتيح النشطة تظهر في بوابة الأعمال بعد إصدارها.

تُشغَّل PayMore من قبل Due Pay Limited (هونغ كونغ).

api.paymore.io
$ curl "https://api.paymore.io/v1/plans"
{
  "plans": [
    {
      "plan": "startup",
      "monthly_fee": 500,
      "card_issuance_fee": 10
    }
  ],
  "currency": "USD"
}

مقتطف من الرد الحي

ثلاث خطوات

  1. 01

    اطلب مفتاحاً

    راسل [email protected]. يرسل PayMore المفتاح بعد اعتماد الحساب. لا يوجد إصدار ذاتي.

  2. 02

    اطلب مساراً عاماً

    GET https://api.paymore.io/v1/plans يعيد جداول الرسوم بلا مفتاح.

  3. 03

    أرسل المفتاح

    ضع pm_live_xxx في الترويسة X-API-Key ثم اطلب GET /balance.

نظرة عامة

واجهة REST للشركات التي اعتمد حسابها. تعرض الباقات، وتقرأ رصيد الشركة، وترسل التحقق من الهوية، وتطلب البطاقات وتديرها. الطلبات والردود JSON عبر HTTPS.

GEThttps://api.paymore.io/v1عام

فهرس الخدمة

يعيد اسم الخدمة والإصدار وقائمة المسارات. نفس الجسم على GET https://api.paymore.io/ و GET https://api.paymore.io/v1/. الحقل status وصف للفهرس وليس ضمان تشغيل.

المعاملات

لا معاملات لهذا المسار.

curl "https://api.paymore.io/v1"

رد

{
  "name": "PayMore API",
  "version": "v1",
  "status": "operational",
  "base_url": "https://api.paymore.io/v1",
  "documentation": "https://paymore.io/developers",
  "endpoints": {
    "public": ["GET /plans"],
    "account": ["GET /balance", "GET /account", "GET /transactions"],
    "kyc": ["POST /kyc/submit", "GET /kyc/{external_user_id}", "GET /end-users"],
    "cards": [
      "POST /cards/issue",
      "GET /cards",
      "GET /cards/{card_id}",
      "POST /cards/{card_id}/fund",
      "POST /cards/{card_id}/unload",
      "POST /cards/{card_id}/freeze",
      "POST /cards/{card_id}/unfreeze"
    ]
  }
}

المصادقة

أرسل المفتاح في الترويسة X-API-Key. ترويسة Authorization: Bearer مقبولة أيضاً. المفتاح الحي يبدأ بـ pm_live_. المسارات العامة لا تحتاج مفتاحاً.

المفتاح يصل إلى رصيد الشركة. استخدمه من خادمك فقط. إذا انكشف، راسل PayMore لإلغائه.

curl "https://api.paymore.io/v1/balance" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "balance": 1500,
  "currency": "USD"
}

العنوان الأساسي

المسارات أدناه نسبة إلى هذا العنوان، ما لم يُذكر عنوان كامل.

https://api.paymore.io/v1

curl "https://api.paymore.io/v1"

رد

{
  "name": "PayMore API",
  "version": "v1",
  "status": "operational",
  "base_url": "https://api.paymore.io/v1",
  "documentation": "https://paymore.io/developers",
  "endpoints": {
    "public": ["GET /plans"],
    "account": ["GET /balance", "GET /account", "GET /transactions"],
    "kyc": ["POST /kyc/submit", "GET /kyc/{external_user_id}", "GET /end-users"],
    "cards": [
      "POST /cards/issue",
      "GET /cards",
      "GET /cards/{card_id}",
      "POST /cards/{card_id}/fund",
      "POST /cards/{card_id}/unload",
      "POST /cards/{card_id}/freeze",
      "POST /cards/{card_id}/unfreeze"
    ]
  }
}

الأخطاء

الخطأ جسم JSON فيه الحقل error. بعض الأخطاء تضيف حقولاً مثل required_fee أو limit_per_minute.

  • 400طلب غير صالح: حقول ناقصة، أو JSON غير صالح، أو مبلغ غير صالح.
  • 401المفتاح مفقود أو لا يبدأ بـ pm_live_، أو غير معروف، أو ملغى.
  • 402رصيد الشركة لا يغطي المبلغ أو الرسم.
  • 403حساب الشركة غير نشط، أو التحقق ليس approved، أو البطاقة ليست في الحالة المطلوبة.
  • 404المسار أو المستخدم أو البطاقة غير موجود. المسار المجهول يعيد available_endpoints.
  • 409حالة البطاقة لا تسمح بالتجميد أو إلغاء التجميد.
  • 429تجاوز حد الطلبات. انتظر 60 ثانية.
  • 500خطأ في الخادم. الجسم: Internal server error.
curl "https://api.paymore.io/v1/balance"

رد

{
  "error": "Missing or invalid API key. Use header X-API-Key or Authorization: Bearer pm_live_..."
}

حد الطلبات

الطلبات المصادق عليها تُحسب لكل شركة خلال 60 ثانية:

الباقةطلب في الدقيقة
Startup60
Enterprise300
Premium300

عند التجاوز يعيد المسار 429 مع Retry-After: 60 والجسم يتضمن limit_per_minute.

curl "https://api.paymore.io/v1/balance" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "error": "Rate limit exceeded. Retry after 60 seconds.",
  "limit_per_minute": 60
}

التصفح

القوائم (العمليات، المستخدمون، البطاقات) تقبل limit من 1 إلى 100 (الافتراضي 50) و offset من 0 إلى 100000 (الافتراضي 0).

curl "https://api.paymore.io/v1/transactions?limit=50&offset=0" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "transactions": [
    {
      "id": "c7a1e9d2-5b3f-4c8e-a6d1-0f2b4e8c9a71",
      "business_id": "3f1c2b7a-8d4e-4a61-9b0f-2e6d8c5a1f34",
      "type": "card_funding",
      "amount": -102,
      "description": "Card funding",
      "reference_id": null,
      "created_at": "2026-10-02T14:05:11.208Z"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

GET/balance#يتطلب مفتاحاً

الرصيد

رصيد حساب الشركة المرتبط بالمفتاح، بالدولار الأمريكي. الرسوم وتمويل البطاقات يُخصمان من هذا الرصيد.

المعاملات

لا معاملات لهذا المسار.

curl "https://api.paymore.io/v1/balance" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "balance": 1500,
  "currency": "USD"
}

GET/account#يتطلب مفتاحاً

بيانات الحساب

بيانات حساب الشركة المرتبط بالمفتاح.

المعاملات

لا معاملات لهذا المسار.

curl "https://api.paymore.io/v1/account" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "account": {
    "id": "3f1c2b7a-8d4e-4a61-9b0f-2e6d8c5a1f34",
    "company_name": "Example Ltd",
    "company_email": "[email protected]",
    "plan": "startup",
    "status": "active",
    "business_balance": 1500,
    "created_at": "2026-09-14T10:22:31.512Z"
  }
}

GET/transactions#يتطلب مفتاحاً

العمليات

سجل حساب الشركة، الأحدث أولاً. المبالغ السالبة خصم. يمكن التصفية بمعامل type: deposit أو fee أو card_issuance أو card_funding أو kyc_fee أو subscription أو withdrawal أو refund. التصفح: limit من 1 إلى 100 (الافتراضي 50) و offset من 0 إلى 100000 (الافتراضي 0).

المعاملات

الاسمالمكانإلزامالنوعالوصف
typequeryاختياريstringdeposit أو fee أو card_issuance أو card_funding أو kyc_fee أو subscription أو withdrawal أو refund.
limitqueryاختياريintegerحجم الصفحة من 1 إلى 100. الافتراضي 50.
offsetqueryاختياريintegerعدد الصفوف المتجاوَزة من 0 إلى 100000. الافتراضي 0.
curl "https://api.paymore.io/v1/transactions" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "transactions": [
    {
      "id": "c7a1e9d2-5b3f-4c8e-a6d1-0f2b4e8c9a71",
      "business_id": "3f1c2b7a-8d4e-4a61-9b0f-2e6d8c5a1f34",
      "type": "card_funding",
      "amount": -102,
      "description": "Card funding",
      "reference_id": null,
      "created_at": "2026-10-02T14:05:11.208Z"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

POST/kyc/submit#يتطلب مفتاحاً

إرسال التحقق

ينشئ مستخدماً أو يعيد إرسال مستخدم موجود للمراجعة. الحقول المطلوبة: external_user_id و first_name و last_name و email و phone و country و address و id_number. الحقول الاختيارية: dob (YYYY-MM-DD) و passport_number و document_type (passport أو national_id أو driving_license) و document_front_base64 و document_back_base64 و selfie_base64. إذا كانت باقتك تتضمن رسم تحقق، يُخصم من رصيد الشركة عند كل إرسال.

إذا كان رقم الهوية أو جواز السفر موجوداً مسبقاً تحت حسابك، قد يتضمن الرد has_duplicate_warnings: true.

المعاملات

الاسمالمكانإلزامالنوعالوصف
external_user_idbodyمطلوبstringمعرّفك لهذا الشخص.
first_namebodyمطلوبstringالاسم الأول.
last_namebodyمطلوبstringاسم العائلة.
emailbodyمطلوبstringالبريد الإلكتروني.
phonebodyمطلوبstringرقم الهاتف.
countrybodyمطلوبstringرمز الدولة، مثل AE.
addressbodyمطلوبstringالعنوان.
id_numberbodyمطلوبstringرقم الهوية.
dobbodyاختياريstringتاريخ الميلاد بصيغة YYYY-MM-DD.
passport_numberbodyاختياريstringرقم جواز السفر.
document_typebodyاختياريstringpassport أو national_id أو driving_license.
document_front_base64bodyاختياريstringوجه المستند بصيغة base64.
document_back_base64bodyاختياريstringظهر المستند بصيغة base64.
selfie_base64bodyاختياريstringصورة شخصية بصيغة base64.
curl -X POST "https://api.paymore.io/v1/kyc/submit" \
  -H "X-API-Key: pm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{  "external_user_id": "user_123",  "first_name": "Amina",  "last_name": "Hassan",  "email": "[email protected]",  "phone": "+971500000000",  "country": "AE",  "address": "Example tower",  "id_number": "784-1990-0000000-0",  "dob": "1990-01-15",  "document_type": "passport"}'

رد

{
  "success": true,
  "end_user_id": "550e8400-e29b-41d4-a716-446655440000",
  "external_user_id": "user_123",
  "kyc_status": "pending"
}

GET/kyc/{external_user_id}#يتطلب مفتاحاً

حالة التحقق

حالة مستخدم واحد. kyc_status إحدى القيم: none أو pending أو approved أو rejected.

المعاملات

الاسمالمكانإلزامالنوعالوصف
external_user_idpathمطلوبstringالمعرف الذي أرسلته عند إنشاء المستخدم.
curl "https://api.paymore.io/v1/kyc/user_123" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "user": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "external_user_id": "user_123",
    "first_name": "Amina",
    "last_name": "Hassan",
    "email": "[email protected]",
    "phone": "+971500000000",
    "kyc_status": "approved",
    "kyc_submitted_at": "2026-10-01T09:12:44.103Z",
    "kyc_reviewed_at": "2026-10-01T15:30:02.871Z"
  }
}

GET/end-users#يتطلب مفتاحاً

قائمة المستخدمين

كل المستخدمين تحت حسابك، الأحدث أولاً. التصفية بمعامل kyc_status. نفس حدود limit و offset في قائمة العمليات.

المعاملات

الاسمالمكانإلزامالنوعالوصف
kyc_statusqueryاختياريstringnone أو pending أو approved أو rejected.
limitqueryاختياريintegerحجم الصفحة من 1 إلى 100. الافتراضي 50.
offsetqueryاختياريintegerعدد الصفوف المتجاوَزة من 0 إلى 100000. الافتراضي 0.
curl "https://api.paymore.io/v1/end-users" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "end_users": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "external_user_id": "user_123",
      "first_name": "Amina",
      "last_name": "Hassan",
      "email": "[email protected]",
      "phone": "+971500000000",
      "kyc_status": "approved",
      "kyc_submitted_at": "2026-10-01T09:12:44.103Z",
      "kyc_reviewed_at": "2026-10-01T15:30:02.871Z",
      "created_at": "2026-10-01T09:12:44.103Z"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

POST/cards/issue#يتطلب مفتاحاً

طلب بطاقة

يطلب بطاقة لمستخدم حالته approved. external_user_id مطلوب. card_type_id اختياري. يبدأ الطلب pending حتى يفعّله فريق PayMore. إذا كانت الباقة تتضمن رسم إصدار، يُخصم عند إنشاء الطلب.

المعاملات

الاسمالمكانإلزامالنوعالوصف
external_user_idbodyمطلوبstringمستخدم حالته approved.
card_type_idbodyاختياريstringمعرف نوع البطاقة، اختياري.
curl -X POST "https://api.paymore.io/v1/cards/issue" \
  -H "X-API-Key: pm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{  "external_user_id": "user_123"}'

رد

{
  "success": true,
  "card_request_id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
  "status": "pending",
  "message": "Card request submitted. Our admin team will activate it and fill in card details. Check status via GET /cards/{card_id}."
}

GET/cards#يتطلب مفتاحاً

قائمة البطاقات

بطاقات حسابك، الأحدث أولاً. الحالة إحدى: pending أو approved أو reviewing أو active أو rejected أو cancelled أو frozen أو disabled. التصفية بمعامل status. لا تعيد هذه القائمة رقم البطاقة ولا CVV.

المعاملات

الاسمالمكانإلزامالنوعالوصف
statusqueryاختياريstringpending أو approved أو reviewing أو active أو rejected أو cancelled أو frozen أو disabled.
limitqueryاختياريintegerحجم الصفحة من 1 إلى 100. الافتراضي 50.
offsetqueryاختياريintegerعدد الصفوف المتجاوَزة من 0 إلى 100000. الافتراضي 0.
curl "https://api.paymore.io/v1/cards" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "cards": [
    {
      "id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
      "end_user_id": "550e8400-e29b-41d4-a716-446655440000",
      "card_type_id": null,
      "status": "active",
      "card_balance": 100,
      "daily_limit": null,
      "created_at": "2026-10-02T11:00:00.000Z",
      "updated_at": "2026-10-02T14:05:11.208Z",
      "end_user": {
        "external_user_id": "user_123",
        "first_name": "Amina",
        "last_name": "Hassan"
      }
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

GET/cards/{card_id}#يتطلب مفتاحاً

بطاقة واحدة

بطاقة واحدة. card_id معرف UUID. عندما تكون الحالة active فقط، يتضمن الرد آخر أربعة أرقام في card_last4 وتاريخ الانتهاء في card_expiry. رقم البطاقة الكامل و CVV لا يُعادان أبداً.

المعاملات

الاسمالمكانإلزامالنوعالوصف
card_idpathمطلوبuuidمعرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة.
curl "https://api.paymore.io/v1/cards/9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "card": {
    "id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
    "end_user_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "active",
    "card_balance": 100,
    "daily_limit": null,
    "created_at": "2026-10-02T11:00:00.000Z",
    "updated_at": "2026-10-02T14:05:11.208Z",
    "end_user": {
      "external_user_id": "user_123",
      "first_name": "Amina",
      "last_name": "Hassan"
    },
    "card_last4": "4242",
    "card_expiry": "10/29"
  }
}

POST/cards/{card_id}/fund#يتطلب مفتاحاً

تمويل بطاقة

يضيف مبلغاً بالدولار إلى بطاقة active. المبلغ رقم موجب، ويُقرّب إلى سنتين، والحد لطلب واحد 10000. يُخصم من رصيد الشركة المبلغ زائد رسم التمويل في باقتك (الأكبر بين النسبة والحد الأدنى).

المعاملات

الاسمالمكانإلزامالنوعالوصف
card_idpathمطلوبuuidمعرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة.
amountbodyمطلوبnumberمبلغ موجب بالدولار، يُقرّب إلى سنتين، والحد 10000.
curl -X POST "https://api.paymore.io/v1/cards/9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d/fund" \
  -H "X-API-Key: pm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{  "amount": 100}'

رد

{
  "success": true,
  "funded_amount": 100,
  "fee": 2,
  "new_card_balance": 100
}

POST/cards/{card_id}/unload#يتطلب مفتاحاً

سحب من بطاقة

يعيد مبلغاً من بطاقة active إلى رصيد الشركة. لا يُحسب رسم في هذا المسار. المبلغ لا يمكن أن يتجاوز رصيد البطاقة.

المعاملات

الاسمالمكانإلزامالنوعالوصف
card_idpathمطلوبuuidمعرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة.
amountbodyمطلوبnumberمبلغ موجب بالدولار. لا يمكن أن يتجاوز رصيد البطاقة. هذا المسار بلا رسم.
curl -X POST "https://api.paymore.io/v1/cards/9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d/unload" \
  -H "X-API-Key: pm_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{  "amount": 50}'

رد

{
  "success": true,
  "unloaded_amount": 50,
  "new_card_balance": 50
}

POST/cards/{card_id}/freeze#يتطلب مفتاحاً

تجميد بطاقة

يجمّد بطاقة active. لا يحتاج جسم طلب. البطاقة المجمدة لا تُموَّل ولا يُسحب منها حتى تُفك.

المعاملات

الاسمالمكانإلزامالنوعالوصف
card_idpathمطلوبuuidمعرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة.
curl -X POST "https://api.paymore.io/v1/cards/9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d/freeze" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "success": true,
  "card_id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
  "status": "frozen"
}

POST/cards/{card_id}/unfreeze#يتطلب مفتاحاً

إلغاء التجميد

يعيد بطاقة frozen إلى active. لا يحتاج جسم طلب.

المعاملات

الاسمالمكانإلزامالنوعالوصف
card_idpathمطلوبuuidمعرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة.
curl -X POST "https://api.paymore.io/v1/cards/9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d/unfreeze" \
  -H "X-API-Key: pm_live_xxx"

رد

{
  "success": true,
  "card_id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
  "status": "active"
}

GET/plans#عام

الباقات

يعيد جداول الرسوم بالدولار الأمريكي لباقات startup و enterprise و premium. لا يحتاج مفتاحاً. المثال يعرض شكل باقة startup. اطلب المسار للحصول على الأرقام الحالية للباقات الثلاث.

GET https://api.paymore.io/plans يعيد الجسم نفسه.

المعاملات

لا معاملات لهذا المسار.

curl "https://api.paymore.io/v1/plans"

رد

{
  "plans": [
    {
      "plan": "startup",
      "monthly_fee": 500,
      "card_issuance_fee": 10,
      "card_funding_fee_pct": 2,
      "card_funding_fee_min": 0.5,
      "monthly_maintenance_fee": 1,
      "decline_fee": 0.4,
      "crossborder_fee_pct": 2.5,
      "crossborder_fee_min": 0.5,
      "wallet_tokenization_fee": 1,
      "wallet_deposit_fee_pct": 3,
      "wallet_deposit_fee_min": 2,
      "wallet_withdrawal_fee": 5,
      "kyc_verification_fee": 1,
      "chargeback_fee": 30,
      "prepay_discount_6m": 0,
      "prepay_discount_1y": 0
    }
  ],
  "currency": "USD"
}

قريباً

لا توجد واجهة للتحويلات الدولية.

إشعارات webhook

لا ترسل PayMore إشعارات webhook، ولا يوجد توقيع لطلب وارد.

حزمة SDK

لا توجد حزمة SDK. الأمثلة تستخدم curl و fetch و urllib من مكتبة بايثون القياسية.