فروشگاه شما، متصل به وبسرویس آی پی ثابت
از اولین استعلام تا خرید و تمدید؛ سرویسهای اشتراکی را با تعرفه نمایندگی و پرداخت مستقیم از کیف پول مدیریت کنید.
کلید API فقط در سرور شما نگهداری میشود.// Your next connection starts here
const connection = {
platform: "ip-sabet",
authentication: "Bearer token",
transport: "HTTPS",
workflow: [
"quote",
"purchase",
"manage"
]
};در سه قدم، آماده اتصال شوید
- درخواست نمایندگی
کیف پول را حداقل ۲ میلیون تومان شارژ و از پنل درخواست ثبت کنید.
- دریافت کلید دسترسی
پس از تأیید مدیریت، تخفیف خود را ببینید و کلید API بسازید.
- اولین درخواست
از سرور خود، موجودی کیف پول را با نمونه زیر بخوانید.
درخواست عضویت رایگان است و مبلغی کسر نمیشود. پس از تأیید، برای هر عملیات فقط موجودی کافی برای هزینه همان عملیات لازم است.
https://ip-sabet.me/wp-json/ips-reseller/v1curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/wallet' \
-H "Authorization: Bearer YOUR_API_KEY"احراز هویت و امنیت اتصال
تمام درخواستها باید از سرور شما و با HTTPS ارسال شوند. کلید فقط در هدر Authorization: Bearer YOUR_API_KEY قرار میگیرد. ارسال کلید در URL یا بدنه معتبر نیست. برای درخواست POST هدر Content-Type: application/json لازم است. کلید فقط یکبار در پنل نمایش داده میشود؛ با ساخت کلید تازه، کلید قبلی فوراً لغو میشود. تعلیق نمایندگی یا مسدودی حساب نیز دسترسی را قطع میکند.
در پنل میتوانید کلید را لغو و حداکثر ۲۰ IP سرور را مجاز کنید. همه پاسخهای خصوصی بدون کش هستند. سقف استفاده ۶۰ درخواست در هر دقیقه تقویمی برای هر نماینده است. پس از پاسخ 429 تا دقیقه بعد صبر کنید. شناسه کاربران و سفارشها فقط در محدوده حساب خودتان قابل دسترسی است.
واحد پول، تخفیف و قیمت
تمام مبالغ عدد صحیح تومان (IRT) هستند، نه ریال. مبنا قیمت فروش جاری سایت است (اگر قیمت فروش ویژه فعال باشد، همان قیمت). ابتدا هزینه همه کشورها اضافه میشود و سپس تخفیف نمایندگی اعمال و مبلغ نهایی رو به بالا به تومان گرد میشود. برای مثال قیمت ۱۰۰٬۰۰۰ با تخفیف ۱۰٪ برابر ۹۰٬۰۰۰ تومان است. خرید، تمدید و حجم اضافه هزینه دارند؛ استعلامها و توقف/فعالسازی رایگان هستند.
برای نمایش قیمت ابتدا /plans یا /quote را بخوانید. استعلام، مبلغ را رزرو نمیکند. فیلد اختیاری max_amount سقف مجاز کسر است؛ اگر قیمت جدید بالاتر باشد، پاسخ 409 میگیرید و خرید انجام نمیشود. ارسال قیمت یا درصد تخفیف دلخواه پذیرفته نیست.
جلوگیری از خرید و کسر تکراری
در همه POSTهای تغییردهنده (بهجز /quote) هدر Idempotency-Key الزامی است: ۱۶ تا ۱۰۰ کاراکتر انگلیسی، عدد یا ._:-؛ UUID پیشنهاد میشود. یک کلید را پیش از ارسال در دیتابیس خود ذخیره کنید. تکرار همان کلید و همان ورودی، همان عملیات را برمیگرداند و دوباره مبلغی کسر یا سرویسی ایجاد نمیکند. استفاده از همان کلید برای ورودی متفاوت، خطای 409 است. کلیدها منقضی یا با تغییر کلید API پاک نمیشوند.
اگر اتصال قطع شد، از GET /operations/lookup با همان هدر Idempotency-Key استفاده کنید یا دقیقاً همان درخواست را با همان شناسه تکرار کنید. هرگز صرفاً به دلیل timeout شناسه تازه نسازید. پاسخ 202 به معنای موفقیت نهایی نیست: عملیات در حال پردازش یا نیازمند بررسی است. با فاصله حداقل ۵ ثانیه پیگیری کنید؛ برای manual_review با پشتیبانی و شماره عملیات تماس بگیرید. در این وضعیت عملیات تازه تا تعیین تکلیف مسدود است.
فهرست کامل endpointها
جستوجو در مسیرها و توضیحات16 مسیر در دسترس
۱۶ مسیر
GET/accountاطلاعات نمایندگی، درصد تخفیف و تاریخ اعتبار کلید
درخواست خواندن؛ بدنه ارسال نکنید.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/account' \
-H "Authorization: Bearer YOUR_API_KEY"GET/walletمانده قابل مصرف کیف پول به تومان
درخواست خواندن؛ بدنه ارسال نکنید.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/wallet' \
-H "Authorization: Bearer YOUR_API_KEY"GET/plansپلنهای فعال و قیمت پایه، نمایندگی و همه کشورها
درخواست خواندن؛ بدنه ارسال نکنید.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/plans' \
-H "Authorization: Bearer YOUR_API_KEY"GET/countriesکشورهای قابل خرید؛ شناسه صفر برای همه کشورها
درخواست خواندن؛ بدنه ارسال نکنید.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/countries' \
-H "Authorization: Bearer YOUR_API_KEY"POST/quoteاستعلام قیمت؛ هیچ مبلغی کسر نمیشود
استعلام رایگان؛ Idempotency-Key لازم نیست.
پارامترهای بدنه JSON
actionstringالزامینوع عملیات برای استعلام.
order_idintegerاختیاری / وابسته به عملیاتشناسه سفارش متعلق به خودتان؛ برای استعلام تمدید، حجم یا وضعیت لازم است.
plan_idintegerاختیاری / وابسته به عملیاتشناسه پلن فعال اشتراکی از GET /plans؛ برای خرید و تمدید الزامی.
country_idintegerاختیاری / وابسته به عملیاتشناسه کشور از GET /countries؛ صفر یعنی همه کشورها. فقط خرید.
gbintegerاختیاری / وابسته به عملیاتحجم اضافه به گیگابایت؛ عدد صحیح ۱ تا ۱۰۰۰۰.
خرید: action=purchase و plan_id و country_id؛ تمدید: action=renew و order_id و plan_id؛ حجم اضافه: action=extra-volume و order_id و gb؛ توقف/فعالسازی: action=disable یا enable و order_id.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/quote' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{"action":"purchase","plan_id":1,"country_id":1}'GET/ordersسفارشهای اشتراکی خودتان؛ page و per_page (۱ تا ۵۰)
درخواست خواندن؛ بدنه ارسال نکنید.
پارامترهای صفحهبندی: page=1&per_page=20؛ حداکثر ۵۰ رکورد در صفحه، از جدید به قدیم و فقط برای همین حساب.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders' \
-H "Authorization: Bearer YOUR_API_KEY"GET/orders/{id}جزئیات سفارش، لینک اشتراک و کانفیگها
درخواست خواندن؛ بدنه ارسال نکنید.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105' \
-H "Authorization: Bearer YOUR_API_KEY"GET/orders/{id}/usageوضعیت زنده، مصرف و سقف حجم به بایت و انقضا
درخواست خواندن؛ بدنه ارسال نکنید.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
فیلد live_available دریافت داده زنده را مشخص میکند. usage.used و usage.limit به بایت هستند. usage.expire زمان Unix به ثانیه یا تاریخ ISO پنل است؛ صفر/خالی میتواند به معنی شروعنشده یا بدون انقضا باشد.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105/usage' \
-H "Authorization: Bearer YOUR_API_KEY"POST/ordersخرید کانفیگ اشتراکی از کیف پول
هدر Idempotency-Key الزامی است. پاسخ شامل operation و در صورت وجود order است.
پارامترهای بدنه JSON
plan_idintegerالزامیشناسه پلن فعال اشتراکی از GET /plans؛ برای خرید و تمدید الزامی.
country_idintegerالزامیشناسه کشور از GET /countries؛ صفر یعنی همه کشورها. فقط خرید.
customer_referencestringاختیاری / وابسته به عملیاتشناسه داخلی مشتری شما، حداکثر ۱۰۰ بایت؛ صرفاً برچسب است و مالکیت سفارش را تغییر نمیدهد.
max_amountintegerاختیاری / وابسته به عملیاتسقف مجاز کسر به تومان؛ اگر مبلغ نهایی بیشتر باشد، عملیات انجام نمیشود.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{"plan_id":1,"country_id":1,"customer_reference":"customer-123","max_amount":500000}'POST/orders/{id}/renewتمدید با پلن فعال اشتراکی
هدر Idempotency-Key الزامی است. پاسخ شامل operation و در صورت وجود order است.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
پارامترهای بدنه JSON
plan_idintegerالزامیشناسه پلن فعال اشتراکی از GET /plans؛ برای خرید و تمدید الزامی.
customer_referencestringاختیاری / وابسته به عملیاتشناسه داخلی مشتری شما، حداکثر ۱۰۰ بایت؛ صرفاً برچسب است و مالکیت سفارش را تغییر نمیدهد.
max_amountintegerاختیاری / وابسته به عملیاتسقف مجاز کسر به تومان؛ اگر مبلغ نهایی بیشتر باشد، عملیات انجام نمیشود.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105/renew' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{"plan_id":1,"max_amount":500000}'POST/orders/{id}/extra-volumeخرید حجم اضافه با تخفیف نمایندگی
هدر Idempotency-Key الزامی است. پاسخ شامل operation و در صورت وجود order است.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
پارامترهای بدنه JSON
gbintegerالزامیحجم اضافه به گیگابایت؛ عدد صحیح ۱ تا ۱۰۰۰۰.
customer_referencestringاختیاری / وابسته به عملیاتشناسه داخلی مشتری شما، حداکثر ۱۰۰ بایت؛ صرفاً برچسب است و مالکیت سفارش را تغییر نمیدهد.
max_amountintegerاختیاری / وابسته به عملیاتسقف مجاز کسر به تومان؛ اگر مبلغ نهایی بیشتر باشد، عملیات انجام نمیشود.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105/extra-volume' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{"gb":10,"max_amount":100000}'POST/orders/{id}/disableتوقف سرویس فعال؛ رایگان؛ زمان اعتبار متوقف نمیشود
هدر Idempotency-Key الزامی است. پاسخ شامل operation و در صورت وجود order است.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
پارامترهای بدنه JSON
customer_referencestringاختیاری / وابسته به عملیاتشناسه داخلی مشتری شما، حداکثر ۱۰۰ بایت؛ صرفاً برچسب است و مالکیت سفارش را تغییر نمیدهد.
max_amountintegerاختیاری / وابسته به عملیاتسقف مجاز کسر به تومان؛ اگر مبلغ نهایی بیشتر باشد، عملیات انجام نمیشود.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105/disable' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{}'POST/orders/{id}/enableفعالسازی سرویس متوقف دارای حجم و زمان؛ رایگان
هدر Idempotency-Key الزامی است. پاسخ شامل operation و در صورت وجود order است.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
پارامترهای بدنه JSON
customer_referencestringاختیاری / وابسته به عملیاتشناسه داخلی مشتری شما، حداکثر ۱۰۰ بایت؛ صرفاً برچسب است و مالکیت سفارش را تغییر نمیدهد.
max_amountintegerاختیاری / وابسته به عملیاتسقف مجاز کسر به تومان؛ اگر مبلغ نهایی بیشتر باشد، عملیات انجام نمیشود.
curl -X POST 'https://ip-sabet.me/wp-json/ips-reseller/v1/orders/105/enable' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{}'GET/operationsتراکنشها با قیمت و درصد تخفیف ثبتشده؛ page و per_page
درخواست خواندن؛ بدنه ارسال نکنید.
پارامترهای صفحهبندی: page=1&per_page=20؛ حداکثر ۵۰ رکورد در صفحه، از جدید به قدیم و فقط برای همین حساب.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/operations' \
-H "Authorization: Bearer YOUR_API_KEY"GET/operations/{id}پیگیری نتیجه عملیات؛ بدون اجرای مجدد
درخواست خواندن؛ بدنه ارسال نکنید.
پارامتر مسیر id عدد صحیح مثبت است؛ شناسه عملیات با شناسه سفارش متفاوت است و باید متعلق به حساب شما باشد.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/operations/42' \
-H "Authorization: Bearer YOUR_API_KEY"GET/operations/lookupبازیابی عملیات با هدر Idempotency-Key پس از قطع ارتباط
درخواست خواندن؛ بدنه ارسال نکنید.
هدر Idempotency-Key همان درخواست اولیه الزامی است؛ کلید جدید نسازید.
curl -X GET 'https://ip-sabet.me/wp-json/ips-reseller/v1/operations/lookup' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9"مسیری پیدا نشد. عبارت کوتاهتر یا نام انگلیسی مسیر را جستوجو کنید.
نمونه خرید و پیگیری با cURL
curl -X POST "https://ip-sabet.me/wp-json/ips-reseller/v1/orders" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9" \
--data '{"plan_id":1,"country_id":1,"customer_reference":"customer-123","max_amount":500000}'curl "https://ip-sabet.me/wp-json/ips-reseller/v1/operations/lookup" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: 4f2e5b76-4c13-4be1-9a73-71497c8c41c9"ساختار پاسخها
پاسخ موفق با data شروع میشود. پاسخ عملیات شامل قیمت ثبتشده، درصد تخفیف و شناسه پیگیری است. نمونه زیر صرفاً آموزشی است:
{
"data": {
"operation": {
"id": 42,
"action": "purchase",
"state": "succeeded",
"order_id": 105,
"base_amount": 100000,
"discount_percent": 10,
"amount": 90000,
"currency": "IRT",
"customer_reference": "customer-123",
"error_code": null,
"created_at": "2026-09-24 12:00:00",
"updated_at": "2026-09-24 12:00:02"
},
"order": {
"id": 105,
"code": "RS-42-EXAMPLE",
"plan_id": 1,
"country_id": 1,
"status": "on_hold",
"amount": 90000,
"currency": "IRT",
"subscription_url": "https://example.com/sub/PRIVATE",
"links": [],
"created_at": "2026-09-24 12:00:00"
}
}
}در پاسخ /account، مقدار discount_percent تخفیف فعال است. discount_source منبع دستی یا خودکار، discount_expires_at پایان اعتبار تخفیف به UTC و stars سطح حساب را نشان میدهد. اعتبار تهی یعنی تخفیف پایه یا دستی بدون انقضای زمانی. استعلام قیمت را پیش از هر خرید تازه بگیرید.
فهرستها به صورت data: {items: [], page: 1, per_page: 20, total: 0, total_pages: 0} هستند. پاسخ استعلام شامل request، base_amount، discount_percent، amount و currency است. تاریخهای عملیات به منطقه زمانی سایت و تاریخ اعتبار/آخرین استفاده کلید به UTC هستند.
خطاها و محدودیتها
{"code":"ipsr_insufficient_balance","message":"موجودی کیف پول کافی نیست.","data":{"status":402}}| HTTP | معنا |
|---|---|
| 400 | ورودی، پلن، کشور، شناسه یکتا یا حجم نامعتبر؛ gb عدد صحیح ۱ تا ۱۰۰۰۰ است. |
| 401 | کلید نامعتبر، لغوشده یا منقضی. |
| 402 | موجودی کافی نیست؛ از پنل سایت شارژ کنید. |
| 403 | حساب تأیید نشده/مسدود، IP غیرمجاز یا اتصال بدون HTTPS. |
| 404 | سفارش/عملیات وجود ندارد یا متعلق به شما نیست. |
| 409 | تداخل شناسه یکتا، تغییر قیمت، قفل حساب، وضعیت سرویس نامعتبر، فروش متوقف یا عملیات تعیینتکلیفنشده. |
| 413 | بدنه بیش از ۸ کیلوبایت. |
| 415 | Content-Type نامعتبر. |
| 429 | بیش از ۶۰ درخواست در دقیقه. |
| 503 | کیف پول، پنل یا ذخیرهسازی موقتاً در دسترس نیست؛ وضعیت را با همان شناسه پیگیری کنید. |
تمدید و حجم اضافه طبق مهلت و وضعیتهای مجاز فروشگاه انجام میشود. توقف فقط برای سرویس active و فعالسازی فقط برای disabled دارای زمان و حجم معتبر است؛ سرویس on_hold قبل از اولین اتصال از این مسیر فعال نمیشود. کشور صفر فقط زمانی معتبر است که فروش همه کشورها فعال باشد. حذف سرویس، انتقال مالکیت، تغییر گروه پنل، شارژ مستقیم کیف پول و ساخت کاربر به نام شخص دیگر از API مجاز نیست. برای شارژ از پنل سایت استفاده کنید.
این نسخه وبهوک خروجی ندارد؛ نتیجهها از endpointهای عملیات پیگیری میشوند. هیچ کلید پنل، رمز، شماره تلفن مشتری دیگر یا پاسخ داخلی سرویسدهنده در API منتشر نمیشود.
از پنل نمایندگی شروع کنید.
کلیدها، سفارشها و عملیات شما در یک فضای مشخص.

