Ana içeriğe geç
REST · JSON API v1 X-API-Key

Ürünler واریا را از طریق سیستم خودت بفروش

سایت, ربات Telegram یا پنل Bayiی‌ات را به واریا وصل کن. Ürünler ve قیمت‌ها را به Müşteri خودت نشان بده, Sipariş او را ثبت کن ve نتیجهٔ نهایی را خودکار Teslimat بگیر — با یک API از Tür REST که فقط با هدر X-API-Key Kimlik Doğrulama می‌شود.

Base URL https://api.waryashop.org/api/v1
01

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 قابل بررسی است.

02

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 را هم دارد.

03

Uç noktalar

هر مسیر نسبت به Base URL بالا است. هر عملیات به اسکوپ نوشته‌شده در کنارش نیاز دارد.

کاتالوگ

GET https://api.waryashop.org/api/v1/games catalog:read

Oyunları listele ve Ürünler

کد Ürün, Ad انگلیسی, Ad فارسی isteğe bağlı ve آدرس تصویر میزبانی‌شده روی واریا. Sayfalama‌شده؛ صفحهٔ پیش‌فرض کل لیست است.

GET 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 می‌گیرد.

GET https://api.waryashop.org/api/v1/games/{code}/fields catalog:read

فیلدهای لازم Oyuncu

Kimlik‌هایی که فرم Sipariş این Oyun باید بگیرد, همراه با meta.source ve meta.freshness که می‌گوید پاسخ از کجا آمده است. ووچرها لیست خالی برمی‌گردانند.

GET https://api.waryashop.org/api/v1/games/{code}/servers catalog:read

Sunucuها ve Bölgeler

لیست خالی یک پاسخ Onaylandı است: این Oyun Seç Sunucu نمی‌خواهد. Oyun‌ای که لیستش تأیید نشود پاسخ 503 می‌گیرد, نه لیست خالی.

Satın Al

POST https://api.waryashop.org/api/v1/player/validate players:validate

اعتبارسنجی Oyuncu

قبل از دریافت وجه از Müşteri, اکانت او را بررسی کن. خطای موقت پاسخ 503 با Retry-After است, نه «اکانت Adعتبر».

POST https://api.waryashop.org/api/v1/orders orders:write

Sipariş Ver

قیمت فعلی واریا را قطعی می‌کند, Tutar را از Cüzdan شما کسر ve پردازش Sipariş را شروع می‌کند. اگر قیمت تأیید نشود, پاسخ 503 است ve هیچ Tutarی کسر نمی‌شود.

GET https://api.waryashop.org/api/v1/orders/{orderId} orders:read

دریافت Sipariş Durumu

برای ووچر Tamamlandı‌شده, فیلد delivery Teslim Kodu را دارد.

GET https://api.waryashop.org/api/v1/orders orders:read

Siparişleri listele

Tarihچه Sayfalama‌شده؛ جدیدترین Sipariş اول است.

حساب

GET https://api.waryashop.org/api/v1/balance balance:read

Cüzdan Bakiyesi

Bakiye آزاد ve قفل‌شده USD به‌صورت رشتهٔ اعشاری برمی‌گردد.

GET https://api.waryashop.org/api/v1/transactions transactions:read

Cüzdan İşlemleri

گردش حساب Sayfalama‌شده برای تطبیق مالی.

04

اسکوپ‌ها

هر کلید فقط به 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)
05

محدودیت نرخ

این‌ها 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 تکرار می‌شود.

06

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"
07

خطاها

هر پاسخ — موفق یا Başarısız — یک پوشش JSON با success, error_code, message ve meta.request_id است. پاسخ‌های خطا کد ve پیام را زیر error هم تکرار می‌کنند. در هر درخواست Destek meta.request_id را ذکر کن.

401 کلیدی فرستاده نشده
{
    "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"
    }
}
403 کلید اسکوپ لازم را ندارد
{
    "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ış بده.

08

تکرار ایمنِ ساخت سفارش

ساخت 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"}'
09

وب‌هوک Müşteri

هنگام ساخت Sipariş یک callback_url بفرست ve واریا هر رویداد Sipariş را به آن می‌فرستد. هر ارسال امضا می‌شود, پس می‌توانی مطمئن باشی از طرف ما آمده ve در مسیر تغییر نکرده است. تلاش‌های دوباره طبق زمان‌بندی زیر است؛ کلید امضای چرخیده در یک بازهٔ مهلت در کنار جانشینش امضا می‌کند تا بتوانی بررسی را بدون از دست دادن رویدادها جابه‌جا کنی.

رویدادها

  • order.created
  • order.processing
  • order.completed
  • order.failed
  • order.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
10

شروع کنید

  1. 1. حساب بساز

    در واریا Kayıt Ol ve وارد شو. هر حساب Bayiی شامل API Anahtarı, محدودیت IP ve وب‌هوک امضاشده است.

    Hesap Oluştur →
  2. 2. درخواست دسترسی Bayiی (API)

    فرم خودکارِ درخواست دسترسی Bayiی هنوز راه‌اندازی نشده است. تا آن زمان, دسترسی API را از مسیر Telegram Desteği درخواست کن تا برای حسابت Aktif شود.

    ارتباط با Telegram'dan Destek →
  3. 3. کلید بساز

    پس از Giriş, صفحهٔ API Anahtarları را باز کن ve کلیدت را بساز. اسکوپ‌های öğe نیازت را Seç کن؛ مجموعهٔ فقط-خواندنی شروع خوبی است.

  4. 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. 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. 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.