📡
SMS Numbers API v1.6.0
API متاح API Online

📡 SMS Numbers API

شراء أرقام التفعيل ونجوم وبريميوم تيليجرام والجلسات وخدمات الـ SMM، والاستعلام عن الرصيد والطلبات برمجيًا، وبالبيانات نفسها المستخدمة في البوت تمامًا. كل عمليات الشراء تدعم external_order_id لإعادة المحاولة بأمان دون تكرار الخصم. Buy activation numbers, Telegram Stars/Premium, sessions and SMM services, check your balance and orders programmatically — using the exact same data as the bot. Every purchase supports external_order_id for safe retries without double-charging.

BASE http://fi16.bot-hosting.cloud:25538
🔗
25+
API Endpoints API Endpoints
🔐
Bearer
طريقة المصادقة Authentication
⚡
120 / 20
قراءة / كتابة في الدقيقة لكل API Token reads / writes per minute per API Token
🔁
Idempotent
إعادة المحاولة بأمان Safe Retries
01

🔑 المصادقة 🔑 Authentication

حماية طلبات API باستخدام Bearer Token Protect API requests using a Bearer Token

يجب أن يتضمن كل طلب — عدا نقاط النهاية العامة (GET /v1/health، GET /v1/countries، GET /v1/services، GET /v1/sessions/countries، GET /v1/telegram/premium/prices، GET /v1/telegram/stars/price) — ترويسة Authorization على النحو التالي: Every request — except the public endpoints (GET /v1/health, GET /v1/countries, GET /v1/services, GET /v1/sessions/countries, GET /v1/telegram/premium/prices, GET /v1/telegram/stars/price) — must include an Authorization header:

Authorization: Bearer <api_token>
🔐 يمكنك الحصول على مفتاحك من داخل البوت: الإعدادات ← 🔑 APIKEY. 🔐 You can get your token inside the bot: Settings → 🔑 APIKEY.
🌐
قيّد مفتاحك بعناوين IP (اختياري)
  • من البوت: الإعدادات ← 🔑 APIKEY ← 🌐 الـ IP المسموح بيها (عنوان أو نطاق مثل 203.0.113.0/24).
  • أي طلب من عنوان آخر يُرفض بـ 403 IP_NOT_ALLOWED، فيصبح المفتاح المسروق بلا فائدة.
  • القائمة فارغة = المفتاح يعمل من أي مكان. وتُدار من البوت فقط حتى لا يغيّرها من سرق المفتاح.
Restrict your key to IP addresses (optional)
  • In the bot: Settings → 🔑 APIKEY → 🌐 Allowed IPs (an address or a range like 203.0.113.0/24).
  • Any request from another address is rejected with 403 IP_NOT_ALLOWED, so a stolen key is useless.
  • Empty list = the key works from anywhere. It is managed from the bot only, so a thief cannot change it.
02

🌍 العنوان الأساسي 🌍 Base URL

العنوان المستخدم لجميع الطلبات The base address used for all requests
http://fi16.bot-hosting.cloud:25538

⚠️ الاتصال هنا عبر HTTP دون تشفير، لذا لا تشارك مفتاحك مع أحد، ولا ترسله عبر شبكات عامة. ⚠️ This connection uses plain HTTP (unencrypted), so never share your token and avoid sending it over public networks.

03

⏱️ حدّ الطلبات ⏱️ Rate Limit

حدود الاستخدام لكل Token ولكل IP Limits per token and IP address
🔎 120/min

القراءة (طلبات GET مثل الأرصدة والطلبات والأكواد) لكل مفتاح في الدقيقة. Reads (GET requests such as balance, orders and codes) per token per minute.

🛒 20/min

الشراء والتعديل (طلبات POST) لكل مفتاح في الدقيقة، وهو أضيق عمدًا لحماية رصيدك. Purchases and writes (POST requests) per token per minute. It is intentionally tighter to protect your balance.

🌐 300 · 60 /min

لكل عنوان IP في الدقيقة: 300 للقراءة و60 للشراء. Per IP address per minute: 300 reads and 60 writes.

📈
تحتاج حدًا أكبر؟
  • الحدود قابلة للتخصيص لكل مفتاح، تواصل مع الدعم.
  • قلّل الاستعلام المتكرر باستخدام Webhooks.
  • الترويسات X-RateLimit-* تعرض دائمًا الحد المطبّق عليك فعلًا.
Need a higher limit?
  • Limits can be customised per key, contact support.
  • Cut repeated polling with Webhooks.
  • The X-RateLimit-* headers always show the limit actually applied to you.

عند تجاوز الحد يُعاد الرمز 429 مع ترويسة Retry-After تحدد عدد الثواني التي يجب أن تنتظرها قبل إعادة المحاولة. كما يحمل كل رد ترويسات تساعدك على ضبط معدّل طلباتك قبل الوصول للحد: When the limit is exceeded you get 429 with a Retry-After header telling you how many seconds to wait before retrying. Every response also carries headers that let you pace your requests before hitting the limit:

Header المعنىMeaning
X-RateLimit-Limit الحد الأقصى المطبّق عليك الآن (حد المفتاح أو حد الـ IP، أيهما أضيق) The limit currently applied to you (token or IP limit, whichever is tighter)
X-RateLimit-Remaining عدد الطلبات المتبقية لك قبل الوصول للحد Requests you have left before hitting the limit
X-RateLimit-Reset عدد الثواني حتى يتحرر مكان لطلب جديد Seconds until a slot frees up for a new request
Retry-After مع الرد 429 فقط: ثواني الانتظار قبل إعادة المحاولة (وتظهر أيضًا في error.retry_after) On 429 only: seconds to wait before retrying (also in error.retry_after)
HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 23
04

📚 نقاط النهاية 📚 Endpoints

الأرقام والرصيد والطلبات Numbers, balance and orders
💡
قاعدتان تسهّلان التكامل
  • المبالغ نصوص مثل "12.50" (حتى 4 خانات عشرية). استخدم مكتبة decimal لا float.
  • الأسماء ثنائية اللغة: name بالعربية وname_en بالإنجليزية (وكذلك description_en وtitle_en).
Two rules that make integration easy
  • Amounts are strings like "12.50" (up to 4 decimals). Use a decimal library, not float.
  • Bilingual names: name is Arabic and name_en is English (same for description_en and title_en).
GET /v1/balance 🔒 يتطلب مفتاحًا 🔒 Token required

يعيد رصيد حسابك الحالي. Returns your current account balance.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/balance
{
  "ok": true,
  "balance": "125.50",
  "currency": "USD"
}
balance نص بخانتين عشريتين دائمًا (وليس رقمًا)، وcurrency هي عملة الحساب. balance is always a string with two decimals (not a number), and currency is the account currency.
GET /v1/usage 🔒 يتطلب مفتاحًا 🔒 Token required

إحصائيات استخدام حسابك للـ API: عدد وقيمة الطلبات (الإجمالي وآخر 24 ساعة)، وعدد الطلبات والأخطاء اليوم (اليوم بتوقيت UTC). الخطأ هو أي رد حالته 400 أو أكثر. الأوردرات المحسوبة هي التي تمت عبر الـ API فقط. Usage statistics for your API account: number and value of orders (all-time and last 24 hours), plus today's request and error counts (day = UTC). An error is any response with status 400 or higher. Only orders placed through the API are counted.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/usage
{
  "balance": "113.00",
  "currency": "USD",
  "apiOrdersTotal": 47,
  "apiSpendTotal": "582.30",
  "apiOrders24h": 5,
  "apiSpend24h": "62.50",
  "requestCountToday": 128,
  "errorCountToday": 3
}
GET /v1/health 🌐 عامة (دون مفتاح) 🌐 Public (no token)

فحص صحة الخدمة. يعيد 200 عندما يعمل الـ API، و503 عندما يكون متوقفًا للصيانة. Service health check. Returns 200 when the API is running and 503 when it is stopped for maintenance.

curl http://fi16.bot-hosting.cloud:25538/v1/health
{ "ok": true, "service": "partner-api", "version": 1 }
{ "ok": false, "service": "partner-api", "version": 1, "error": "maintenance" }
GET /v1/countries 🌐 عامة (دون مفتاح) 🌐 Public (no token)

يعيد قائمة الدول المتاحة للشراء حاليًا مع أسعارها. Returns the countries currently available for purchase, with their prices.

curl http://fi16.bot-hosting.cloud:25538/v1/countries
[
  {
    "country_code": "US",
    "country_name": "United States",
    "flag": "🇺🇸",
    "price": "1.50"
  }
]
GET /v1/orders 🔒 يتطلب مفتاحًا 🔒 Token required

يعيد سجل طلباتك (أرقام ومنتجات) من الأحدث إلى الأقدم، بترقيم صفحات. المعامل limit إجباري (من 1 إلى 200)، وإن أُرسل الطلب بدونه يُرجِع الخطأ LIMIT_REQUIRED (HTTP 400). المعامل offset اختياري (الافتراضي 0) لجلب الصفحات التالية، مثال: ?limit=50&offset=50 للصفحة الثانية. الإجمالي في الترويسة X-Total-Count، و X-Has-More: true إن وُجدت صفحة تالية. إذا سبق جلب كود الرقم فإنه يظهر في الحقل code ومعه password إن وُجدت. Returns your order history (numbers and products), newest first, paginated. The limit parameter is required (1 to 200); a request without it gets LIMIT_REQUIRED (HTTP 400). offset is optional (default 0) for the next pages, e.g. ?limit=50&offset=50 for page two. The total is in the X-Total-Count header, and X-Has-More: true means another page exists. If the number's code was already fetched, it appears in code with password if present.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://fi16.bot-hosting.cloud:25538/v1/orders?limit=50"
[
  {
    "id": 118,
    "type": "number",
    "title": "United States",
    "title_en": "United States",
    "price": "1.50",
    "discount": "0.00",
    "status": "completed",
    "created_at": "2026-09-19T10:15:00+00:00",
    "phone": "+1555...",
    "code": "482913",
    "password": null
  }
]
POST /v1/numbers/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يشتري رقم تفعيل لدولة محددة، ويُخصم السعر من رصيدك فورًا. إذا فشلت العملية قبل التنفيذ أو رُفضت بوضوح، يُعاد الرصيد تلقائيًا. أما إذا لم تتأكد النتيجة (انتهاء مهلة أو خطأ في المعالجة)، فلا يُعاد الرصيد تلقائيًا: يُراجَع الطلب يدويًا (الرمز ORDER_UNDER_REVIEW). Buys an activation number for a given country. The price is deducted immediately. If the purchase fails before execution, or is clearly rejected, your balance is refunded automatically. If the result is unknown (timeout or a processing error), the balance is not refunded automatically: the order goes to manual review (ORDER_UNDER_REVIEW).

🔁 external_order_id اختياري لكن يُنصح به بشدة: معرّف فريد من عندك لهذا الطلب. عند إعادة نفس الطلب بنفس القيمة، تحصل على نفس النتيجة القديمة دون خصم إضافي (idempotent_replay: true). استخدام نفس القيمة مع دولة مختلفة يعيد 409. 🔁 external_order_id is optional but strongly recommended. Retrying with the same value returns the original result without an extra charge (idempotent_replay: true). Reusing it with another country returns 409.
curl -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country_code": "US", "external_order_id": "shop-order-1001"}' \
  http://fi16.bot-hosting.cloud:25538/v1/numbers/buy
{
  "order_id": 118,
  "order_type": "number",
  "country_code": "US",
  "phone": "+1555xxxxxxx",
  "price": "1.50",
  "status": "pending",
  "external_order_id": "shop-order-1001",
  "idempotent_replay": false
}
GET /v1/orders/{order_id}/code?order_type=number 🔒 يتطلب مفتاحًا 🔒 Token required

يجلب كود التفعيل لطلب معيّن. قيمة order_type إما number (الافتراضية) أو manual_number. إذا لم يصل الكود بعد فسيُعاد 404؛ أعد الطلب بعد بضع ثوانٍ. وبمجرد وصول الكود يُحفظ، فإذا استدعيت الطلب نفسه مرة أخرى أعاد الكود نفسه. ويكون password قيمته null إذا لم يكن للرقم كلمة مرور. Fetches the activation code for a specific order. order_type is either number or manual_number. If the code has not arrived yet you get 404; retry after a few seconds. Once the code arrives it is stored and repeated requests return the same code.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://fi16.bot-hosting.cloud:25538/v1/orders/118/code?order_type=number"
{
  "order_id": 118,
  "phone": "+1555xxxxxxx",
  "code": "482913",
  "password": null,
  "status": "completed"
}
05

⭐ نجوم وبريميوم تيليجرام ⭐ Telegram Stars & Premium

شراء النجوم والاشتراكات برمجيًا Programmatic Stars and Premium purchases
GET /v1/telegram/premium/prices 🌐 عامة (دون مفتاح) 🌐 Public (no token)

يعيد سعر اشتراك تيليجرام مميز لكل مدة متاحة. Returns the price of Telegram Premium for every available duration.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/telegram/premium/prices
[
  { "duration_months": 3, "price": "15.00" },
  { "duration_months": 6, "price": "22.00" },
  { "duration_months": 12, "price": "38.00" }
]
GET /v1/telegram/stars/price?quantity=100 🌐 عامة (دون مفتاح) 🌐 Public (no token)

يحسب سعر كمية معيّنة من نجوم تيليجرام قبل الشراء. Calculates the price of a given quantity of Telegram Stars before buying.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://fi16.bot-hosting.cloud:25538/v1/telegram/stars/price?quantity=100"
{ "quantity": 100, "price": "2.00" }
POST /v1/telegram/stars/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يشتري نجوم تيليجرام ويرسلها لليوزر المحدد. نفس آلية الخصم الذري وقاعدة الاسترجاع (تلقائي عند الرفض المؤكد فقط، ومراجعة يدوية عند عدم تأكد النتيجة) و external_order_id بتاعة /v1/numbers/buy. Buys Telegram Stars and sends them to the given username. Same atomic deduction, refund rule (automatic only on a clear rejection, manual review when the result is unknown) and external_order_id mechanics as /v1/numbers/buy.

curl -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_username": "someuser", "quantity": 100, "external_order_id": "shop-stars-1"}' \
  http://fi16.bot-hosting.cloud:25538/v1/telegram/stars/buy
{
  "order_id": 45,
  "order_type": "stars",
  "target_username": "someuser",
  "quantity": 100,
  "duration_months": null,
  "price": "2.00",
  "status": "processing",
  "external_order_id": "shop-stars-1",
  "idempotent_replay": false
}
اليوزر بدون @، ومن 5 إلى 32 حرفًا/رقمًا/underscore. الكمية بين 50 و 50000. Username without @, 5–32 letters/digits/underscore. Quantity between 50 and 50000.
POST /v1/telegram/premium/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يشتري اشتراك تيليجرام مميز لليوزر المحدد. نفس آلية /v1/numbers/buy تمامًا. Buys a Telegram Premium subscription for the given username. Same mechanics as /v1/numbers/buy.

curl -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_username": "someuser", "duration_months": 3, "external_order_id": "shop-prem-1"}' \
  http://fi16.bot-hosting.cloud:25538/v1/telegram/premium/buy
{
  "order_id": 46,
  "order_type": "premium",
  "target_username": "someuser",
  "quantity": null,
  "duration_months": 3,
  "price": "15.00",
  "status": "processing",
  "external_order_id": "shop-prem-1",
  "idempotent_replay": false
}
duration_months لازم يكون 3 أو 6 أو 12. duration_months must be 3, 6, or 12.
GET /v1/telegram/orders/{order_id} 🔒 يتطلب مفتاحًا 🔒 Token required

يعيد حالة طلب نجوم/بريميوم. إن لم تكن الحالة نهائية بعد، يحاول تحديثها مباشرةً. الحالات: processing، completed، failed، under_review (تحت المراجعة اليدوية؛ الرصيد لم يُعَد بعد)، refunded (أُعيد الرصيد بعد المراجعة). Returns the status of a Stars/Premium order. If the status is not final yet, it tries to refresh it live. Statuses: processing, completed, failed, under_review (manual review; balance not refunded yet), refunded (balance returned after review).

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/telegram/orders/45
{
  "order_id": 45,
  "order_type": "stars",
  "target_username": "someuser",
  "quantity": 100,
  "duration_months": null,
  "price": "2.00",
  "status": "completed",
  "external_order_id": "shop-stars-1",
  "idempotent_replay": false
}
06

📦 المنتجات (مخزون وتسليم فوري) 📦 Products (stock & instant delivery)

شراء أكواد وروابط وحسابات (بريد وباسورد) ونصوص، ويصلك المنتج في نفس الرد Buy codes, links, accounts (email & password) and text, delivered in the same response
كل منتج له نوع تسليم: code (كود) أو link (رابط) أو account (بريد وباسورد) أو text (نص). كل عنصر مخزون يُباع لعميل واحد فقط. الشراء ذري بالكامل (خصم الرصيد وسحب العنصر وتسجيل الطلب معًا)، فإذا نفد المخزون أو لم يكفِ الرصيد لا يُخصم شيء. المنتجات اليدوية (بدون مخزون) لا تُباع عبر الـ API. Every product has a delivery type: code, link, account (email & password) or text. Each stock item is sold to exactly one customer. A purchase is fully atomic (balance deduction, taking the item and recording the order happen together), so if stock runs out or the balance is too low nothing is charged. Manual products (no stock) are not sold through the API.
GET /v1/products 🔒 يتطلب مفتاحًا 🔒 Token required

يعيد المنتجات المتاحة للشراء مجمّعة حسب التصنيف (المفعّل فقط). المنتج الذي نفد مخزونه يبقى ظاهرًا ويأتي بـ in_stock: false. الكمية الفعلية stock تظهر فقط للمنتجات التي فعّل لها المسؤول إظهار الكمية، وإلا تكون null. معامل اختياري: category_id لعرض تصنيف واحد. التصنيفات قد تكون متداخلة: الحقل parent_id يكون null للتصنيف الرئيسي، ورقم التصنيف الأب للتصنيف الفرعي. التصنيف الفرعي تحت أب معطّل لا يظهر، والأب الذي يحتوي فرعيات فقط يظهر بقائمة products فارغة ليسهل بناء الشجرة. Returns the products you can buy, grouped by (active) category. Categories can be nested: parent_id is null for a top-level category, or the parent category's id for a subcategory. A subcategory under a disabled parent is hidden, and a parent that only contains subcategories is listed with an empty products array so you can rebuild the tree. A sold-out product stays listed with in_stock: false. The real quantity stock is only shown for products whose admin enabled quantity display; otherwise it is null. Optional parameter: category_id to show a single category.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://fi16.bot-hosting.cloud:25538/v1/products"
[
  {
    "id": 3,
    "parent_id": null,
    "name": "حسابات جيميل",
    "name_en": "Gmail accounts",
    "description": null,
    "description_en": null,
    "products": [
      {
        "id": 12,
        "name": "Gmail 2019",
        "name_en": "Gmail 2019",
        "description": "حساب جيميل قديم",
        "description_en": "Old Gmail account",
        "price": "1.50",
        "delivery_type": "account",
        "in_stock": true,
        "stock": null
      },
      {
        "id": 14,
        "name": "كود تفعيل",
        "name_en": "Activation code",
        "description": null,
        "description_en": null,
        "price": "0.80",
        "delivery_type": "code",
        "in_stock": false,
        "stock": null
      }
    ]
  }
]
POST /v1/products/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يشتري منتجًا ويسلّمه فورًا في نفس الرد داخل الحقل delivery. المعاملات: product_id (إجباري، من GET /v1/products) و external_order_id (اختياري لكن يُنصح به بشدة). إعادة نفس الطلب بنفس external_order_id تُرجِع نفس الطلب ونفس البيانات من غير خصم ثانٍ (idempotent_replay: true)، فإذا انقطع الاتصال قبل وصول الرد فأعد الطلب بأمان. Buys a product and delivers it right away in the same response, inside delivery. Parameters: product_id (required, from GET /v1/products) and external_order_id (optional but strongly recommended). Repeating the request with the same external_order_id returns the same order and data without a second charge (idempotent_replay: true), so if the connection drops before the response arrives you can safely retry.

curl -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 12, "external_order_id": "shop-prod-1"}' \
  http://fi16.bot-hosting.cloud:25538/v1/products/buy
{
  "order_id": 88,
  "order_code": "ORD-7K2M9X4QA",
  "product_id": 12,
  "product_name": "Gmail 2019",
  "product_name_en": "Gmail 2019",
  "category_name": "حسابات جيميل",
  "category_name_en": "Gmail accounts",
  "price": "1.50",
  "status": "completed",
  "delivery": {
    "type": "account",
    "content": "user@example.com:S3cretPass",
    "email": "user@example.com",
    "password": "S3cretPass"
  },
  "external_order_id": "shop-prod-1",
  "idempotent_replay": false,
  "created_at": "2026-10-04T00:55:00+00:00"
}
حقل delivery: type هو نوع التسليم، و content هو المحتوى كاملًا (الكود أو الرابط أو النص أو بريد:باسورد). للنوع account فقط يأتي أيضًا email و password مفصولين (وإلا يكونان null). The delivery field: type is the delivery type and content is the full content (the code, link, text, or email:password). Only for account you also get separate email and password (otherwise they are null).
الأخطاء المحتملة: PRODUCT_NOT_FOUND (404)، PRODUCT_DISABLED (400)، PRODUCT_NOT_SUPPORTED (400)، OUT_OF_STOCK (409)، INSUFFICIENT_BALANCE (402)، EXTERNAL_ORDER_ID_REUSED (409). في كل هذه الحالات لا يُخصم أي رصيد. Possible errors: PRODUCT_NOT_FOUND (404), PRODUCT_DISABLED (400), PRODUCT_NOT_SUPPORTED (400), OUT_OF_STOCK (409), INSUFFICIENT_BALANCE (402), EXTERNAL_ORDER_ID_REUSED (409). In every one of these cases nothing is charged.
GET /v1/products/orders/{order_id} 🔒 يتطلب مفتاحًا 🔒 Token required

يعيد بيانات طلب منتج اشتريته سابقًا (نفس حقل delivery الذي وصلك عند الشراء). لا يعمل إلا مع طلباتك أنت؛ غير ذلك يُرجِع ORDER_NOT_FOUND (404). Returns a product order you bought earlier (the same delivery field you got at purchase time). It only works for your own orders; otherwise it returns ORDER_NOT_FOUND (404).

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/products/orders/88
07

🧰 الجلسات والخدمات والرصيد 🧰 Sessions, Services & Account

شراء الجلسات وخدمات الـ SMM، كشف الحساب، الشحن بـ USDT، والبحث بـ external_order_id Buy sessions and SMM services, account statement, USDT top-up, and lookup by external_order_id
📌
قواعد الشراء في هذا القسم
  • الخصم يتم أولًا قبل التنفيذ، وexternal_order_id يمنع الشراء المزدوج.
  • النتيجة المجهولة = 409 ORDER_UNDER_REVIEW دون إعادة رصيد تلقائية.
  • طلبات الـ API لا تظهر في «طلباتي» داخل البوت، وتظهر فقط في GET /v1/orders.
Purchase rules in this section
  • The charge happens first, before execution, and external_order_id prevents double purchases.
  • An unknown outcome = 409 ORDER_UNDER_REVIEW with no automatic refund.
  • API orders do not appear in “My Orders” inside the bot, only in GET /v1/orders.
GET /v1/orders/by-external/{external_order_id} 🔒 يتطلب مفتاحًا 🔒 Token required

يجلب حالة أي طلب (أرقام / نجوم / بريميوم / منتجات / جلسات / خدمات) عبر external_order_id الذي أرسلته عند الشراء، دون الحاجة إلى order_id. مفيد جدًا بعد ORDER_UNDER_REVIEW أو انقطاع الاتصال. الحقل state هو حالة الطلب إن وُجد، وإلا حالة العملية (under_review / processing / refunded / done). إن لم يوجد شيء يعيد ORDER_NOT_FOUND (404). Looks up any order (numbers / Stars / Premium / products / sessions / services) by the external_order_id you sent at purchase time, without needing the order_id. Very useful after ORDER_UNDER_REVIEW or a dropped connection. state is the order status when an order exists, otherwise the operation state (under_review / processing / refunded / done). If nothing exists it returns ORDER_NOT_FOUND (404).

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/orders/by-external/shop-1042
{
  "external_order_id": "shop-1042",
  "state": "under_review",
  "order": null,
  "pending_op_id": 57
}
GET /v1/sessions/countries 🌐 عامة (دون مفتاح) 🌐 Public (no token)

الدول المتاحة لشراء حزم الجلسات مع سعر الجلسة الواحدة والكمية المتاحة. Countries available for session packages, with the price per session and the available quantity.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/sessions/countries
[
  { "country_code": "US", "country_name": "United States", "flag": "🇺🇸", "price": "0.45", "available": 320 }
]
POST /v1/sessions/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يشتري حزمة جلسات (من 1 إلى 1000). الرد status: processing حتى تُجهَّز الحزمة؛ تابع الحالة من GET /v1/sessions/orders/{order_id} ثم حمّل الملف. Buys a sessions package (1 to 1000). The response has status: processing until the package is prepared; poll GET /v1/sessions/orders/{order_id} and then download the file.

curl -H "Authorization: Bearer YOUR_TOKEN" -X POST -H "Content-Type: application/json" \
  -d '{"country_code":"US","quantity":5,"external_order_id":"shop-2001"}' \
  http://fi16.bot-hosting.cloud:25538/v1/sessions/buy
{
  "order_id": 31,
  "order_type": "session",
  "country_code": "US",
  "quantity": 5,
  "unit_price": "0.45",
  "price": "2.25",
  "status": "processing",
  "progress_percent": null,
  "completed_count": null,
  "download_ready": false,
  "external_order_id": "shop-2001",
  "idempotent_replay": false
}
GET /v1/sessions/orders/{order_id} 🔒 يتطلب مفتاحًا 🔒 Token required

حالة طلب الجلسات مع نسبة التقدم. عندما يصبح status: done وdownload_ready: true يمكنك التحميل. Sessions order status with progress. When status: done and download_ready: true you can download.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/sessions/orders/31
GET /v1/sessions/orders/{order_id}/download 🔒 يتطلب مفتاحًا 🔒 Token required

يحمّل حزمة الجلسات كملف zip بعد اكتمال الطلب. قبل الاكتمال يعيد ORDER_NOT_READY (409). Downloads the sessions package as a zip file once the order is done. Before that it returns ORDER_NOT_READY (409).

curl -H "Authorization: Bearer YOUR_TOKEN" -o sessions.zip \
  http://fi16.bot-hosting.cloud:25538/v1/sessions/orders/31/download
GET /v1/services 🌐 عامة (دون مفتاح) 🌐 Public (no token)

خدمات الـ SMM المتاحة مجمّعة حسب التصنيف، مع السعر لكل 1000 وحدود الكمية. الأسماء بالعربية name والإنجليزية name_en. الحقل parent_id يكون null للتصنيف الرئيسي، وإلا رقم التصنيف الأب. Available SMM services grouped by category, with the price per 1000 and the quantity limits. Names are in Arabic name and English name_en. parent_id is null for a top-level category, otherwise the parent category's id.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/services
[
  {
    "id": 4,
    "parent_id": null,
    "name": "متابعين",
    "name_en": "Followers",
    "services": [
      { "id": 21, "name": "متابعين انستجرام", "name_en": "Instagram followers",
        "price_per_1000": "1.80", "min_quantity": 100, "max_quantity": 10000 }
    ]
  }
]
POST /v1/services/buy 🔒 يتطلب مفتاحًا 🔒 Token required

يطلب خدمة SMM. السعر = السعر لكل 1000 × الكمية ÷ 1000. حالة الطلب تتحدث تلقائيًا؛ تابعها من GET /v1/services/orders/{order_id}. Orders an SMM service. Price = price per 1000 × quantity ÷ 1000. The order status updates automatically; follow it with GET /v1/services/orders/{order_id}.

curl -H "Authorization: Bearer YOUR_TOKEN" -X POST -H "Content-Type: application/json" \
  -d '{"service_id":21,"link":"https://instagram.com/yourpage","quantity":500,"external_order_id":"shop-3001"}' \
  http://fi16.bot-hosting.cloud:25538/v1/services/buy
{
  "order_id": 12,
  "order_code": "SMM-4H2K9QZ1",
  "order_type": "service",
  "service_id": 21,
  "service_name": "متابعين انستجرام",
  "service_name_en": "Instagram followers",
  "link": "https://instagram.com/yourpage",
  "quantity": 500,
  "price": "0.90",
  "status": "pending",
  "external_order_id": "shop-3001",
  "idempotent_replay": false
}
GET /v1/services/orders/{order_id} 🔒 يتطلب مفتاحًا 🔒 Token required

حالة طلب خدمة SMM اشتريتها. Status of an SMM service order you bought.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/services/orders/12
GET /v1/transactions?limit=50 🔒 يتطلب مفتاحًا 🔒 Token required

كشف حركات رصيدك من الأحدث للأقدم (شحن deposit / مشتريات purchase / استرجاع refund / تسويات adjustment) مع الرصيد قبل وبعد كل حركة. المبالغ نصوص، والسالب = خصم. الإجمالي في X-Total-Count وX-Has-More. الحقل request_id يربط الحركة بالطلب الذي سبّبها. الحركات القديمة (قبل الإصدار 1.5) قد تكون ناقصة. Your balance statement, newest first (deposit / purchase / refund / adjustment) with the balance before and after each entry. Amounts are strings; negative = debit. Total in X-Total-Count and X-Has-More. request_id links an entry to the request that caused it. Older entries (before v1.5) may be incomplete.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "http://fi16.bot-hosting.cloud:25538/v1/transactions?limit=50"
[
  { "id": 905, "type": "purchase", "amount": "-1.50", "balance_before": "10.00",
    "balance_after": "8.50", "request_id": "req_9de799b93459485f", "created_at": "2026-10-07T10:15:00+00:00" },
  { "id": 904, "type": "deposit", "amount": "10.00", "balance_before": "0.00",
    "balance_after": "10.00", "request_id": null, "created_at": "2026-10-07T09:50:00+00:00" }
]
GET /v1/deposit/networks 🔒 يتطلب مفتاحًا 🔒 Token required

شبكات USDT المتاحة للشحن وعنوان المحفظة لكل شبكة، مع معدل التحويل إلى رصيد. Available USDT networks for top-up, the wallet address for each, and the credit rate.

curl -H "Authorization: Bearer YOUR_TOKEN" \
  http://fi16.bot-hosting.cloud:25538/v1/deposit/networks
[
  { "network": "trc20", "label": "USDT · TRC20 (Tron)", "currency": "USDT",
    "address": "T...", "credit_rate": "1.00" }
]
POST /v1/deposit/request 🔒 يتطلب مفتاحًا 🔒 Token required

الخطوة الأولى في الشحن. أرسل الشبكة والمبلغ المطلوب (لحد رقمين عشريين)، فيعيد لك مبلغًا دقيقًا فريدًا (مثل 10.0089) وعنوان المحفظة. حوّل هذا المبلغ بالضبط بنفس الأرقام العشرية قبل expires_at، ثم استدعِ /v1/deposit/verify. هذا المبلغ هو ما يربط التحويل بحسابك، فلا يستطيع أحد غيرك استخدام تحويلك. الحد الأقصى 3 طلبات نشطة لكل شبكة. الأخطاء: INVALID_AMOUNT وAMOUNT_OUT_OF_RANGE (422)، TOO_MANY_PENDING_REQUESTS (429)، AMOUNT_BUSY (503). Step 1 of a deposit. Send the network and the amount you want (up to 2 decimals) and you get back a unique exact amount (e.g. 10.0089) and the wallet address. Send exactly that amount, with the same decimals, before expires_at, then call /v1/deposit/verify. This amount is what ties the transfer to your account, so nobody else can claim your transaction. At most 3 active requests per network. Errors: INVALID_AMOUNT and AMOUNT_OUT_OF_RANGE (422), TOO_MANY_PENDING_REQUESTS (429), AMOUNT_BUSY (503).

curl -H "Authorization: Bearer YOUR_TOKEN" -X POST -H "Content-Type: application/json" \
  -d '{"network":"trc20","amount":"10"}' \
  http://fi16.bot-hosting.cloud:25538/v1/deposit/request
{
  "request_id": 41,
  "network": "trc20",
  "address": "T...",
  "amount_usdt": "10.0089",
  "expires_at": 1760000000,
  "expires_in": 3600
}
POST /v1/deposit/verify 🔒 يتطلب مفتاحًا 🔒 Token required

بعد أن تحوّل USDT إلى العنوان، أرسل الـ txid ليتحقق السيرفر من الشبكة ويضيف الرصيد (مع بونص الشحن إن وُجد). الـ txid هو مفتاح الـ idempotency: إعادته من نفس الحساب تعيد نفس النتيجة (idempotent_replay: true) دون شحن مرتين، واستخدامه من حساب آخر يعيد TXID_ALREADY_USED (409). يجب استدعاء /v1/deposit/request أولًا وتحويل المبلغ الدقيق الذي يعيده، وإلا يُرفض التحقق: NO_DEPOSIT_REQUEST وAMOUNT_MISMATCH وTX_BEFORE_REQUEST وREQUEST_EXPIRED (422). الأخطاء الأخرى: TX_NOT_VERIFIED (422) وVERIFICATION_UNAVAILABLE (503). كذلك DEPOSIT_REQUEST_ALREADY_USED (409): طلب الشحن استُهلك قبل كده، أنشئ طلبًا جديدًا. وCREDIT_FAILED (503): تم التحقق من التحويل لكن إضافة الرصيد فشلت، لا تحوّل مرة أخرى وتواصل مع الدعم برقم العملية (txid). After sending USDT to the address, submit the txid so the server verifies it on-chain and credits your balance (plus the top-up bonus when applicable). The txid is the idempotency key: repeating it from the same account returns the same result (idempotent_replay: true) without crediting twice, and using it from another account returns TXID_ALREADY_USED (409). You must call /v1/deposit/request first and send the exact amount it returns, otherwise verification is rejected: NO_DEPOSIT_REQUEST, AMOUNT_MISMATCH, TX_BEFORE_REQUEST and REQUEST_EXPIRED (422). Other errors: TX_NOT_VERIFIED (422) and VERIFICATION_UNAVAILABLE (503). Also DEPOSIT_REQUEST_ALREADY_USED (409): the deposit request was already used, create a new one. And CREDIT_FAILED (503): the transfer was verified but crediting failed, do not transfer again and contact support with the txid.

curl -H "Authorization: Bearer YOUR_TOKEN" -X POST -H "Content-Type: application/json" \
  -d '{"network":"trc20","txid":"<TRANSACTION_HASH>"}' \
  http://fi16.bot-hosting.cloud:25538/v1/deposit/verify
{
  "txid": "<TRANSACTION_HASH>",
  "network": "trc20",
  "amount_usdt": "10.00",
  "credited": "10.00",
  "bonus": "0.50",
  "total_credited": "10.50",
  "balance": "18.50",
  "currency": "USD",
  "idempotent_replay": false
}
08

🔔 الـ Webhooks 🔔 Webhooks

إشعارات فورية بدل الاستعلام المتكرر Instant notifications instead of repeated polling
⚙️
الإعداد
  • من البوت فقط: الإعدادات ← 🔑 APIKEY ← 🔔 Webhook.
  • ضع رابط HTTPS عامًا، وخذ السر whsec_… لتوقيع الرسائل (وفيه زر «إرسال تجربة»).
  • الروابط الداخلية (localhost / شبكات خاصة) مرفوضة، والتحويلات (redirects) لا تُتبع.
Setup
  • Bot only: Settings → 🔑 APIKEY → 🔔 Webhook.
  • Set a public HTTPS URL and take the secret whsec_… to sign messages (there is a “send test” button).
  • Internal URLs (localhost / private networks) are rejected and redirects are not followed.
POST https://your-server.example/webhook ⬅️ يُرسل إلى سيرفرك ⬅️ Sent to your server

كل إشعار هو JSON بهذا الشكل، مع الترويسات X-Webhook-Id وX-Webhook-Event وX-Webhook-Timestamp وX-Webhook-Signature: Every notification is JSON in this shape, with the headers X-Webhook-Id, X-Webhook-Event, X-Webhook-Timestamp and X-Webhook-Signature:

{
  "id": "evt_1042",
  "event": "number.code_received",
  "created_at": 1790000000,
  "data": {
    "order_id": 8841,
    "order_type": "number",
    "phone": "+15551234567",
    "code": "123456",
    "password": null,
    "external_order_id": "shop-1042"
  }
}
event متى يُرسلWhen it is sent
number.code_received وصل كود الرقم. الحقل data يحوي order_id وphone وcode (وأحيانًا password). يُراقَب الكود حتى 30 دقيقة من الشراء. The number's code arrived. data has order_id, phone, code (and sometimes password). The code is watched for up to 30 minutes after purchase.
order.status_changed تغيّرت حالة طلب (نجوم / بريميوم / جلسات / خدمات). data.order بنفس شكل GET /v1/orders وdata.previous_status الحالة السابقة. An order's status changed (Stars / Premium / sessions / services). data.order has the same shape as GET /v1/orders and data.previous_status is the previous status.
operation.resolved حُسمت عملية كانت ORDER_UNDER_REVIEW: data.state إمّا refunded (أُعيد الرصيد) أو done (تم التنفيذ)، مع external_order_id. A previously ORDER_UNDER_REVIEW operation was settled: data.state is refunded (balance returned) or done (fulfilled), with external_order_id.
webhook.test رسالة تجربة من زر «إرسال تجربة» في البوت. A test message from the “send test” button in the bot.
✍️
التحقق من التوقيع
  • احسب HMAC-SHA256 بالسر على النص {timestamp}.{raw_body} (الجسم الخام كما وصل).
  • قارنه بالقيمة بعد sha256= في X-Webhook-Signature بمقارنة ثابتة الزمن.
  • ارفض الرسالة إن اختلف X-Webhook-Timestamp عن الوقت الحالي بأكثر من 5 دقائق.
Verifying the signature
  • Compute HMAC-SHA256 with the secret over {timestamp}.{raw_body} (the raw body as received).
  • Compare it with the value after sha256= in X-Webhook-Signature using a constant-time comparison.
  • Reject the message if X-Webhook-Timestamp differs from the current time by more than 5 minutes.
import hmac, hashlib, time

def verify(secret: str, headers, raw_body: bytes) -> bool:
    ts = headers["X-Webhook-Timestamp"]
    if abs(time.time() - int(ts)) > 300:
        return False
    mac = hmac.new(secret.encode(), ts.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest("sha256=" + mac, headers["X-Webhook-Signature"])
📬
التسليم وإعادة المحاولة
  • ردّ 2xx خلال 8 ثوانٍ = تم التسليم.
  • عند الفشل: 7 محاولات (10ث ← 30ث ← 2د ← 10د ← ساعة ← 6 ساعات)، وبعد 50 فشلًا متتاليًا يتوقف الـ webhook (فعّله من البوت).
  • قد يصلك الإشعار أكثر من مرة وبترتيب مختلف، فاعتمد على id لمنع التكرار.
  • الحالة: GET /v1/webhook · السجل: GET /v1/webhook/deliveries
Delivery and retries
  • Reply 2xx within 8 seconds = delivered.
  • On failure: 7 attempts (10s → 30s → 2m → 10m → 1h → 6h); after 50 consecutive failures the webhook is disabled (re-enable it from the bot).
  • A notification may arrive more than once and out of order, so de-duplicate by id.
  • State: GET /v1/webhook · Log: GET /v1/webhook/deliveries
09

⚠️ شكل الأخطاء ورموزها ⚠️ Error Shape & Codes

التعامل مع الأخطاء بطريقة ثابتة Handle API errors consistently

أي خطأ يرجع دائمًا بنفس الشكل الموحّد التالي: Any error always comes back in this exact same shape:

{
  "ok": false,
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Required 1.50, available 0.30.",
    "requestId": "req_9de799b93459485f",
    "required": "1.50",
    "balance": "0.30"
  }
}
اعتمد في منطق برنامجك على حقل code لأنه ثابت، وليس على message لأنه نص وصفي وقد يتغير. أرسل requestId عند التواصل مع الدعم (نفس القيمة تأتي أيضًا في الهيدر X-Request-Id لكل رد). Branch your integration logic on code because it is stable, not on message which may change. Include requestId when contacting support (the same value is also returned in the X-Request-Id header of every response).
HTTP code المعنى Meaning
400 COUNTRY_DISABLED الدولة معطّلة The country is disabled
400 COUNTRY_UNAVAILABLE الدولة غير متاحة حاليًا للشراء The country is not available to buy right now
400 PRICE_NOT_SET لا يوجد سعر بيع محدد No selling price is set
400 INVALID_QUANTITY كمية النجوم خارج المدى المسموح Stars quantity outside the allowed range
400 INVALID_DURATION مدة البريميوم غير مدعومة (3/6/12) Unsupported premium duration (3/6/12)
400 INVALID_TARGET_USERNAME يوزر المستلم غير صالح Invalid recipient username
401 INVALID_API_KEY المفتاح مفقود أو غير صحيح Token missing or invalid
402 INSUFFICIENT_BALANCE الرصيد غير كافٍ Insufficient balance
403 ACCOUNT_BANNED الحساب محظور Account is banned
403 API_KEY_DISABLED تم إيقاف مفتاح الـ API الخاص بك، تواصل مع الدعم Your API key has been disabled, please contact support
403 IP_NOT_ALLOWED المفتاح مقيّد بعناوين IP محددة وعنوان طلبك ليس منها (يظهر عنوانك في error.client_ip) The key is restricted to specific IPs and your request IP is not one of them (shown in error.client_ip)
404 COUNTRY_NOT_FOUND كود الدولة غير موجود Unknown country code
404 ORDER_NOT_FOUND الطلب غير موجود أو ليس ملكًا للتوكن Order not found or not owned by this token
404 CODE_NOT_ARRIVED الكود لم يصل بعد The code has not arrived yet
409 EXTERNAL_ORDER_ID_REUSED تم استخدام نفس external_order_id مع طلب مختلف Same external_order_id was used with a different request
409 COUNTRY_UNAVAILABLE أصبحت الدولة غير متاحة أثناء الشراء ويُعاد الرصيد Country became unavailable during purchase and balance is refunded
400 LIMIT_REQUIRED المعامل limit إجباري في GET /v1/orders (من 1 إلى 200)، مثال: /v1/orders?limit=50 The limit parameter is required on GET /v1/orders (1 to 200), e.g. /v1/orders?limit=50
404 PRODUCT_NOT_FOUND المنتج غير موجود Product not found
400 PRODUCT_DISABLED المنتج (أو تصنيفه) معطّل حاليًا The product (or its category) is currently disabled
400 PRODUCT_NOT_SUPPORTED المنتج يدوي (بدون مخزون) ولا يُباع عبر الـ API The product is manual (no stock) and is not sold through the API
409 OUT_OF_STOCK نفد مخزون المنتج؛ لم يُخصم أي رصيد The product is out of stock; your balance was not charged
409 ORDER_UNDER_REVIEW لم تتأكد النتيجة في الوقت المناسب؛ الرصيد لم يُعَد بعد والطلب تحت المراجعة. نفس الرمز في الأرقام والنجوم والبريميوم، ويحمل error.order_id (إن وُجد طلب مسجّل) و error.external_order_id. لا تنشئ طلبًا جديدًا بمعرّف مختلف، بل أعد نفس الطلب (نفس external_order_id) لمعرفة الحالة. The result was not confirmed in time; your balance has not been refunded yet and the order is under review. Same code for numbers, Stars and Premium; it carries error.order_id (when an order was recorded) and error.external_order_id. Do not create a new order with a different id; repeat the same request (same external_order_id) to check its state.
409 ORDER_CANCELLED أُلغي الطلب من الأدمن ورُدّ رصيده Order cancelled by admin and refunded
409 CODE_NOT_STORED لا يوجد كود محفوظ لهذا الطلب القديم No stored code for this older order
422 VALIDATION_ERROR جسم الطلب ناقص أو غير صالح Request body is missing or invalid
409 ORDER_NOT_READY حزمة الجلسات لم تجهز بعد The sessions package is not ready yet
409 TXID_ALREADY_USED رقم العملية (txid) استُخدم من قبل This transaction id was already used
409 DEPOSIT_REQUEST_ALREADY_USED طلب الشحن استُهلك قبل كده، أنشئ طلبًا جديدًا This deposit request was already used, create a new one
422 TX_NOT_VERIFIED تعذّر التحقق من التحويل على الشبكة (غير موجود/غير مؤكد/مبلغ أو عنوان غير مطابق) The transfer could not be verified on-chain (not found / unconfirmed / wrong amount or address)
400 NETWORK_UNAVAILABLE شبكة الشحن غير متاحة حاليًا This deposit network is not available right now
429 RATE_LIMIT_EXCEEDED تجاوزت حدّ الطلبات Rate limit exceeded
500 ORDER_SAVE_FAILED خطأ أثناء حفظ الطلب؛ يُعاد الرصيد، إلا إذا كان الطلب قد نُفِّذ فعلًا فيُراجَع يدويًا (يأتي الرمز مع pending_op_id) Error saving the order; balance is refunded, unless it was already executed, in which case it is reviewed manually (the response then carries pending_op_id)
500 INTERNAL_ERROR خطأ داخلي عام Generic internal error
502 PROVIDER_ERROR رفض واضح للطلب ويُعاد الرصيد تلقائيًا Clear rejection of the order and balance is refunded automatically
503 CREDIT_FAILED اتأكد التحويل لكن إضافة الرصيد فشلت. لا تحوّل مرة أخرى وتواصل مع الدعم برقم العملية Transfer verified but crediting failed. Do not transfer again, contact support with the txid
503 MAINTENANCE الـ API متوقف مؤقتًا للصيانة، أعد المحاولة لاحقًا The API is temporarily stopped for maintenance, try again later
503 PURCHASES_PAUSED الشراء متوقف مؤقتًا (أرقام / نجوم / بريميوم / جلسات). لم يُخصم أي رصيد، أعد المحاولة لاحقًا. القراءة (الأرصدة والطلبات) تعمل بشكل طبيعي Purchases (numbers / Stars / Premium / sessions) are temporarily paused. Nothing was charged, try again later. Reads (balance, orders) keep working
⚠️
متى يُعاد الرصيد؟
  • يُعاد تلقائيًا فقط عندما نتأكد أن الطلب لم يُنفَّذ (فشل قبل التنفيذ أو رفض واضح).
  • غير ذلك (مهلة / خطأ في المعالجة / انقطاع): 409 ORDER_UNDER_REVIEW ويبقى الرصيد مخصومًا حتى تتم المراجعة.
  • لا تنشئ طلبًا جديدًا: أعد نفس الطلب بنفس external_order_id أو استخدم GET /v1/orders/by-external/{id}.
When is the balance refunded?
  • Refunded automatically only when we are sure the order was not executed (failed before execution, or a clear rejection).
  • Otherwise (timeout / processing error / dropped connection): 409 ORDER_UNDER_REVIEW and the balance stays charged until reviewed.
  • Do not create a new order: repeat the same request with the same external_order_id or use GET /v1/orders/by-external/{id}.
10

🧪 الاستكشاف التفاعلي 🧪 Interactive Explorer

اختبر الـ API مباشرة من المتصفح Test the API directly from your browser
Swagger UI جاهز للتجربة Swagger UI is ready
يمكنك تجربة جميع نقاط النهاية مباشرة من المتصفح. Try all API endpoints directly from your browser.
فتح Swagger UI ↗ Open Swagger UI ↗