مرجع API تونل سرور اکسیت
ساخت و حذفِ کاربرانِ WireGuard-روی-TCP روی سرورِ اکسیتِ خودتان، از سامانهٔ خودتان. با فعالکردنِ اجرای خودکار، peer هم روی روترِ MikroTik شما ساخته میشود — بدونِ اینکه کسی دستوری را دستی اجرا کند.
https://servernet.cloud/developers/tunnel · ۱۴۰۵/۰۶/۰۳
/api/v1/tunnel/servers
سرورهای اکسیت که تونل TCP دارند
tunnel:read
/api/v1/tunnel/{service}/accounts
فهرست کاربران و وضعیتشان
tunnel:read
/api/v1/tunnel/{service}/accounts
ساخت کاربر — کلید خصوصی فقط یک بار
tunnel:write
/api/v1/tunnel/{service}/accounts/{name}
حذف کاربر
tunnel:write
/api/v1/tunnel/{service}/agent
وضعیت اجرای خودکار روی روتر
tunnel:read
/api/v1/tunnel/{service}/agent
فعالسازی اجرای خودکار — توکن فقط یک بار
tunnel:write
۱پیشنیاز و احراز هویت
این رابط فقط برای سرورهای اکسیتی کار میکند که تونلِ TCP رویشان راهاندازی شده است. سروری که چنین پروفایلی ندارد اصلاً در فهرست ظاهر نمیشود — پس لازم نیست بدانید کدام سرور قابل است؛ خودِ فهرست جواب است.
- در پنل کاربری خود به صفحهٔ امنیت بروید و یک توکن API بسازید.
- دو دسترسی tunnel:read و tunnel:write را تیک بزنید.
- در صورت نیاز، IP مجاز را روی همان توکن تعیین کنید تا فقط از سرور خودتان کار کند.
- توکن فقط یک بار نمایش داده میشود؛ همانجا ذخیرهاش کنید.
curl -H "Authorization: Bearer sn_xxxxxxxx" \
https://servernet.cloud/api/v1/tunnel/servers
۲شناسهٔ سرویس خود را بگیرید
همهٔ مسیرهای بعدی به یک شناسهٔ عددی نیاز دارند. آن را از این فراخوان بگیرید و در کد خود نگه دارید.
GET https://servernet.cloud/api/v1/tunnel/servers
{"ok": true, "data": [{
"service_id": 49,
"name": "blackwood-vip-1",
"status": "active", "writable": true,
"host": "sn-571100.servernet.cloud", "port": 8443,
"subnet": "10.77.0.0/24", "next_ip": "10.77.0.5",
"accounts": 7, "max": 100,
"agent": {"installed": true, "alive": true,
"last_seen_at": "2026-08-24T08:16:18+00:00",
"pending_jobs": 0}
}]}
service_id | شناسهای که در همهٔ مسیرهای بعدی جای {service} مینشیند |
host | نام یا آدرسی که کاربر نهایی به آن وصل میشود |
subnet | رنج داخلی سرور؛ آدرس هر کاربر از همین رنج داده میشود |
next_ip | اولین آدرس آزاد — اگر ip ندهید همین انتخاب میشود |
writable | اگر false باشد سرویس فعال نیست و اکانت تازه صادر نمیشود |
agent | وضعیت اجرای خودکار روی روتر — بخش بعد |
۳اجرای خودکار روی روتر
روتر شما از سمت ما قابل دسترسی نیست، پس ما به آن وصل نمیشویم — خودش میپرسد. با اجرای دو خط زیر روی روتر، یک اسکریپت و یک زمانبند نصب میشود که مرتب صف شما را میخواند و peerهای تازه را اعمال میکند. بدون این کار همهچیز کار میکند، فقط دستور روتر را باید خودتان اجرا کنید.
- با فراخوان زیر توکن ایجنت را بگیرید. پاسخ، همان دو خط آمادهٔ اجرا را هم میدهد.
- دو خط را در ترمینال روتر MikroTik خود اجرا کنید.
- بار اول چند ثانیه طول میکشد چون گواهی ریشه هم نصب میشود.
- پس از آن، وضعیت باید alive شود.
POST https://servernet.cloud/api/v1/tunnel/49/agent
{"ok": true, "data": {
"token": "sna_49_xxxxxxxx",
"replaced": false,
"install": [
"/tool fetch url=\"https://servernet.cloud/agent/tunnel/install\" http-header-field=\"X-Agent-Token: sna_49_xxxxxxxx\" dst-path=snet-agent.rsc",
"/import file-name=snet-agent.rsc"
]
}}
installed یعنی توکن صادر شده؛ alive یعنی روتر واقعاً در دقایق اخیر تماس گرفته. این دو عمداً جدا هستند: ایجنتی که نصب است ولی خاموش، از نظر شما کار نمیکند و یک برچسب واحد آن را پنهان میکرد.
GET https://servernet.cloud/api/v1/tunnel/49/agent
{"ok": true, "data": {
"installed": true, "alive": true,
"last_seen_at": "2026-08-24T08:16:18+00:00",
"pending_jobs": 0
}}
سرور هرگز «دستور» به روتر نمیفرستد. پاسخ فقط سه مقدار دارد — نام، آدرس و کلید عمومی — و اسکریپت هرکدام را جداگانه اعتبارسنجی میکند و خودش دستور را میسازد. آدرس هم فقط از داخل رنج خود شما پذیرفته میشود.
۴ساخت کاربر
POST https://servernet.cloud/api/v1/tunnel/49/accounts
{"name": "ali-mobile"}
{"ok": true, "data": {
"name": "ali-mobile", "ip": "10.77.0.5",
"public_key": "...", "private_key": "...",
"delivery": {"mode": "agent", "status": "pending",
"job_id": 41, "agent_alive": true},
"router_command": "/interface/wireguard/peers/add ...",
"config": { ... sing-box ... }
}}
ورودیها
name | اجباری — ۲ تا ۲۴ نویسهٔ لاتین کوچک، رقم، خطتیره یا زیرخط |
ip | اختیاری — ندهید تا آدرس آزاد بعدی خودکار انتخاب شود |
format | اختیاری — singbox پیشفرض است؛ legacy برای اپهای قدیمیتر |
میدان config یک کانفیگ کامل sing-box است؛ آن را مستقیم به کاربر نهایی بدهید تا با پسوند json ذخیره و در برنامهاش import کند. لازم نیست خودتان چیزی بسازید.
میدان delivery میگوید کار کجاست: mode برابر agent یعنی در صف روتر نشست و ظرف چند ثانیه ساخته میشود؛ mode برابر manual یعنی ایجنت نصب نیست و باید router_command را خودتان روی روتر اجرا کنید. router_command در هر دو حالت برمیگردد، چون ایجنت ممکن است خاموش باشد و آن خط تنها راه نجات در همان لحظه است.
۵فهرست و وضعیت کاربران
هر کاربر یک میدان state دارد که همان چیزی را میگوید که کاربر نهایی تجربه میکند، نه یک برچسب داخلی.
GET https://servernet.cloud/api/v1/tunnel/49/accounts
{"ok": true, "data": {
"service_id": 49, "next_ip": "10.77.0.6",
"agent": {"installed": true, "alive": true, "pending_jobs": 0},
"accounts": [
{"name": "ali-mobile", "ip": "10.77.0.5",
"public_key": "...", "issued_at": "...",
"state": "active"}
]
}}
active روی روتر نشسته و کاربر وصل میشود
pending هنوز در صف روتر است — چند ثانیه صبر کنید
failed روتر نپذیرفت یا ایجنت اجرا نشد؛ لاگ روتر را ببینید
کاربرانی که پیش از راهاندازی این صف ساخته شدهاند هیچ ردیف کاری ندارند و عمداً active گزارش میشوند، نه نامعلوم — همهشان سالم روی روتر نشستهاند.
۶حذف کاربر
DELETE https://servernet.cloud/api/v1/tunnel/49/accounts/ali-mobile
{"ok": true, "data": {
"name": "ali-mobile",
"delivery": {"mode": "agent", "status": "pending"},
"router_command": "/interface/wireguard/peers/remove [find name=\"ali-mobile\"]"
}}
۷خطاها و سقفها
پاسخ ناموفق همیشه یک کد ماشینخوان در میدان error دارد. به متن message تکیه نکنید؛ ممکن است عوض شود.
insufficient_scope | توکن دسترسی لازم را ندارد |
not_found | چنین سرور یا اکانتی در حساب شما نیست |
service_not_active | سرویس تعلیق، منقضی یا لغو شده است |
bad_name | نام با قالب مجاز نمیخواند |
name_taken | اکانتی با این نام از قبل هست |
bad_ip | آدرس از رنج داخلی همین سرور نیست |
ip_taken | این آدرس قبلاً داده شده است |
limit_reached | به سقف تعداد اکانت رسیدهاید |
سقف نرخ
| خواندن | ۱۲۰ / ۱ دقیقه |
| ساخت و حذف | ۲۰ / ۱ دقیقه |
| صدور توکن ایجنت | ۵ / ۱ دقیقه |
| حداکثر کاربر روی هر سرور | ۱۰۰ |