نظرة عامة
واجهة REST للشركات التي اعتمد حسابها. تعرض الباقات، وتقرأ رصيد الشركة، وترسل التحقق من الهوية، وتطلب البطاقات وتديرها. الطلبات والردود JSON عبر HTTPS.
https://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 ثانية:
| الباقة | طلب في الدقيقة |
|---|---|
| Startup | 60 |
| Enterprise | 300 |
| Premium | 300 |
عند التجاوز يعيد المسار 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
}الرصيد
رصيد حساب الشركة المرتبط بالمفتاح، بالدولار الأمريكي. الرسوم وتمويل البطاقات يُخصمان من هذا الرصيد.
المعاملات
لا معاملات لهذا المسار.
curl "https://api.paymore.io/v1/balance" \
-H "X-API-Key: pm_live_xxx"رد
{
"balance": 1500,
"currency": "USD"
}بيانات الحساب
بيانات حساب الشركة المرتبط بالمفتاح.
المعاملات
لا معاملات لهذا المسار.
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"
}
}العمليات
سجل حساب الشركة، الأحدث أولاً. المبالغ السالبة خصم. يمكن التصفية بمعامل type: deposit أو fee أو card_issuance أو card_funding أو kyc_fee أو subscription أو withdrawal أو refund. التصفح: limit من 1 إلى 100 (الافتراضي 50) و offset من 0 إلى 100000 (الافتراضي 0).
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| type | query | اختياري | string | deposit أو fee أو card_issuance أو card_funding أو kyc_fee أو subscription أو withdrawal أو refund. |
| limit | query | اختياري | integer | حجم الصفحة من 1 إلى 100. الافتراضي 50. |
| offset | query | اختياري | 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
}إرسال التحقق
ينشئ مستخدماً أو يعيد إرسال مستخدم موجود للمراجعة. الحقول المطلوبة: 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 | body | مطلوب | string | معرّفك لهذا الشخص. |
| first_name | body | مطلوب | string | الاسم الأول. |
| last_name | body | مطلوب | string | اسم العائلة. |
| body | مطلوب | string | البريد الإلكتروني. | |
| phone | body | مطلوب | string | رقم الهاتف. |
| country | body | مطلوب | string | رمز الدولة، مثل AE. |
| address | body | مطلوب | string | العنوان. |
| id_number | body | مطلوب | string | رقم الهوية. |
| dob | body | اختياري | string | تاريخ الميلاد بصيغة YYYY-MM-DD. |
| passport_number | body | اختياري | string | رقم جواز السفر. |
| document_type | body | اختياري | string | passport أو national_id أو driving_license. |
| document_front_base64 | body | اختياري | string | وجه المستند بصيغة base64. |
| document_back_base64 | body | اختياري | string | ظهر المستند بصيغة base64. |
| selfie_base64 | body | اختياري | 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"
}حالة التحقق
حالة مستخدم واحد. kyc_status إحدى القيم: none أو pending أو approved أو rejected.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| external_user_id | path | مطلوب | 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"
}
}قائمة المستخدمين
كل المستخدمين تحت حسابك، الأحدث أولاً. التصفية بمعامل kyc_status. نفس حدود limit و offset في قائمة العمليات.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| kyc_status | query | اختياري | string | none أو pending أو approved أو rejected. |
| limit | query | اختياري | integer | حجم الصفحة من 1 إلى 100. الافتراضي 50. |
| offset | query | اختياري | 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
}طلب بطاقة
يطلب بطاقة لمستخدم حالته approved. external_user_id مطلوب. card_type_id اختياري. يبدأ الطلب pending حتى يفعّله فريق PayMore. إذا كانت الباقة تتضمن رسم إصدار، يُخصم عند إنشاء الطلب.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| external_user_id | body | مطلوب | string | مستخدم حالته approved. |
| card_type_id | body | اختياري | 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}."
}قائمة البطاقات
بطاقات حسابك، الأحدث أولاً. الحالة إحدى: pending أو approved أو reviewing أو active أو rejected أو cancelled أو frozen أو disabled. التصفية بمعامل status. لا تعيد هذه القائمة رقم البطاقة ولا CVV.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| status | query | اختياري | string | pending أو approved أو reviewing أو active أو rejected أو cancelled أو frozen أو disabled. |
| limit | query | اختياري | integer | حجم الصفحة من 1 إلى 100. الافتراضي 50. |
| offset | query | اختياري | 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
}بطاقة واحدة
بطاقة واحدة. card_id معرف UUID. عندما تكون الحالة active فقط، يتضمن الرد آخر أربعة أرقام في card_last4 وتاريخ الانتهاء في card_expiry. رقم البطاقة الكامل و CVV لا يُعادان أبداً.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| card_id | path | مطلوب | 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"
}
}تمويل بطاقة
يضيف مبلغاً بالدولار إلى بطاقة active. المبلغ رقم موجب، ويُقرّب إلى سنتين، والحد لطلب واحد 10000. يُخصم من رصيد الشركة المبلغ زائد رسم التمويل في باقتك (الأكبر بين النسبة والحد الأدنى).
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| card_id | path | مطلوب | uuid | معرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة. |
| amount | body | مطلوب | 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
}سحب من بطاقة
يعيد مبلغاً من بطاقة active إلى رصيد الشركة. لا يُحسب رسم في هذا المسار. المبلغ لا يمكن أن يتجاوز رصيد البطاقة.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| card_id | path | مطلوب | uuid | معرف البطاقة الذي يعيده طلب البطاقة أو القائمة أو بطاقة واحدة. |
| amount | body | مطلوب | 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
}تجميد بطاقة
يجمّد بطاقة active. لا يحتاج جسم طلب. البطاقة المجمدة لا تُموَّل ولا يُسحب منها حتى تُفك.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| card_id | path | مطلوب | 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"
}إلغاء التجميد
يعيد بطاقة frozen إلى active. لا يحتاج جسم طلب.
المعاملات
| الاسم | المكان | إلزام | النوع | الوصف |
|---|---|---|---|---|
| card_id | path | مطلوب | 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"
}الباقات
يعيد جداول الرسوم بالدولار الأمريكي لباقات 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 من مكتبة بايثون القياسية.