tgpay cryptoAPI
crypto-payapitransferspayouts

مرجع الواجهة: التحويلات والشيكات

6 دقيقة قراءةآخر تحديث: 9 أكتوبر 2026

طرق صرف الأموال. يرسل التحويل الأموال من رصيد تطبيقك إلى محفظة مستخدم في تيليجرام، أو يحجزها حتى يفتح المستلِم الجديد البوت. أما الشيك فرابط لاستلام مبلغ تموّله مسبقًا. والقواعد المشتركة (المصادقة وبنية الاستجابة والمبالغ و spend_id) في صفحة مرجع واجهة التجار.

وتخضع طرق صرف الأموال الثلاث كلها لما يحدده وضع المدفوعات الصادرة في التطبيق: فالتطبيق الجديد يدفع لأي أحد منذ البداية؛ وإذا ضيّق المالك الوضع، فلا يُدفع إلا للمستلِمين المدرجين في القائمة (403 recipient_not_allowed) أو لا يُدفع لأحد أصلًا (403 payouts_disabled). والمالك هو من يضبط الوضع في التطبيق المصغّر؛ ولا تستطيع الواجهة ذلك. أما الأغراض التي يجوز الدفع مقابلها فتحددها شروط واجهة التجار.

transfer

POST /pay/api/transfer — الصلاحية payouts، والحد 30 في الدقيقة. يتلقى المستلِم المعروف المبلغ فورًا. أما إذا كان username غير معروف، فيُنشأ تحويل بحالة pending: تبقى الأموال محجوزة في الضمان حتى يفتح المستلِم البوت باسم المستخدم نفسه. تُعاد الأموال غير المستلمة إلى رصيد التطبيق بعد انقضاء مدة الصلاحية البالغة 30 يومًا (expires_at). تأكد من ظهور status: "returned" قبل احتسابها في سجلاتك. أرسل invite_url إلى المستلِم بنفسك، فالبوت لا يستطيع مراسلة من لم يشغّله من قبل. الحالة النهائية هي completed أو returned؛ اشترك في الويب هوك للأحداث transfer_completed و transfer_returned، أو استعلم دوريًا باستخدام getTransfers.

الوسيطالنوعإلزاميالمعنى
user_idعدد صحيحأحد الوسيطين فقط: user_id / usernameمعرّف المستلِم في تيليجرام؛ ويجب أن يكون مستخدمًا في التطبيق أصلًا
usernameنصأحد الوسيطين فقط: user_id / usernameاسم المستخدم للمستلِم، مع @ أو بدونها؛ والاسم غير المعروف ينشئ عملية دفع قيد الانتظار
assetنصنعمرمز العملة
amountنصنعمسلسلة عشرية موجبة؛ ويحدّه أيضًا الحد الأدنى والأقصى للتحويل الواحد لدى المنصة (تقدير بما يعادل الدولار الأمريكي بالأسعار الحالية)
spend_idنصنعممفتاح منع التكرار، من 1 إلى 64 حرفًا، فريد لكل عملية دفع
commentنصلاحتى 1024 حرفًا، ويظهر للمستلِم
disable_send_notificationمنطقيلاتمنع القيمة true إشعار المستلِم عند الدفع الفوري؛ أما استلام تحويل معلّق فيرسل إشعارًا رغم ذلك

والنتيجة هي كائن التحويل: transfer_id و hash و user_id و recipient_username و asset و amount و amount_minor و spend_id و comment و status (pending / completed / returned) و created_at و completed_at و expires_at و invite_url. قد تكون قيمة user_id هي null أثناء انتظار المستلِم الجديد، وتبقى قيمة completed_at هي null حتى يكتمل التحويل.

الأخطاء: 403 payouts_disabled / 403 recipient_not_allowed (وضع المدفوعات الصادرة)، و 404 user_not_found (المعرّف غير معروف أو المستلِم غير متاح)، و 400 invalid_recipient (اسم المستخدم للمستلِم غير صالح)، و 400 amount_too_small / 400 amount_too_big (خارج حدود التحويل الواحد)، و 409 insufficient_funds، و 400 unknown_asset، و 400 invalid_amount، وزوج spend_id: 409 idempotency_conflict / 409 idempotency_in_progress. إذا لم تحدد user_id ولا username، أو حددت كليهما، يعيد الطلب خطأ في الوسائط.

transferBatch

POST /pay/api/transferBatch — الصلاحية payouts، والحد 10 في الدقيقة. وهو امتداد للدفع الجماعي: حتى 100 تحويل في استدعاء واحد.

وسيط واحد: items — مصفوفة كل عنصر فيها مجموعة وسائط transfer كاملة (user_id أو username، و asset و amount و spend_id، ومعها comment و disable_send_notification اختياريين). ويجب أن تكون قيم spend_id فريدة داخل الدفعة، وإلا فشل الاستدعاء كله بـ 400 duplicate_spend_id قبل تنفيذ أي شيء. وقد يُرفض الطلب كله قبل أي عملية دفع أيضًا بسبب بنية عنصر غير صالحة أو وضع المدفوعات الصادرة للتطبيق أو حده اليومي. بعد قبول الطلب، تُعاد النتائج في result.items.

وتُسوَّى العناصر كلٌّ على حدة، بالترتيب — فالعنصر الفاشل لا يُلغي ما سواه. ويعيد الاستدعاء HTTP 200 مع ok: true حتى لو فشل بعض العناصر، فافحص كل عنصر دائمًا:

  • النجاح: {"ok": true, "spend_id": "…", "result": <transfer object>}
  • الفشل: {"ok": false, "spend_id": "…", "error": {"code": …, "name": "…"}} بأسماء الأخطاء نفسها في transfer المفرد.

وتتشارك عناصر الدفعة فضاء أسماء منع التكرار مع التحويلات المفردة: فإعادة إرسال الدفعة كلها — أو إعادة إرسال عنصر منها بوصفه transfer مفردًا بـ spend_id نفسه — تعيد النتيجة الأصلية بدل أن تدفع مرتين.

getTransfers

GET /pay/api/getTransfers — الصلاحية read. المرشِّحات: asset و transfer_ids (مفصولة بفواصل) و spend_id (مطابقة تامة — للبحث عن عملية دفع بمفتاحك أنت)، و status (pending / completed / returned)، إضافة إلى offset / count. تعيد {"items": [transfer, …]} بالأحدث أولًا.

createCheck

POST /pay/api/createCheck — الصلاحية checks، والحد 60 في الدقيقة. ينشئ افتراضيًا شيكًا لمرة واحدة من رصيد تطبيقك. يستطيع استلامه من يملك الرابط، أو المستخدم المحدد وحده. ينشئ الامتداد recipients قائمة مستلمين بمبلغ مستقل لكل منهم. يُحجز الإجمالي عند الإنشاء (ينتقل من available إلى onhold في getBalance). وتسري على إنشاء الشيكات حدود المبالغ والمدفوعات اليومية نفسها المطبّقة على التحويلات.

الوسيطالنوعإلزاميالمعنى
assetنصنعمرمز العملة
amountنصما لم يُضبط recipientsسلسلة عشرية موجبة؛ ومع recipients يُحسب الإجمالي من القائمة
pin_to_user_idعدد صحيحلالا يستلمه إلا صاحب هذا المعرّف في تيليجرام
pin_to_usernameنصلالا يستلمه إلا صاحب اسم المستخدم هذا (و @ اختيارية؛ ويُهمَل هذا الوسيط إذا ضُبط pin_to_user_id معه). ويجب أن يكون الاسم لمستخدم قائم في التطبيق
spend_idنصلامفتاح منع التكرار (امتداد) — استعمله
recipientsمصفوفةلاامتداد: من 1 إلى 100 عنصر، لكل منها user_id أو username وamount كسلسلة عشرية موجبة. لا يجتمع مع تخصيص الشيك لمستخدم واحد
passwordنصلاامتداد: كلمة مرور مطلوبة للاستلام، حتى 64 حرفًا
expires_inعدد صحيحلاامتداد: مدة الصلاحية بالثواني؛ إغفاله أو 0 يعني بلا انتهاء

والنتيجة هي كائن الشيك: check_id و hash و asset و amount و amount_minor و bot_check_url (رابط الاستلام على t.me) و status (active / activated) وpin_to_user_id وcreated_at وactivated_at وexpires_at وrecipients (قيمته null للشيك العادي؛ وإلا يحتوي كل عنصر على user_id وusername وamount وamount_minor وclaimed_at). يطلق كل استلام ويب هوك check_activated الاختياري؛ ويشمل استلام حصة من قائمة أيضًا activated_slot. يعيد انتهاء الصلاحية المتبقي غير المستلم؛ وقد يرسل انتهاء شيك القائمة حدث check_expired.

تعرض الاستجابة الحالية كل شيك لم يُستلم بالكامل بحالة status: "active"، حتى لو انتهت صلاحيته. راجع expires_at أيضًا، ولا تعتبر active وحدها دليلًا على إمكانية استلام الرابط.

الأخطاء: 403 payouts_disabled / 403 recipient_not_allowed (وضع المدفوعات الصادرة — ففي الوضع allowlist يجب إدراج كل مستلم محدد أو موجود في قائمة المستلمين)، و 400 unknown_asset و 400 invalid_amount و 404 user_not_found (اسم المستخدم المحدَّد لا يطابق أحدًا) و 409 insufficient_funds، وزوج spend_id.

deleteCheck

POST /pay/api/deleteCheck — الصلاحية checks. وسيط واحد: check_id. يلغي شيكًا نشطًا ويعيد المتبقي غير المستلم إلى رصيد تطبيقك؛ ويعيد true. الأخطاء: 404 check_not_found و 409 check_not_active (استُلم بالكامل أو انتهت صلاحيته أو حُذف).

getChecks

GET /pay/api/getChecks — الصلاحية read. المرشِّحات: asset و check_ids (مفصولة بفواصل) و status (active / activated)، إضافة إلى offset / count. تعيد {"items": [check, …]} بالأحدث أولًا؛ والشيكات المحذوفة لا تُعاد أبدًا.