PayMore logo

المطورون

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

Developers

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

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

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

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

[email protected]

المصادقة

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

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

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

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

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

https://api.paymore.io/v1

الخدمة

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

فهرس الخدمة

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

رد · الحالة 200

{
  "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"
    ]
  }
}
GET/plansعام

الباقات

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

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

رد · الحالة 200

{
  "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"
}

الحساب

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

الرصيد

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

رد · الحالة 200

{
  "balance": 1500,
  "currency": "USD"
}
GET/accountيتطلب مفتاحاً

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

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

رد · الحالة 200

{
  "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).

رد · الحالة 200

{
  "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_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"
}

رد · الحالة 201

{
  "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.

رد · الحالة 200

{
  "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 في قائمة العمليات.

رد · الحالة 200

{
  "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_id": "user_123"
}

رد · الحالة 201

{
  "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.

رد · الحالة 200

{
  "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 لا يُعادان أبداً.

رد · الحالة 200

{
  "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. يُخصم من رصيد الشركة المبلغ زائد رسم التمويل في باقتك (الأكبر بين النسبة والحد الأدنى).

طلب

{
  "amount": 100
}

رد · الحالة 200

{
  "success": true,
  "funded_amount": 100,
  "fee": 2,
  "new_card_balance": 100
}
POST/cards/{card_id}/unloadيتطلب مفتاحاً

سحب من بطاقة

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

طلب

{
  "amount": 50
}

رد · الحالة 200

{
  "success": true,
  "unloaded_amount": 50,
  "new_card_balance": 50
}
POST/cards/{card_id}/freezeيتطلب مفتاحاً

تجميد بطاقة

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

رد · الحالة 200

{
  "success": true,
  "card_id": "9b2f6c1e-4a7d-4e2b-8c3f-1d5e7a9b0c2d",
  "status": "frozen"
}
POST/cards/{card_id}/unfreezeيتطلب مفتاحاً

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

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

رد · الحالة 200

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

حد الطلبات

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

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

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

الأخطاء

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

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

غير متاح بعد

لا ترسل PayMore إشعارات webhook، ولا توجد واجهة للتحويلات الدولية، ولا توجد حزمة SDK.