مستندات API
پنل مدیریت OpenVPN

مستندات جامع API پنل مدیریت OpenVPN

راهنمای کامل برای توسعه‌دهندگان جهت یکپارچه‌سازی سیستم مدیریت OpenVPN در ربات‌ها و سرویس‌ها

مقدمه

این مستندات تمامی APIهای عمومی موجود در پنل مدیریت OpenVPN را پوشش می‌دهد. تمامی درخواست‌ها باید از طریق HTTPS ارسال شوند و پاسخ‌ها در قالب JSON خواهند بود.

Base URL

https://your-panel-domain.com

هدرهای ضروری

X-API-KEY: YOUR_API_KEY_HERE
Content-Type: application/json
نکته مهم:

تمامی درخواست‌ها باید شامل هدر احراز هویت باشند. کلید API را می‌توانید از بخش تنظیمات پنل مدیریت (برای ادمین اصلی) یا بخش API (برای نمایندگان) دریافت کنید.

احراز هویت

سیستم API از دو نوع کلید با سطوح دسترسی متفاوت پشتیبانی می‌کند:

  • کلید ادمین اصلی (Main Admin Key): این کلید دسترسی کامل به تمام Endpointها را فراهم می‌کند، از جمله مدیریت نودها و تمام کاربران. این کلید از طریق پنل اصلی در بخش "تنظیمات" قابل ایجاد و مدیریت است.
  • کلید نماینده (Sub-Admin Key): این کلید دارای دسترسی محدود است و فقط می‌تواند کاربرانی که به خود آن نماینده تعلق دارند را مدیریت کند. نمایندگان نمی‌توانند به Endpointهای مدیریت نودها دسترسی داشته باشند. این کلید توسط خود نماینده از داخل پنلش در بخش "API" ایجاد می‌شود.

پنل به صورت هوشمند بر اساس کلید ارسال شده در هدر `X-API-KEY`، سطح دسترسی را تشخیص داده و مجوزهای لازم را اعمال می‌کند.

امنیت کلید API:

کلید API مانند یک رمز عبور عمل می‌کند. آن را در اختیار دیگران قرار ندهید و در سمت کلاینت (مثل اپلیکیشن‌های وب یا موبایل) به صورت hard-coded استفاده نکنید.

سلامت سرویس

GET

وضعیت پنل

/api/v1/status

Health-check عمومی جهت بررسی آنلاین بودن سرویس (بدون نیاز به X-API-KEY).

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/status" \
  -H "Content-Type: application/json"
پاسخ موفق:
{
  "status": "success",
  "message": "Service is running",
  "timestamp": "2024-01-15T10:30:00Z",
  "version": "1.0.0"
}

مدیریت کاربران

POST

ایجاد کاربر جدید

/api/v1/users

این endpoint برای ایجاد کاربران VPN جدید استفاده می‌شود. هم می‌توان کاربران تکی ایجاد کرد و هم به صورت گروهی.

پارامترهای بدنه درخواست (Body):
شرطی username

نام کاربری برای ساخت کاربر تکی. اگر از `bulk_count` استفاده شود، نباید ارسال شود.

نوع: رشته

شرطی bulk_count

تعداد کاربران برای ایجاد گروهی. اگر بزرگتر از 0 باشد، `username` نادیده گرفته می‌شود و نام‌های کاربری تصادفی ساخته می‌شود.

نوع: عدد صحیح

اختیاری max_clients

تعداد اتصالات همزمان مجاز برای کاربر.

نوع: عدد صحیح، پیش‌فرض: 1

اختیاری data_limit

حجم ترافیک مجاز. اگر ارسال نشود یا `null` باشد، نامحدود خواهد بود.

نوع: عدد صحیح

اختیاری data_limit_unit

واحد حجم ترافیک. مقادیر مجاز: "GB" یا "MB".

نوع: رشته، پیش‌فرض: "GB"

اختیاری notes

یادداشت برای کاربر.

نوع: رشته

اختیاری nodes

آرایه‌ای از ID نودهایی که کاربر مجاز به اتصال به آن‌هاست.

نوع: آرایه عددی، مثال: `[1, 3]`

اختیاری activation_type

نوع فعال‌سازی. مقادیر مجاز: "fixed_date" یا "flexible_days".

پیش‌فرض: "fixed_date"

شرطی pending_activation_days

تعداد روزهای اعتبار از زمان اولین اتصال کاربر. **فقط برای `activation_type="flexible_days"` الزامی است.**

نوع: عدد صحیح

اختیاری expiry_date_str

تاریخ انقضای مشخص با فرمت `YYYY-MM-DD`. **برای `activation_type="fixed_date"` استفاده می‌شود.**

نوع: رشته

اختیاری expiry_days

تعداد روز تا انقضا از زمان ایجاد. **برای `activation_type="fixed_date"` استفاده می‌شود.** اگر هم `expiry_date_str` و هم این پارامتر ارسال شوند، `expiry_date_str` اولویت دارد.

نوع: عدد صحیح

اختیاری sub_admin_id

ID نماینده‌ای که کاربر به او تعلق خواهد داشت. **(فقط برای ادمین اصلی)**

نوع: عدد صحیح

مثال curl (ایجاد کاربر تکی):
curl -X POST "https://your-panel-domain.com/api/v1/users" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "user123",
    "max_clients": 2,
    "data_limit": 50,
    "data_limit_unit": "GB",
    "notes": "User for testing API",
    "nodes": [1, 3],
    "activation_type": "fixed_date",
    "expiry_date_str": "2024-12-31"
  }'
مثال curl (ایجاد کاربران گروهی):
curl -X POST "https://your-panel-domain.com/api/v1/users" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bulk_count": 5,
    "max_clients": 1,
    "data_limit": 10,
    "data_limit_unit": "GB",
    "nodes": [1],
    "activation_type": "flexible_days",
    "pending_activation_days": 30
  }'
پاسخ موفق:
{
  "status": "success",
  "message": "User(s) created successfully",
  "data": {
    "users": [
      {
        "username": "user123",
        "password": "generated_password",
        "config_url": "https://your-panel-domain.com/sub/user123",
        "expiry_date": "2024-12-31"
      }
    ]
  }
}
GET

دریافت اطلاعات کاربر

/api/v1/users/{username}

این endpoint برای دریافت اطلاعات کامل یک کاربر خاص استفاده می‌شود.

پارامترهای مسیر (Path):
اجباری username

نام کاربری مورد نظر

نوع: رشته

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/users/user123" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "username": "user123",
    "status": "active",
    "max_clients": 2,
    "data_limit": 53687091200,
    "data_used": 1073741824,
    "data_limit_unit": "GB",
    "expiry_date": "2024-12-31",
    "activation_type": "fixed_date",
    "nodes": [1, 3],
    "notes": "User for testing API",
    "created_at": "2024-01-15T10:30:00Z",
    "online": false
  }
}
PUT

ویرایش کاربر

/api/v1/users/{username}

این endpoint برای ویرایش اطلاعات یک کاربر استفاده می‌شود. فقط پارامترهایی که قصد تغییرشان را دارید ارسال کنید.

پارامترهای قابل ویرایش:
اختیاری max_clients

تعداد اتصال همزمان

اختیاری data_limit

محدودیت حجم داده (برای نامحدود کردن `null` بفرستید)

اختیاری data_limit_unit

واحد حجم ("GB" یا "MB")

اختیاری notes

یادداشت

اختیاری nodes

آرایه‌ای از IDهای نودهای مجاز

اختیاری activation_type

نوع فعال‌سازی ("fixed_date" یا "flexible_days")

اختیاری pending_activation_days

روزهای فعال‌سازی شناور

اختیاری expiry_date_str

تاریخ انقضا با فرمت `YYYY-MM-DD`

اختیاری reset_activation

برای ریست کردن وضعیت فعال‌سازی کاربر روزشمار (تنظیم به `true`).

نوع: Boolean

مثال curl:
curl -X PUT "https://your-panel-domain.com/api/v1/users/user123" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "max_clients": 5,
    "data_limit": 200,
    "data_limit_unit": "GB",
    "notes": "Updated user limits",
    "nodes": [1, 2],
    "activation_type": "flexible_days",
    "pending_activation_days": 60,
    "reset_activation": true
  }'
پاسخ:
{
  "status": "success",
  "message": "User updated successfully",
  "data": {
    "username": "user123",
    "changes": {
      "max_clients": 5,
      "data_limit": 214748364800,
      "activation_type": "flexible_days",
      "pending_activation_days": 60
    }
  }
}
POST

فعال/غیرفعال کردن کاربر

/api/v1/users/{username}/toggle

این endpoint وضعیت فعال بودن کاربر را تغییر می‌دهد. اگر کاربر فعال باشد، غیرفعال می‌شود و بالعکس.

پارامترها:

این Endpoint بدنه درخواست (Body) ندارد.

مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/users/user123/toggle" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ (در حالت غیرفعال کردن):
{
  "status": "success",
  "message": "User disabled successfully",
  "data": {
    "username": "user123",
    "new_status": "disabled"
  }
}
DELETE

حذف کاربر

/api/v1/users/{username}

این endpoint کاربر را به طور کامل از سیستم (شامل سرور اصلی و تمام نودها) حذف می‌کند.

پارامترها:

این Endpoint بدنه درخواست (Body) ندارد.

مثال curl:
curl -X DELETE "https://your-panel-domain.com/api/v1/users/user123" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "message": "User deleted successfully",
  "data": {
    "username": "user123"
  }
}
POST

ریست ترافیک کاربر

/api/v1/users/{username}/reset_traffic

این endpoint میزان ترافیک مصرفی کاربر را صفر می‌کند و اتصال فعال او را قطع می‌کند.

پارامترها:

این Endpoint بدنه درخواست (Body) ندارد.

مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/users/user123/reset_traffic" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "message": "User traffic reset successfully",
  "data": {
    "username": "user123",
    "previous_usage": 1073741824,
    "new_usage": 0
  }
}
GET

دریافت لینک اشتراک کاربر

/api/v1/users/{username}/sub

این endpoint لینک صفحه اشتراک کاربر را برمی‌گرداند که شامل تمام کانفیگ‌های مجاز برای اوست.

پارامترها:

این Endpoint پارامتر ورودی ندارد.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/users/user123/sub" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "username": "user123",
    "subscription_url": "https://your-panel-domain.com/sub/user123",
    "qr_code_url": "https://your-panel-domain.com/sub/user123/qr"
  }
}
GET

لیست جامع کاربران

/api/v1/users/list_all

نمایش همه کاربران. برای ادمین اصلی به‌صورت ساختاریافته، برای نماینده فقط کاربران خودش.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/users/list_all" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ (برای ادمین اصلی):
{
  "status": "success",
  "data": {
    "users": [
      {
        "username": "user123",
        "status": "active",
        "max_clients": 2,
        "data_used": 1073741824,
        "data_limit": 53687091200,
        "expiry_date": "2024-12-31",
        "online": false,
        "sub_admin": "main",
        "created_at": "2024-01-15T10:30:00Z"
      },
      {
        "username": "user456",
        "status": "disabled",
        "max_clients": 1,
        "data_used": 0,
        "data_limit": null,
        "expiry_date": null,
        "online": true,
        "sub_admin": "reseller1",
        "created_at": "2024-01-14T15:45:00Z"
      }
    ],
    "total_count": 2,
    "active_count": 1,
    "online_count": 1
  }
}
GET

تمام لینک‌های OVPN

/api/v1/users/{username}/all_ovpn_links

بازگرداندن تمام لینک‌های دانلود کانفیگ‌های OVPN (تک‌سرور و چندسرور) برای کاربر.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/users/user123/all_ovpn_links" \
  -H "X-API-KEY: YOUR_ADMIN_OR_SUB_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "username": "user123",
    "configs": [
      {
        "name": "Single Server - Node 1",
        "download_url": "https://your-panel-domain.com/download/user123/node1.ovpn",
        "server": "node1.your-domain.com:1194",
        "protocol": "udp"
      },
      {
        "name": "Multi-Server Config",
        "download_url": "https://your-panel-domain.com/download/user123/multi.ovpn",
        "servers": [
          "node1.your-domain.com:1194",
          "node2.your-domain.com:1194"
        ],
        "protocol": "udp"
      }
    ]
  }
}

مدیریت نودها

سطح دسترسی:

تمام Endpoint های مدیریت نودها فقط با کلید API **ادمین اصلی** قابل دسترسی هستند.

GET

دریافت لیست نودها

/api/v1/nodes

این endpoint لیست تمام نودهای موجود در سیستم را برمی‌گرداند.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/nodes" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "nodes": [
      {
        "id": 1,
        "name": "Main Server",
        "ip_address": "192.168.1.100",
        "status": "online",
        "openvpn_port": "1194",
        "protocol": "udp",
        "user_count": 15,
        "online_users": 3,
        "last_sync": "2024-01-15T10:25:00Z"
      },
      {
        "id": 2,
        "name": "USA Node",
        "ip_address": "192.168.1.101",
        "status": "online",
        "openvpn_port": "1194",
        "protocol": "udp",
        "user_count": 8,
        "online_users": 2,
        "last_sync": "2024-01-15T10:28:00Z"
      }
    ]
  }
}
GET

دریافت اطلاعات نود خاص

/api/v1/nodes/{node_id}

این endpoint اطلاعات یک نود خاص را با استفاده از ID آن برمی‌گرداند.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/nodes/1" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:

ساختار پاسخ مشابه یک آبجکت از لیست نودها است.

{
  "status": "success",
  "data": {
    "id": 1,
    "name": "Main Server",
    "ip_address": "192.168.1.100",
    "status": "online",
    "openvpn_port": "1194",
    "protocol": "udp",
    "user_count": 15,
    "online_users": 3,
    "last_sync": "2024-01-15T10:25:00Z",
    "created_at": "2024-01-10T08:00:00Z",
    "ssh_status": "connected"
  }
}
POST

اضافه کردن نود جدید

/api/v1/nodes

این endpoint یک نود جدید به سیستم اضافه کرده و فرآیند نصب و پیکربندی خودکار را آغاز می‌کند. پاسخ API سریع (status code 202) بازگردانده می‌شود و مراحل راه‌اندازی در پس‌زمینه اجرا خواهند شد.

پارامترهای اجباری:
اجباری name

نام نود

اجباری ip_address

آی‌پی عمومی نود

اجباری ssh_password

پسورد SSH کاربر root

پارامترهای اختیاری:
اختیاری openvpn_port

پورت OpenVPN (پیش‌فرض: "1194")

اختیاری protocol

پروتکل OpenVPN. مقدار مجاز: udp یا tcp (پیش‌فرض: "udp")

اختیاری sync_all_users

اگر true باشد، همه کاربران موجود به نود جدید sync می‌شوند (پیش‌فرض: false)

اختیاری show_main_config

اگر true باشد، کانفیگ اصلی نود در پنل نمایش داده می‌شود (پیش‌فرض: false)

مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/nodes" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "New Node USA",
    "ip_address": "192.168.1.100",
    "ssh_password": "secure_ssh_password_123",
    "openvpn_port": "1194",
    "protocol": "udp",
    "sync_all_users": true,
    "show_main_config": false
  }'
پاسخ:
{
  "status": "accepted",
  "message": "Node creation process started",
  "data": {
    "node_id": 3,
    "name": "New Node USA",
    "installation_status": "in_progress",
    "estimated_completion_time": "5 minutes"
  }
}
PUT

ویرایش نود

/api/v1/nodes/{node_id}

این endpoint اطلاعات یک نود را ویرایش کرده و تنظیمات را روی سرور نود اعمال می‌کند.

پارامترهای قابل ویرایش:

شما می‌توانید هر یک از پارامترهای `name`, `ip_address`, `ssh_password`, `openvpn_port`, `protocol` را ارسال کنید.

مثال curl:
curl -X PUT "https://your-panel-domain.com/api/v1/nodes/1" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Updated Node USA",
    "ip_address": "192.168.1.101",
    "ssh_password": "new_secure_password",
    "openvpn_port": "1195",
    "protocol": "tcp"
  }'
پاسخ:
{
  "status": "success",
  "message": "Node updated successfully",
  "data": {
    "node_id": 1,
    "changes": {
      "name": "Updated Node USA",
      "ip_address": "192.168.1.101",
      "openvpn_port": "1195",
      "protocol": "tcp"
    }
  }
}
DELETE

حذف نود

/api/v1/nodes/{node_id}

این endpoint یک نود را از سیستم حذف کرده و فرآیند پاکسازی را روی سرور نود اجرا می‌کند.

مثال curl:
curl -X DELETE "https://your-panel-domain.com/api/v1/nodes/1" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "message": "Node deleted successfully",
  "data": {
    "node_id": 1,
    "name": "Updated Node USA"
  }
}

مدیریت پورت‌ها (API)

سطح دسترسی:

تمام Endpointهای مدیریت پورت‌ها فقط با کلید API **ادمین اصلی** قابل دسترسی هستند.

GET

دریافت لیست سرورها

/api/v1/public/servers_for_ports

این endpoint لیست تمام سرورهای موجود (سرور اصلی و نودها) را برمی‌گرداند. شما از `id` هر سرور برای افزودن یا حذف پورت‌ها استفاده خواهید کرد.

پارامترها:

این Endpoint بدنه درخواست (Body) ندارد.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/public/servers_for_ports" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ موفق:
{
  "status": "success",
  "data": {
    "servers": [
      {
        "id": "main",
        "name": "Main Server",
        "ip_address": "192.168.1.100",
        "type": "main"
      },
      {
        "id": "node_1",
        "name": "USA Node",
        "ip_address": "192.168.1.101",
        "type": "node"
      },
      {
        "id": "node_2",
        "name": "Europe Node",
        "ip_address": "192.168.1.102",
        "type": "node"
      }
    ]
  }
}
GET

دریافت لیست پورت‌ها

/api/v1/public/ports

این endpoint یک گزارش کامل از پورت‌های پیش‌فرض و پورت‌های فرعی که اضافه کرده‌اید را به همراه سرورهای تخصیص داده شده به آن‌ها برمی‌گرداند. برای حذف یک تخصیص، به `port_id` و `server_identifier` نیاز خواهید داشت.

مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/public/ports" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "default_ports": [
      {
        "port": 1194,
        "protocol": "udp",
        "servers": ["main", "node_1", "node_2"]
      }
    ],
    "custom_ports": [
      {
        "id": 5,
        "port": 8080,
        "protocol": "tcp",
        "servers": ["main", "node_1"],
        "created_at": "2024-01-15T09:00:00Z"
      },
      {
        "id": 6,
        "port": 8081,
        "protocol": "udp",
        "servers": ["node_2"],
        "created_at": "2024-01-15T09:15:00Z"
      }
    ]
  }
}
POST

افزودن پورت جدید

/api/v1/public/ports

این endpoint یک پورت و پروتکل جدید را به یک یا چند سرور به صورت همزمان اضافه کرده و سرویس‌های مربوطه را راه‌اندازی می‌کند.

پارامترهای بدنه درخواست (Body):
اجباری public_port

شماره پورتی که می‌خواهید اضافه کنید.

نوع: عدد صحیح

اجباری protocol

نوع پروتکل. مقادیر مجاز: "tcp" یا "udp".

نوع: رشته

اجباری server_ids

لیستی از شناسه‌های سرورهایی که این پورت باید روی آن‌ها فعال شود.

نوع: آرایه‌ای از رشته‌ها، مثال: `["main", "node_1"]`

مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/public/ports" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "public_port": 8080,
    "protocol": "tcp",
    "server_ids": ["main", "node_1", "node_2"]
  }'
پاسخ موفق:
{
  "status": "success",
  "message": "Port added successfully to specified servers",
  "data": {
    "port_id": 7,
    "port": 8080,
    "protocol": "tcp",
    "servers": ["main", "node_1", "node_2"],
    "installation_status": "in_progress"
  }
}
DELETE

حذف تخصیص پورت از سرور

/api/v1/public/ports/assignment

این endpoint یک پورت فرعی را فقط از یک سرور خاص حذف می‌کند، بدون اینکه روی سرورهای دیگر تأثیری بگذارد.

پارامترهای بدنه درخواست (Body):
اجباری port_id

شناسه منحصر به فرد پورت که از API لیست پورت‌ها به دست آمده است.

نوع: عدد صحیح

اجباری server_identifier

شناسه سروری که پورت باید از آن حذف شود.

نوع: رشته

مثال curl:
curl -X DELETE "https://your-panel-domain.com/api/v1/public/ports/assignment" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "port_id": 5,
    "server_identifier": "node_1"
  }'
پاسخ موفق:
{
  "status": "success",
  "message": "Port assignment removed successfully",
  "data": {
    "port_id": 5,
    "server": "node_1",
    "removed_services": ["haproxy", "firewall_rules"]
  }
}

نمایندگان (Sub-Admins)

سطح دسترسی:

تمامی این Endpointها فقط برای کلید ادمین اصلی در دسترس‌اند.

GET

لیست نمایندگان

/api/v1/sub_admins
مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/sub_admins" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "sub_admins": [
      {
        "id": 1,
        "username": "reseller1",
        "is_active": true,
        "max_users_limit": 100,
        "current_users": 25,
        "total_usage_quota_gb": 500,
        "current_usage_gb": 125.5,
        "expiry_date": "2024-12-31",
        "allowed_servers": ["node_1", "node_2"],
        "created_at": "2024-01-01T00:00:00Z"
      }
    ]
  }
}
GET

جزئیات یک نماینده

/api/v1/sub_admins/{id}
مثال curl:
curl -X GET "https://your-panel-domain.com/api/v1/sub_admins/1" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "data": {
    "id": 1,
    "username": "reseller1",
    "is_active": true,
    "max_users_limit": 100,
    "current_users": 25,
    "total_usage_quota_gb": 500,
    "current_usage_gb": 125.5,
    "expiry_date": "2024-12-31",
    "allowed_servers": ["node_1", "node_2"],
    "notes": "Reseller for USA region",
    "created_at": "2024-01-01T00:00:00Z",
    "last_login": "2024-01-15T09:30:00Z"
  }
}
POST

افزودن نماینده

/api/v1/sub_admins
پارامترهای کلیدی:
اجباریusername
اجباریpassword
اختیاریis_active
اختیاریmax_users_limit
اختیاریtotal_usage_quota_gb
اختیاریexpiry_date (YYYY-MM-DD)
اختیاریallowed_servers[]
اختیاریnotes
مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/sub_admins" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "subadmin1",
    "password": "secure_password_123",
    "is_active": true,
    "max_users_limit": 100,
    "total_usage_quota_gb": 500,
    "expiry_date": "2024-12-31",
    "allowed_servers": ["node_1", "node_2"],
    "notes": "Sub-admin for reseller program"
  }'
پاسخ:
{
  "status": "success",
  "message": "Sub-admin created successfully",
  "data": {
    "id": 2,
    "username": "subadmin1",
    "api_key": "generated_api_key_here",
    "created_at": "2024-01-15T11:00:00Z"
  }
}
PUT

ویرایش نماینده

/api/v1/sub_admins/{id}
پارامترهای قابل ویرایش:
اختیاریusername

تغییر نام کاربری.

نوع: string

اختیاریpassword

تغییر رمز عبور.

نوع: string

اختیاریis_active

فعال/غیرفعال.

نوع: boolean

اختیاریmax_users_limit

به‌روزرسانی سقف کاربر.

نوع: integer

اختیاریtotal_usage_quota_gb

به‌روزرسانی سقف مصرف کل.

نوع: integer

اختیاریexpiry_date

تاریخ انقضا.

نوع: YYYY-MM-DD

اختیاریallowed_servers[]

لیست جدید سرورهای مجاز.

نوع: array<string>

اختیاریnotes

یادداشت.

نوع: string

مثال curl:
curl -X PUT "https://your-panel-domain.com/api/v1/sub_admins/5" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "updated_subadmin",
    "password": "new_secure_password",
    "is_active": false,
    "max_users_limit": 150,
    "total_usage_quota_gb": 750,
    "expiry_date": "2025-06-30",
    "allowed_servers": ["node_1", "node_2", "node_3"],
    "notes": "Updated sub-admin details"
  }'
پاسخ:
{
  "status": "success",
  "message": "Sub-admin updated successfully",
  "data": {
    "id": 5,
    "username": "updated_subadmin",
    "changes": {
      "is_active": false,
      "max_users_limit": 150,
      "total_usage_quota_gb": 750,
      "expiry_date": "2025-06-30"
    }
  }
}
DELETE

حذف نماینده

/api/v1/sub_admins/{id}
مثال curl:
curl -X DELETE "https://your-panel-domain.com/api/v1/sub_admins/5" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "message": "Sub-admin deleted successfully",
  "data": {
    "id": 5,
    "username": "updated_subadmin"
  }
}
POST

ریست مصرف نماینده

/api/v1/sub_admins/{id}/reset_usage
مثال curl:
curl -X POST "https://your-panel-domain.com/api/v1/sub_admins/5/reset_usage" \
  -H "X-API-KEY: YOUR_MAIN_ADMIN_KEY" \
  -H "Content-Type: application/json"
پاسخ:
{
  "status": "success",
  "message": "Sub-admin usage reset successfully",
  "data": {
    "id": 5,
    "username": "updated_subadmin",
    "previous_usage_gb": 450.75,
    "new_usage_gb": 0
  }
}

کدهای خطا

API از کدهای وضعیت استاندارد HTTP برای نشان دادن موفقیت یا شکست درخواست استفاده می‌کند.

  • 200 OK: درخواست با موفقیت انجام شد.
  • 201 Created: منبع جدید با موفقیت ایجاد شد.
  • 202 Accepted: درخواست پذیرفته شد و در پس‌زمینه در حال پردازش است (مانند افزودن نود).
  • 400 Bad Request: درخواست نامعتبر است (مثلاً پارامترهای ناقص یا اشتباه).
  • 401 Unauthorized: کلید API ارسال نشده است.
  • 403 Forbidden: کلید API معتبر است اما دسترسی لازم برای انجام این عمل را ندارد.
  • 404 Not Found: منبع درخواستی (مثلاً کاربر یا نود) پیدا نشد.
  • 409 Conflict: درخواست به دلیل تداخل با وضعیت فعلی منبع قابل انجام نیست (مثلاً نام کاربری تکراری).
  • 500 Internal Server Error: یک خطای پیش‌بینی نشده در سرور رخ داده است.

ساختار پاسخ خطا

{
  "status": "error",
  "message": "Descriptive error message here",
  "code": "ERROR_CODE",
  "details": {
    "field": "additional error details if available"
  }
}
سلامت کاربران نودها خطاها نمایندگان