Ürünler واریا را از طریق سیستم خودت بفروش
سایت, ربات Telegram یا پنل Bayiیات را به واریا وصل کن. Ürünler ve قیمتها را به Müşteri خودت نشان بده, Sipariş او را ثبت کن ve نتیجهٔ نهایی را خودکار Teslimat بگیر — با یک API از Tür REST که فقط با هدر X-API-Key Kimlik Doğrulama میشود.
https://api.waryashop.org/api/v1
API واریا چه کاری انجام میدهد؟
این یک API Bayiی (عمده) است. Müşteri داخل سایت یا ربات خودت میماند؛ Sunucu تو در پسزمینه با یک کلید با واریا حرف میزند ve کاتالوگ, قیمتها, Sipariş و Teslimat را مدیریت میکند. Cüzdan dolarی حسابت را Yükle میکنی؛ هزینهٔ هر Sipariş پذیرفتهشده از آن کسر میشود ve نتیجه یا با خواندن Sipariş Durumu برمیگردد یا — اگر آدرس بازگشت بدهی — با یک وبهوک امضاشده.
کاتالوگ
Oyunlar, Ürünler, Paketler ve قیمت فروش لحظهای dolarی.
اعتبارسنجی Oyuncu
بررسی حساب Oyun پیش از دریافت وجه از Müşteri.
Sipariş و Cüzdan
Sipariş Ver, خواندن Durum آن ve دیدن Bakiye ve İşlemler.
وبهوک امضاشده
هر رویداد Sipariş به آدرس خودت فرستاده میشود ve با امضای HMAC قابل بررسی است.
Kimlik Doğrulama
هر درخواست کلیدت را در هدر X-API-Key میفرستد. کلید یک رمز است: آن را فقط در هدر بفرست, هرگز در آدرس, در query string یا در لاگ — کلیدی که در آدرس باشد به Tarih مرورگر, لاگ پروکسی ve اسکرینشات راه پیدا میکند. این API به هیچ هدر forward شده اعتماد نمیکند, پس فهرست IP isteğe bağlı هر کلید قابل جعل نیست.
هدر
درخواست بدون کلید, با کلید ناشناخته یا کلید Devre Dışı/باطل پاسخ 401 میگیرد ve هیچ چیز دیگری دربارهٔ حساب فاش نمیشود.
curl "https://api.waryashop.org/api/v1/games" \
-H "X-API-Key: YOUR_API_KEY"1 کلید برای هر حساب
پس از Giriş, آن را از صفحهٔ API Anahtarları بساز. هر کلید اسکوپ دارد ve میتواند آدرسهایی را که از آنها پاسخ میدهد محدود کند (تا 32 قانون). هر زمان میتوانی آن را بازتولید, Devre Dışı یا باطل کنی؛ هر پاسخ X-Request-Id را هم دارد.
Uç noktalar
هر مسیر نسبت به Base URL بالا است. هر عملیات به اسکوپ نوشتهشده در کنارش نیاز دارد.
کاتالوگ
https://api.waryashop.org/api/v1/games
catalog:read
Oyunları listele ve Ürünler
کد Ürün, Ad انگلیسی, Ad فارسی isteğe bağlı ve آدرس تصویر میزبانیشده روی واریا. Sayfalamaشده؛ صفحهٔ پیشفرض کل لیست است.
https://api.waryashop.org/api/v1/games/{code}/catalogue
catalog:read
Paketler ve قیمت فروش
هنگام Sipariş Ver دقیقاً همان catalogue_name این پاسخ را ارسال کن. اینها قیمت فروش واریا به dolar ve بهصورت رشتهٔ اعشاری است. فقط Paketlerیی فهرست میشوند که همین حالا قیمتشان قابل تأیید است؛ Ürünی که دیگر قابل فروش نیست یا Tutarش تأیید نمیشود اینجا غایب است — نه اینکه با 0.000000 منتشر شود — ve Adبردن آن در Sipariş پاسخ 422 میگیرد.
https://api.waryashop.org/api/v1/games/{code}/fields
catalog:read
فیلدهای لازم Oyuncu
Kimlikهایی که فرم Sipariş این Oyun باید بگیرد, همراه با meta.source ve meta.freshness که میگوید پاسخ از کجا آمده است. ووچرها لیست خالی برمیگردانند.
https://api.waryashop.org/api/v1/games/{code}/servers
catalog:read
Sunucuها ve Bölgeler
لیست خالی یک پاسخ Onaylandı است: این Oyun Seç Sunucu نمیخواهد. Oyunای که لیستش تأیید نشود پاسخ 503 میگیرد, نه لیست خالی.
Satın Al
https://api.waryashop.org/api/v1/player/validate
players:validate
اعتبارسنجی Oyuncu
قبل از دریافت وجه از Müşteri, اکانت او را بررسی کن. خطای موقت پاسخ 503 با Retry-After است, نه «اکانت Adعتبر».
https://api.waryashop.org/api/v1/orders
orders:write
Sipariş Ver
قیمت فعلی واریا را قطعی میکند, Tutar را از Cüzdan شما کسر ve پردازش Sipariş را شروع میکند. اگر قیمت تأیید نشود, پاسخ 503 است ve هیچ Tutarی کسر نمیشود.
https://api.waryashop.org/api/v1/orders/{orderId}
orders:read
دریافت Sipariş Durumu
برای ووچر Tamamlandıشده, فیلد delivery Teslim Kodu را دارد.
https://api.waryashop.org/api/v1/orders
orders:read
Siparişleri listele
Tarihچه Sayfalamaشده؛ جدیدترین Sipariş اول است.
حساب
https://api.waryashop.org/api/v1/balance
balance:read
Cüzdan Bakiyesi
Bakiye آزاد ve قفلشده USD بهصورت رشتهٔ اعشاری برمیگردد.
https://api.waryashop.org/api/v1/transactions
transactions:read
Cüzdan İşlemleri
گردش حساب Sayfalamaشده برای تطبیق مالی.
اسکوپها
هر کلید فقط به Uç noktalarیی میرسد که اسکوپهایش پوشش میدهند. درخواستی که کلیدش اسکوپ لازم را ندارد پاسخ 403 میگیرد ve اسکوپ Adوجود را Ad میبرد. مجموعهٔ فقط-خواندنی بهطور پیشفرض داده میشود؛ ساخت Sipariş اسکوپی است که باید درخواست کنی.
| اسکوپ | چه چیزی را باز میکند |
|---|---|
catalog:read |
Oyunları, paketleri, sipariş alanlarını ve sunucuları okuma |
players:validate |
Sipariş vermeden önce oyuncu hesabını doğrulama |
balance:read |
Cüzdan bakiyesini okuma |
transactions:read |
Bu hesabın kendi işlemlerini okuma |
orders:read |
Bu hesabın kendi siparişlerini okuma |
orders:write |
Sipariş oluşturma (Idempotency-Key başlığı gerekir) |
محدودیت نرخ
اینها Limitlerیی است که API واقعاً اعمال میکند, بر حسب درخواست در دقیقه.
| کجا | هر فراخوان | کل سرویس |
|---|---|---|
| هر درخواست /api/v1, پیش از بررسی کلید | 600/min | 6,000/min |
| Anahtarınız (هر کلید, قابل تنظیم) | 60/min (پیشفرض, تا 6,000) | — |
POST https://api.waryashop.org/api/v1/player/validate |
60/min | 600/min |
هر پاسخ دو هدر X-RateLimit-Limit ve X-RateLimit-Remaining را دارد. پاسخ ردشده 429 است ve هدرهای Retry-After ve X-RateLimit-Reset را هم دارد — پیش از Tekrar Dene آنها را بخوان؛ همان مقدار در بدنه بهصورت meta.retry_after تکرار میشود.
Sayfalama
Uç noktalarی فهرستی با page ve per_page (Ad دیگر: limit) Sayfalama میشوند. مقدار per_page در فهرست Sipariş و تراکنش بین 1 تا 100 محدود میشود؛ فهرستهای کاتالوگ بهطور پیشفرض ve حداکثر 500 خانواده در هر صفحهاند ve meta.has_more میگوید صفحهٔ Sonraki هست یا نه.
هر پاسخ فهرستی در meta Değerler current_page, last_page, per_page, total, count ve request_id را دارد, پس کلاینت میتواند صفحهها را بپیماید ve همچنان یک Kimlikٔ همبستگی نقل کند.
curl "https://api.waryashop.org/api/v1/orders?page=2&per_page=50" \
-H "X-API-Key: YOUR_API_KEY"خطاها
هر پاسخ — موفق یا Başarısız — یک پوشش JSON با success, error_code, message ve meta.request_id است. پاسخهای خطا کد ve پیام را زیر error هم تکرار میکنند. در هر درخواست Destek meta.request_id را ذکر کن.
{
"success": false,
"error": {
"code": "MISSING_API_KEY",
"message": "X-API-Key header is required."
},
"error_code": "MISSING_API_KEY",
"message": "X-API-Key header is required.",
"meta": {
"request_id": "01J8ZQ4M6W9K2N7P3R5T8V0XYZ"
}
}{
"success": false,
"error": {
"code": "SCOPE_FORBIDDEN",
"message": "This API key does not grant the \"catalog:read\" scope."
},
"error_code": "SCOPE_FORBIDDEN",
"message": "This API key does not grant the \"catalog:read\" scope.",
"meta": {
"request_id": "01J8ZQ4M6W9K2N7P3R5T8V0XYZ"
}
}همهٔ Durumها
| Durum | کدها | معنا |
|---|---|---|
| 200 / 201 | — |
موفق. success: true, کلیدهای خود اندپوینت, همان کلیدها زیر data ve meta.request_id. |
| 400 | BAD_REQUEST / IDEMPOTENCY_KEY_REQUIRED |
درخواست قابل فهم نبود, یا کلیدی که Idempotency-Key لازم دارد آن را نفرستاده است. |
| 401 | MISSING_API_KEY / INVALID_API_KEY / UNAUTHENTICATED |
کلید نبوده, ناشناخته است, یا Devre Dışı/باطل شده است. هیچ چیز دیگری دربارهٔ حساب فاش نمیشود. |
| 402 | INSUFFICIENT_BALANCE |
Cüzdan Bakiyesi برای این Sipariş کافی نیست. هیچ Tutarی کسر ve هیچ سفارشی ثبت نشد. |
| 403 | SCOPE_FORBIDDEN / ACCOUNT_BLOCKED / IP_NOT_ALLOWED |
کلید این اندپوینت را پوشش نمیدهد, حساب مسدود است, یا درخواست از بیرون فهرست IP مجاز کلید آمده است. |
| 404 | NOT_FOUND / GAME_NOT_FOUND / ORDER_NOT_FOUND |
چیزی در آن آدرس سرویس نمیشود, آن Ürün قابل فروش نیست, یا آن Sipariş مال شما نیست (Kimlikٔ حساب دیگر 404 است, نه 403). |
| 405 | METHOD_NOT_ALLOWED |
متد HTTP همانی نیست که این اندپوینت میپذیرد. |
| 409 | IDEMPOTENCY_CONFLICT / CONFLICT |
کلید Idempotency-Key پیشتر توسط همین حساب برای Sipariş متفاوتی استفاده شده است. آن را فقط با بدنهٔ یکسان تکرار کن؛ کلیدی که حساب دیگری بهکار میبرد مال همان حساب است ve هرگز با Anahtarınız تعارض ندارد. |
| 422 | VALIDATION_FAILED / INVALID_REQUEST |
یک فیلد ناقص, بدشکل یا غیرقابل فروش است. errors هر فیلد را Ad میبرد. |
| 429 Retry-After: 60s | RATE_LIMITED |
تعداد درخواستها زیاد است. پیش از Tekrar Dene, مقدار هدر Retry-After (ثانیه) را صبر کن. |
| 500 | INTERNAL_ERROR / SERVICE_TEMPORARILY_UNAVAILABLE |
خطای پیشبینینشده در سمت ما. meta.request_id آن را در لاگهای ما مشخص میکند؛ با فاصلهٔ تصاعدی دوباره تلاش کن. |
| 503 Retry-After: 60s | CATALOG_TEMPORARILY_UNAVAILABLE / SERVICE_TEMPORARILY_UNAVAILABLE |
کاتالوگ یا قیمت تأیید نشد, یا سرویس Geçici olarak kullanılamıyor. هیچ Tutarی کسر نشده است؛ RETRY_AFTER ثانیه برای درخواست دوباره کافی است. |
خطاهای 401, 402, 403 ve 422 را بدون اصلاح درخواست تکرار نکن. برای 429 ve خطاهای موقت 5xx فاصلهٔ تلاشها را تصاعدی Artış بده.
تکرار ایمنِ ساخت سفارش
ساخت Sipariş هزینه دارد, پس POST /orders از طریق هدر Idempotency-Key تکرارایمن است — تنها مکانیزم منتشرشده. همان کلید را با همان بدنه بفرست تا با اطمینان دوباره تلاش کنی: تکرار, همان Sipariş نخست را با idempotent_replay برابر true برمیگرداند ve دوباره چیزی کسر نمیشود. همان کلید با بدنهٔ متفاوت برای حساب تو 409 است؛ کلیدی که حساب دیگری بهکار میبرد مال همان حساب است ve هرگز با Anahtarınız تعارض ندارد.
curl -X POST "https://api.waryashop.org/api/v1/orders" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Idempotency-Key: 8f3kd-order-1042" \
-H "Content-Type: application/json" \
-d '{"game":"pubgm","catalogue_name":"60 UC","player_id":"12345678"}'وبهوک Müşteri
هنگام ساخت Sipariş یک callback_url بفرست ve واریا هر رویداد Sipariş را به آن میفرستد. هر ارسال امضا میشود, پس میتوانی مطمئن باشی از طرف ما آمده ve در مسیر تغییر نکرده است. تلاشهای دوباره طبق زمانبندی زیر است؛ کلید امضای چرخیده در یک بازهٔ مهلت در کنار جانشینش امضا میکند تا بتوانی بررسی را بدون از دست دادن رویدادها جابهجا کنی.
رویدادها
order.createdorder.processingorder.completedorder.failedorder.refunded
بدنه Ad رویداد را دارد ve api_version برابر 2026-10-28 است.
تلاشهای دوباره
تا 5 تلاش, با فاصلههای 1, 5, 15, 60 دقیقه بین آنها (فاصلهٔ آخر تکرار میشود). ارسالی که پشت سر هم شکست بخورد برای بررسی ثبت میشود.
بازهٔ مهلت پس از چرخش کلید: 60 دقیقه.
آدرس بازگشت باید HTTPS باشد؛ آدرس http:// رد میشود ve ریدایرکتها دنبال نمیشوند.
امضا
X-Warya-Signature: t=<unix>,v1=<hex>
v1 همان HMAC-SHA256 روی رشتهٔ "{t}.{event_id}.{raw_body}" با کلید وبهوک تو است؛ همان t در X-Warya-Timestamp ve Kimlikٔ رویداد در X-Warya-Event-Id تکرار میشود. بررسی با بازمحاسبه روی همان بایتهایی است که دریافت کردهای. برای پذیرش 2xx پاسخ بده ve تکرار همان X-Warya-Event-Id را پردازششده بدان.
:raw_body = the exact bytes you received
t, v1 = the two values in X-Warya-Signature
expected = hmac_sha256(key = WEBHOOK_SECRET, message = t + "." + event_id + "." + raw_body)
ok = hash_equals(expected, v1) # compare in constant timeشروع کنید
-
1. حساب بساز
در واریا Kayıt Ol ve وارد شو. هر حساب Bayiی شامل API Anahtarı, محدودیت IP ve وبهوک امضاشده است.
Hesap Oluştur → -
2. درخواست دسترسی Bayiی (API)
فرم خودکارِ درخواست دسترسی Bayiی هنوز راهاندازی نشده است. تا آن زمان, دسترسی API را از مسیر Telegram Desteği درخواست کن تا برای حسابت Aktif شود.
ارتباط با Telegram'dan Destek → -
3. کلید بساز
پس از Giriş, صفحهٔ API Anahtarları را باز کن ve کلیدت را بساز. اسکوپهای öğe نیازت را Seç کن؛ مجموعهٔ فقط-خواندنی شروع خوبی است.
-
4. فراخوانی /api/v1/games
کاتالوگ را با کلیدت بخوان. درخواست بدون کلید پاسخ 401 پایین را میگیرد — همان پاسخ واقعی گرفتهشده از API زنده:
curl "https://api.waryashop.org/api/v1/games" \ -H "X-API-Key: YOUR_API_KEY"بدون کلید, API زنده این را برمیگرداند:
{ "success": false, "error": { "code": "MISSING_API_KEY", "message": "X-API-Key header is required." }, "error_code": "MISSING_API_KEY", "message": "X-API-Key header is required.", "meta": { "request_id": "01J8ZQ4M6W9K2N7P3R5T8V0XYZ" } } -
5. Sipariş ثبت کن
ابتدا Oyuncu را بررسی کن, سپس Sipariş را همراه با Idempotency-Key بفرست (همان درخواستی که در بخش 08 آمد). این هم پاسخ 201 آن:
{ "success": true, "order_id": "WR-20261010-8F3KD", "status": "processing", "charged": "0.950000", "currency": "USD", "idempotent_replay": false, "data": { "order_id": "WR-20261010-8F3KD", "status": "processing", "charged": "0.950000", "currency": "USD", "idempotent_replay": false }, "meta": { "request_id": "01J8ZQ4M6W9K2N7P3R5T8V0XYZ" } } -
6. وبهوک را دریافت کن
هنگام ساخت Sipariş یک callback_url بفرست؛ ما هر رویداد Sipariş را امضاشده به آن میفرستیم. اگر ترجیح میدهی خودت بپرسی, GET /orders/{orderId} را بخوان ve وقتی Durum completed, failed یا refunded شد بس کن.
قرارداد ماشینخوان
همین قرارداد بهصورت سند OpenAPI 3.1 منتشر میشود ve بدون کلید در دسترس است. از آن کلاینت بساز یا در Postman یا Insomnia وارد کن.
https://api.waryashop.org/openapi.json
سؤالی داری؟ مسیر Destek رسمی Telegram است — @warya_game.