StarsPaymeeAPI
Partner Purchase API · v1.0.0

Bitta balans.
To'rt xil mahsulot.

Telegram Stars, Premium, Steam hamyoni va o'yin akkauntlarini to'g'ridan-to'g'ri o'z kodingizdan to'ldiring. Oddiy REST + JSON, idempotent buyurtmalar, xatoda avtomatik refund.

⭐️ Stars 💎 Premium 🎮 Steam 🕹 PUBG · Mobile Legends
Boshlanish nuqtasi
Base URL
Autentifikatsiya
X-API-Key: sj_...
20endpoint
USDTyagona balans
24/7avto yetkazish
Boshlash

Integratsiya

Tashqi tizimlar ushbu API orqali Telegram Stars, Premium, Steam hamyoni va o'yin akkauntlarini to'ldiradi.

MahsulotEndpointYetkazish
⭐️ Telegram StarsPOST /v1/starssinxron (javobda natija)
💎 Telegram PremiumPOST /v1/premiumsinxron
🎮 Steam hamyoniPOST /v1/steamasinxron bo'lishi mumkin (202 → polling)
🔫 PUBG Mobile UCPOST /v1/games/pubgm/orderasinxron (~2 daqiqa, 202 → polling)
⚔️ Mobile Legends olmosPOST /v1/games/mlbb_global/orderasinxron (~1 daqiqa, 202 → polling)

Hammasi bitta USDT balansdan yechiladi va javob shakli bir xil skeletda (success, order_id, status, usdt_charged, balance_remaining_usdt) — bitta parser hammasiga yetadi.

Autentifikatsiya

Har bir so'rovda API kalit beriladi (ikki xil usul, biri yetarli):

X-API-Key: sj_...

yoki

Authorization: Bearer sj_...

Kalit — mijozning USDT hamyoni: balans yetarli bo'lsa yechiladi va yetkaziladi, aks holda 402. Fragment xatosida balans avtomatik qaytariladi (502).

Kalit turlari

Ikki xil kalit bor. Ular bir xil manzillar, bir xil so'rov va bir xil javob formatidan foydalanadi — quyidagi hamma narsa ikkalasiga ham tegishli, integratsiyada faqat kalitni almashtirasiz.

TurMablag' manbai402 qachon
standard (oddiy mijoz)o'zining ichki USDT balansibalans yetmasa
owner (tizim kaliti)to'g'ridan-to'g'ri StarsPaymee hamyoni — balans limiti yo'qhamyonda mablag' yetmasa (yoki admin qo'ygan kunlik/buyurtma chegarasidan oshsa)

owner kalitida GET /v1/balance ichki balansni emas, hamyonda xaridga sarflash mumkin bo'lgan summani qaytaradi (balance_usdt — o'sha maydon, o'sha number turi) va qo'shimcha unlimited: true beriladi.

Idempotency

Har buyurtmaga unikal idempotency_key bering — takroriy so'rov bir marta pul yechadi. Tarmoq uzilsa xavfsiz qayta yuborasiz.

30 soniyada integratsiya

Bu — oddiy REST + JSON API. PHP, Node.js, Python yoki istalgan til HTTP request orqali ulanadi. Quyidagi 4 misol POST /v1/starsni ko'rsatadi:

cURL

BASH
curl -X POST "https://api.starstg.uz/api/purchase/v1/stars" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"username":"durov","stars":500,"idempotency_key":"order-12345"}'

PHP (cURL kengaytmasi)

PHP
<?php
$ch = curl_init("https://api.starstg.uz/api/purchase/v1/stars");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST           => true,
  CURLOPT_HTTPHEADER     => [
    "X-API-Key: sj_...",
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "username"        => "durov",
    "stars"           => 500,
    "idempotency_key" => "order-12345",
  ]),
]);
$res  = json_decode(curl_exec($ch), true);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $code . PHP_EOL;
print_r($res);

Node.js (18+, o'rnatilgan fetch)

JS
const res = await fetch("https://api.starstg.uz/api/purchase/v1/stars", {
  method: "POST",
  headers: {
    "X-API-Key": "sj_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    username: "durov",
    stars: 500,
    idempotency_key: "order-12345",
  }),
});
console.log(res.status, await res.json());

Python (requests)

PYTHON
import requests

res = requests.post(
    "https://api.starstg.uz/api/purchase/v1/stars",
    headers={"X-API-Key": "sj_..."},
    json={"username": "durov", "stars": 500, "idempotency_key": "order-12345"},
    timeout=240,  # yetkazish xato bergach blockchain tarixi tekshiriladi — kamdan-kam holatda uzoqroq davom etadi
)
print(res.status_code, res.json())

🎮 Steam to'ldirish — to'liq oqim

Steam login bo'yicha, USD nominalda ishlaydi. O'zbekiston uchun ham to'liq qo'llab-quvvatlanadi: Steam UZ akkauntlari USD hamyonda, shuning uchun valyuta konvertatsiyasi yo'q.

Boshqa mahsulotlardan yagona jiddiy farqi — yetkazish asinxron bo'lishi mumkin. Shuning uchun 202 javobini ham qayta ishlang:

Narx qanday hisoblanadi. Ustama nominalga emas, tannarxga (nominal + provayder komissiyasi) qo'llanadi:

provider_fee = amount_usd × provider_fee_ratio
cost         = amount_usd + provider_fee
total        = cost × (1 + markup_percent / 100)     ← usdt_charged shu

Misol: $10 nominal, provayder 2%, ustama 5%
  provider_fee = $0.20
  cost         = $10.20
  total        = $10.71

Hisobni o'zingizda takrorlamang — GET /v1/steam/pricing?amount_usd=... har doim aniq, jonli qiymatni beradi.

PYTHON
import requests, time

API  = "https://api.starstg.uz/api/purchase/v1"
HEAD = {"X-API-Key": "sj_..."}

# 1) Aniq narxni oling — o'zingizda hisoblamang
q = requests.get(f"{API}/steam/pricing", headers=HEAD,
                 params={"amount_usd": 10}, timeout=30).json()
print(q["quote"])   # {'amount_usd': 10, 'provider_fee_usd': 0.2, 'cost_usd': 10.2,
                     #  'markup_percent': 5, 'markup_usdt': ..., 'total_usdt': ...}

# 2) Buyurtma. idempotency_key — SIZNING invoice id'ingiz, tasodifiy emas!
res = requests.post(f"{API}/steam", headers=HEAD, timeout=120, json={
    "login": "mysteamlogin",
    "amount_usd": 10,
    "idempotency_key": "invoice-1042",
})
order = res.json()

# 3) 202 = qabul qilindi, hali bajarilmoqda → holatni kuzatamiz
if res.status_code == 202:
    for _ in range(180):                     # ~15 daqiqa
        time.sleep(5)
        order = requests.get(f"{API}/steam/{order['order_id']}",
                             headers=HEAD, timeout=30).json()
        if order["status"] in ("completed", "failed"):
            break

print(order["status"], order["usdt_charged"])

Node.js

JS
const res = await fetch("https://api.starstg.uz/api/purchase/v1/steam", {
  method: "POST",
  headers: { "X-API-Key": "sj_...", "Content-Type": "application/json" },
  body: JSON.stringify({
    login: "mysteamlogin",
    amount_usd: 10,
    idempotency_key: "invoice-1042",
  }),
});
let order = await res.json();

// 202 → tugagunicha kuzatamiz
while (order.status === "processing") {
  await new Promise((r) => setTimeout(r, 5000));
  order = await (await fetch(`https://api.starstg.uz/api/purchase/v1/steam/${order.order_id}`, {
    headers: { "X-API-Key": "sj_..." },
  })).json();
}
console.log(order.status, order.usdt_charged);
Steam uchun 5 ta qoida
  1. 202 xato emas. status: "processing" — buyurtma qabul qilingan. Terminal holat faqat completed yoki failed.
  2. login — aynan login. Email yoki /profiles/765611... (SteamID) ishlamaydi. https://steamcommunity.com/id/<login> havolasi qabul qilinadi.
  3. idempotency_key majburiy darajada tavsiya etiladi va u SIZNING barqaror invoice id'ingiz bo'lishi kerak. Tasodifiy qiymat bilan qayta yuborsangiz ikkinchi buyurtma yaratiladi va pul ikki marta ketadi.
  4. Timeout — "yiqildi" degani emas. Javob kelmasa, refund qilmang: aynan o'sha idempotency_key bilan qayta yuboring yoki holatni so'rang.
  5. Narxni /v1/steam/pricing dan oling. Ustama foizi sizning kalitingizga xos bo'lishi mumkin (oborotga qarab shaxsiy tarif).

O'yin to'ldirish (PUBG Mobile / Mobile Legends)

To'liq oqim — ID tekshiruvidan yakunigacha:

JS
const H = { "X-API-Key": "sj_...", "Content-Type": "application/json" };
const GAME = "pubgm"; // yoki "mlbb_global"

// 1) Narxni JONLI oling — kurs bilan o'zgaradi
const cat = await (await fetch(`https://api.starstg.uz/api/purchase/v1/games/${GAME}/catalogue`, { headers: H })).json();
const item = cat.denominations.find((d) => d.name === "60"); // AYNAN nom bo'yicha!
// item.price_usdt — balansdan shuncha yechiladi

// 2) O'yinchini tekshiring va nikni XARIDORGA KO'RSATING (bepul)
const who = await (await fetch(`https://api.starstg.uz/api/purchase/v1/games/${GAME}/check-player`, {
  method: "POST", headers: H,
  body: JSON.stringify({ player_id: "51221257198" }),
})).json();
if (!who.valid) throw new Error("ID noto'g'ri");
// who.player_name → "MirshodforwarD" — tasdiqlatmasdan davom etmang

// 3) Buyurtma
let order = await (await fetch(`https://api.starstg.uz/api/purchase/v1/games/${GAME}/order`, {
  method: "POST", headers: H,
  body: JSON.stringify({
    denomination: item.name,
    player_id: "51221257198",
    idempotency_key: "invoice-1042", // SIZNING barqaror invoice id
  }),
})).json();

// 4) 202 → tugagunicha kuzatamiz (PUBG ~2 daq, MLBB ~1 daq)
while (order.status === "processing") {
  await new Promise((r) => setTimeout(r, 5000));
  order = await (await fetch(`https://api.starstg.uz/api/purchase/v1/games/orders/${order.order_id}`, { headers: H })).json();
}
console.log(order.status, order.usdt_charged); // "completed" 0.9345
O'yin to'ldirish uchun 5 ta qoida
  1. ID ni tekshirmasdan sotmang. Noto'g'ri ID ga tushgan UC/olmosni hech kim qaytara olmaydi — na biz, na provayder, na o'yin ishlab chiqaruvchisi. check-player bepul va bir soniya oladi.
  2. denomination — aynan katalogdagi name. Prefiks bo'yicha qidirmang: PUBG'da "60" (haqiqiy UC) va "60 WOW Coins" (boshqa mahsulot) yonma-yon turadi.
  3. Narxni har safar qayta o'qing. Katalog narxi valyuta kursi bilan o'zgaradi; eskirgan narxni xaridorga aytib qo'ysangiz farqni o'zingiz to'laysiz.
  4. server_id — o'yinga bog'liq. Mobile Legends'da majburiy, PUBG'da umuman kerak emas. GET /v1/games javobidagi required_fields ga qarang.
  5. 202 xato emas va timeout — "yiqildi" degani emas. Javob kelmasa refund qilmang: aynan o'sha idempotency_key bilan qayta yuboring yoki holatni so'rang.
💡 Avval Sandbox bilan sinang — /test/v1/stars, /test/v1/premium, /test/v1/steam: balans yechilmaydi, hech narsa yetkazilmaydi.
Health

Health

Holat, balans va narxlar (umumiy ma'lumot)

API va Fragment holati

#
GET /v1/health ochiq

Ochiq probe — kalit talab qilinmaydi. Integratsiyani tekshirish uchun birinchi chaqiriladigan endpoint.

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/health"

Javob

200 OK
{
  "success": true,
  "delivery_provider": "smart",
  "delivery_ready": true,
  "fragment_ready": true,
  "steam_ready": true,
  "game_ready": true,
  "db_ready": true,
  "api_configured": true,
  "version": "1.0.0"
}

Javob kodlari

KodMa'nosi
200 OK

Qolgan USDT balans

#
GET /v1/balance auth

API kalitiga bog'langan USDT hamyon qoldig'i.

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/balance" \
  -H "X-API-Key: sj_..."

Javob

200 Balans
{
  "success": true,
  "balance_usdt": 28.5,
  "currency": "USDT"
}

Javob kodlari

KodMa'nosi
200 Balans
401 API kalit noto'g'ri

Narxlar (USDT)

#
GET /v1/pricing auth

Stars va Premium uchun joriy tariflar hamda chegaralar.

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/pricing" \
  -H "X-API-Key: sj_..."

Javob

200 Tariflar
{
  "success": true,
  "stars": {
    "min": 50,
    "max": 10000,
    "usdt_per_star": 0.0153
  },
  "premium": {
    "months": [
      3,
      6,
      12
    ],
    "usdt": {
      "3": 12,
      "6": 16,
      "12": 29
    }
  },
  "payment_method": "usdt_ton"
}

Javob kodlari

KodMa'nosi
200 Tariflar
401 API kalit noto'g'ri

Real-vaqt narxlar (jonli TON kursi + TON/UZS ekvivalenti)

#
GET /v1/rates auth

/v1/pricing bilan bir xil USDT tariflar, lekin jonli TON→USD kursi (TONAPI'dan, ~60s keshlanadi) hamda har mahsulot uchun hisoblangan TON va UZS ekvivalentlari bilan. Asosiy narx har doim USDT — faqat ton/uzs maydonlari kursga qarab o'zgaradi. TON provider mavjud bo'lmasa ton maydonlari null qaytadi (USDT/UZS baribir keladi).

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/rates" \
  -H "X-API-Key: sj_..."

Javob

200 Jonli narxlar
{
  "success": true,
  "base_currency": "USDT",
  "rates": {
    "ton_usd": 5.23,
    "uzs_per_usd": 12500
  },
  "stars": {
    "min": 50,
    "max": 10000,
    "usdt_per_star": 0.0153,
    "ton_per_star": 0.00287,
    "uzs_per_star": 188
  },
  "premium": {
    "months": [
      3,
      6,
      12
    ],
    "usdt": {
      "3": 12,
      "6": 16,
      "12": 29
    },
    "ton": {
      "3": 2.29,
      "6": 3.06,
      "12": 5.54
    },
    "uzs": {
      "3": 150000,
      "6": 200000,
      "12": 362500
    }
  },
  "payment_method": "usdt_ton",
  "updated_at": ""
}

Javob kodlari

KodMa'nosi
200 Jonli narxlar
401 API kalit noto'g'ri
Stars

Stars

Telegram Stars yetkazish

Stars yuborish (Fragment USDT TON)

#
POST /v1/stars auth

Telegram Stars yetkazadi. Balans atomik yechiladi, Fragment orqali yetkaziladi. Fragment xatosida balans avtomatik qaytariladi (502). Idempotency uchun idempotency_key bering.

So'rov tanasi

MaydonTurTavsif
username string majburiy

Telegram @username ( @ ixtiyoriy, 3–32 belgi )

stars integer majburiy

Stars soni (50–10000)

idempotency_key string ixtiyoriy

Takroriy so'rovda bir xil natija qaytadi — bir buyurtmaga bir unikal kalit. Tarmoq xatosida xavfsiz qayta yuborish uchun majburiy tavsiya etiladi.

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/stars" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"username":"durov","stars":500,"idempotency_key":"order-12345"}'

Javob

200 Muvaffaqiyat yoki idempotent javob
{
  "success": true,
  "order_id": 1,
  "idempotency_key": "order-12345",
  "product_type": "stars",
  "username": "durov",
  "amount": 500,
  "stars": 500,
  "usdt_charged": 7.5,
  "status": "completed",
  "transaction_id": "frg_abc123",
  "balance_remaining_usdt": 21,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Muvaffaqiyat yoki idempotent javob
400 Validatsiya xatosi
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
429 Rate limit
502 Fragment xatosi (balans qaytariladi)
503 Fragment sozlanmagan
Premium

Premium

Telegram Premium yetkazish

Premium yuborish (Fragment USDT TON)

#
POST /v1/premium auth

Telegram Premium obunasini yetkazadi (3 / 6 / 12 oy). Stars bilan bir xil oqim: atomik balans, avtomatik refund, idempotency.

So'rov tanasi

MaydonTurTavsif
username string majburiy
months integer majburiy

Premium muddati (oy)

idempotency_key string ixtiyoriy

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/premium" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"username":"durov","months":3,"idempotency_key":"order-12346"}'

Javob

200 Muvaffaqiyat
{
  "success": true,
  "order_id": 1,
  "idempotency_key": "order-12345",
  "product_type": "stars",
  "username": "durov",
  "amount": 500,
  "stars": 500,
  "usdt_charged": 7.5,
  "status": "completed",
  "transaction_id": "frg_abc123",
  "balance_remaining_usdt": 21,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Muvaffaqiyat
400 Validatsiya xatosi
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
429 Rate limit
502 Fragment xatosi (balans qaytariladi)
503 Fragment sozlanmagan
Steam

Steam

Steam hamyonini to'ldirish — Steam login bo'yicha, USD nominalda.

O'zbekiston uchun ham to'liq ishlaydi: Steam UZ akkauntlari USD_CIS narx zonasida va hamyon USD'da, shuning uchun valyuta konvertatsiyasi umuman yo'q (FX ustamasi nol).

Boshqa mahsulotlardan farqi — yetkazish asinxron bo'lishi mumkin: javob 202 va status: "processing" bo'lsa, yakunni GET /v1/steam/{order_id} bilan kuzating.

Steam narxi va chegaralari

#
GET /v1/steam/pricing auth

Chegaralar, sizning ustama foizingiz va (amount_usd berilsa) aniq yakuniy narx.

Buyurtmadan oldin shu endpointdan foydalaning — hisobni o'zingizda takrorlamang, yaxlitlash farqi bo'lmaydi.

Chegaralar provayderdan jonli olinadi, shuning uchun ular o'zgarsa javob o'zi yangilanadi.

So'rov parametrlari

NomTurTavsif
amount_usd number ixtiyoriy

Berilsa — aynan shu summa uchun quote qaytadi

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/steam/pricing" \
  -H "X-API-Key: sj_..."

Javob

200 Narxlar
{
  "success": true,
  "currency": "USDT",
  "min_usd": 1,
  "max_usd": 400,
  "markup_percent": 5,
  "provider_fee_ratio": 0.02,
  "examples": [
    {
      "amount_usd": 10,
      "provider_fee_usd": 0.2,
      "cost_usd": 10.2,
      "markup_percent": 5,
      "markup_usdt": 0.51,
      "total_usdt": 10.71
    }
  ],
  "quote": {
    "amount_usd": 10,
    "provider_fee_usd": 0.2,
    "cost_usd": 10.2,
    "markup_percent": 5,
    "markup_usdt": 0.51,
    "total_usdt": 10.71
  }
}

Javob kodlari

KodMa'nosi
200 Narxlar
401 API kalit
503 Steam o'chirilgan yoki provayder mavjud emas

Steam hamyonini to'ldirish

#
POST /v1/steam auth

Steam login bo'yicha hamyonni USD nominalda to'ldiradi.

Balansdan yechiladigan summa = amount_usd + ustama. Aniq qiymatni oldindan GET /v1/steam/pricing?amount_usd=... beradi.

Javob kodlari — muhim farq

KodMa'nosiNima qilish
200completed — Steam to'ldirilditugadi
202processing — provayder navbatidaGET /v1/steam/{order_id} bilan kuzating
402balans yetarli emaspul yechilmagan
502provayder rad etdipul qaytarildi (refunded: true)
503vaqtincha mavjud emaskeyinroq qayta urining
202 ni xato deb hisoblamang — buyurtma qabul qilingan va bajarilmoqda.

Idempotentlik

idempotency_key bering. Tarmoq uzilib, javobni olmasangiz — aynan o'sha kalit bilan qayta yuboring: ikkinchi marta pul yechilmaydi, avvalgi buyurtma qaytadi.

So'rov tanasi

MaydonTurTavsif
login string majburiy

Steam akkaunt login'i (email yoki ko'rinadigan nik EMAS).

Kechirimli qabul qilinadi: mylogin, https://steamcommunity.com/id/mylogin. Email va /profiles/7656119... (SteamID) rad etiladi — ular bilan to'ldirib bo'lmaydi.

amount_usd number majburiy

Steam hamyoniga tushadigan nominal summa (USD, ko'pi bilan 2 kasr xona). Amaldagi chegaralarni GET /v1/steam/pricing beradi (hozir $1–$400).

Bu balansdan yechiladigan summa emas — yechiladigani nominal + ustama (usdt_charged).
idempotency_key string ixtiyoriy

Takroriy so'rovda bir xil natija qaytadi. Steam'da ayniqsa muhim: yetkazish asinxron, shuning uchun tarmoq uzilsa xavfsiz qayta yuborishning yagona yo'li shu.

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/steam" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"login":"mysteamlogin","amount_usd":10,"idempotency_key":"steam-order-777"}'

Javob

200 To'ldirildi (yoki idempotent takror)
{
  "success": true,
  "order_id": 128,
  "idempotency_key": "steam-order-777",
  "product_type": "steam",
  "steam_login": "mysteamlogin",
  "steam_amount_usd": 10,
  "steam_markup_usdt": 0.51,
  "amount": 10,
  "usdt_charged": 10.71,
  "status": "completed",
  "transaction_id": "b7034b62-a10e-409c-a89e-16accbf7cd06",
  "balance_remaining_usdt": 89.5,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 To'ldirildi (yoki idempotent takror)
202 Qabul qilindi — bajarilmoqda (status: processing)
400 Login yoki summa noto'g'ri
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
429 Rate limit
502 Provayder rad etdi — balans qaytarildi
503 Steam vaqtincha mavjud emas

Steam buyurtmasi holati

#
GET /v1/steam/{order_id} auth

Buyurtma holati. Hali processing bo'lsa, provayderdan jonli holat so'raladi — ya'ni javob har doim eng yangi.

Tavsiya: 3–5 soniyada bir marta, 15 daqiqagacha. completed yoki failed — terminal holat, undan keyin so'rash shart emas.

Yo'l parametrlari

NomTurTavsif
order_id integer majburiy

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/steam/1" \
  -H "X-API-Key: sj_..."

Javob

200 Buyurtma holati
{
  "success": true,
  "order_id": 128,
  "idempotency_key": "steam-order-777",
  "product_type": "steam",
  "steam_login": "mysteamlogin",
  "steam_amount_usd": 10,
  "steam_markup_usdt": 0.51,
  "amount": 10,
  "usdt_charged": 10.71,
  "status": "completed",
  "transaction_id": "b7034b62-a10e-409c-a89e-16accbf7cd06",
  "balance_remaining_usdt": 89.5,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Buyurtma holati
400 order_id noto'g'ri
401 API kalit
404 Topilmadi
Games

Games

O'yin akkauntini to'g'ridan-to'g'ri to'ldirish — PUBG Mobile UC, Mobile Legends olmos.

Voucher kod emas: kredit o'yinchi ID si bo'yicha akkauntga to'g'ridan-to'g'ri yoziladi. Xaridor hech narsa aktivlashtirmaydi.

To'g'ri oqim

  1. GET /v1/games — o'yinlar va har biri qanday maydon talab qilishi
  2. GET /v1/games/{code}/catalogue — nominallar va siz to'laydigan narx
  3. POST /v1/games/{code}/check-player — ID ni tekshiring, nikni xaridorga ko'rsating
  4. POST /v1/games/{code}/order — buyurtma
  5. GET /v1/games/orders/{order_id} — yakunni kuzating
3-qadamni o'tkazib yubormang. Noto'g'ri ID ga yuborilgan UC yoki olmosni qaytarib bo'lmaydi — na biz, na provayder, na o'yin ishlab chiqaruvchisi uni bekor qila oladi.

Yetkazish asinxron: javob 202 va status: "processing" bo'lishi normal holat. O'lchangan vaqt — PUBG ~2 daqiqa, Mobile Legends ~1 daqiqa.

Sotuvdagi o'yinlar

#
GET /v1/games auth

Qo'llab-quvvatlanadigan o'yinlar va har biri qanday maydon talab qilishi.

required_fields ni o'qing va formani shunga qarab chizing: server_id ba'zi o'yinlarda majburiy (Mobile Legends), ba'zilarida umuman ishlatilmaydi (PUBG Mobile).

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/games" \
  -H "X-API-Key: sj_..."

Javob

200 O'yinlar ro'yxati
{
  "success": true,
  "markup_percent": 5,
  "games": [
    {
      "code": "pubgm",
      "name": "PUBG Mobile",
      "image_url": "",
      "required_fields": [
        "userid"
      ],
      "needs_server": false,
      "notes": "Not available for China, Japan, Korea, Taiwan and Vietnam region"
    }
  ]
}

Javob kodlari

KodMa'nosi
200 O'yinlar ro'yxati
401 API kalit
503 O'yin to'ldirish o'chirilgan yoki provayder mavjud emas

Nominallar va narxlar

#
GET /v1/games/{code}/catalogue auth

Nominallar va siz to'laydigan yakuniy narx (price_usdt). Hisobni o'zingizda takrorlamang — ustama va yaxlitlash shu yerda qo'llanadi.

Narx valyuta kursi bilan o'zgaradi. Buyurtmadan oldin qayta o'qing: eskirgan narx bo'yicha xaridorga aytilgan summa haqiqiy yechilgan summadan farq qilishi mumkin.
name ni aynan uzating. Katalogda o'xshash nomlar yonma-yon turadi — PUBG'da "60" (haqiqiy UC) va "60 WOW Coins" (boshqa mahsulot). Prefiks bo'yicha moslashtirish xato mahsulot sotishga olib keladi.

Yo'l parametrlari

NomTurTavsif
code string majburiy

O'yin kodi — GET /v1/games dan oling (pubgm, mlbb_global)

So'rov parametrlari

NomTurTavsif
eta string ixtiyoriy

1 bo'lsa har nominal uchun yetkazish vaqti bashorati ham qo'shiladi (sekinroq)

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/games/pubgm/catalogue" \
  -H "X-API-Key: sj_..."

Javob

200 Katalog
{
  "success": true,
  "currency": "USDT",
  "markup_percent": 5,
  "game": {
    "code": "pubgm",
    "required_fields": [
      "userid"
    ],
    "needs_server": false,
    "notes": ""
  },
  "denominations": [
    {
      "name": "60",
      "price_usdt": 0.9345,
      "eta": {
        "label": "less_than_5_minutes",
        "display": "Less than 5 minutes",
        "median_seconds": 243
      }
    }
  ]
}

Javob kodlari

KodMa'nosi
200 Katalog
400 O'yin qo'llab-quvvatlanmaydi
401 API kalit
503 Provayder vaqtincha mavjud emas

O'yinchi ID sini tekshirish (bepul)

#
POST /v1/games/{code}/check-player auth

O'yinchi ID sini tekshiradi va in-game nikni qaytaradi. Pul yechilmaydi.

Buni har doim buyurtmadan oldin chaqiring

Noto'g'ri ID ga yuborilgan UC yoki olmosni qaytarib bo'lmaydi — na biz, na provayder, na o'yin ishlab chiqaruvchisi uni bekor qila oladi. Nikni xaridorga ko'rsatib tasdiqlating: bir qadamlik tekshiruv eng qimmat xatoning oldini oladi.

Yo'l parametrlari

NomTurTavsif
code string majburiy

O'yin kodi — GET /v1/games dan oling (pubgm, mlbb_global)

So'rov tanasi

MaydonTurTavsif
player_id string majburiy

O'yinchining in-game ID si

server_id string | null ixtiyoriy

Faqat talab qiladigan o'yinlarda (needs_server: true) — masalan Mobile Legends

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/games/pubgm/check-player" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"player_id":"51221257198"}'

Javob

200 O'yinchi topildi
{
  "success": true,
  "valid": true,
  "game_code": "pubgm",
  "player_id": "51221257198",
  "player_name": "MirshodforwarD"
}

Javob kodlari

KodMa'nosi
200 O'yinchi topildi
400 ID noto'g'ri yoki server_id yetishmayapti
401 API kalit
429 Rate limit
503 Provayder vaqtincha mavjud emas

O'yin akkauntini to'ldirish

#
POST /v1/games/{code}/order auth

Kreditni o'yinchi akkauntiga to'g'ridan-to'g'ri yozadi.

Balansdan yechiladigan summa = katalogdagi price_usdt.

Javob kodlari — muhim farq

KodMa'nosiNima qilish
200completed — akkauntga tushditugadi
202processing — bajarilmoqdaGET /v1/games/orders/{order_id} bilan kuzating
400ID/nominal noto'g'ripul yechilmagan
402balans yetarli emaspul yechilmagan
502provayder rad etdipul qaytarildi (refunded: true)
503vaqtincha mavjud emaskeyinroq qayta urining
202 ni xato deb hisoblamang — buyurtma qabul qilingan. O'lchangan yetkazish vaqti: PUBG Mobile ~2 daqiqa, Mobile Legends ~1 daqiqa.

Idempotentlik

idempotency_key bering. Tarmoq uzilib javobni olmasangiz — aynan o'sha kalit bilan qayta yuboring: ikkinchi marta pul yechilmaydi va ikkinchi buyurtma yaratilmaydi.

Yo'l parametrlari

NomTurTavsif
code string majburiy

O'yin kodi — GET /v1/games dan oling (pubgm, mlbb_global)

So'rov tanasi

MaydonTurTavsif
denomination string majburiy

Katalogdagi name satri, o'zgartirilmagan holda. GET /v1/games/{code}/catalogue javobidan aynan nusxa oling.

player_id string majburiy
server_id string | null ixtiyoriy

Talab qiladigan o'yinlarda majburiy

idempotency_key string | null ixtiyoriy

Takroriy so'rovda bir xil natija qaytadi — pul ikki marta yechilmaydi. Tarmoq uzilsa aynan shu kalit bilan qayta yuboring.

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/games/pubgm/order" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"denomination":"60","player_id":"51221257198","idempotency_key":"game-order-1001"}'

Javob

200 Yetkazildi (yoki idempotent takror)
{
  "success": true,
  "order_id": 1001,
  "idempotency_key": "game-order-1001",
  "product_type": "game",
  "game_code": "pubgm",
  "denomination": "60",
  "player_id": "51221257198",
  "player_name": "MirshodforwarD",
  "usdt_charged": 0.9345,
  "balance_after": 41.0655,
  "status": "processing",
  "provider_order_id": 1327432,
  "provider_status": "PROCESSING",
  "refunded": true,
  "error": "",
  "poll": true,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Yetkazildi (yoki idempotent takror)
202 Qabul qilindi — bajarilmoqda (status: processing)
400 O'yinchi ID, nominal yoki server_id noto'g'ri
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
429 Rate limit
502 Provayder rad etdi — balans qaytarildi
503 O'yin to'ldirish vaqtincha mavjud emas

O'yin buyurtmasi holati

#
GET /v1/games/orders/{order_id} auth

Buyurtma holati. Hali processing bo'lsa provayderdan jonli holat so'raladi — javob har doim eng yangi.

Tavsiya: 3–5 soniyada bir marta. completed yoki failed — terminal holat, undan keyin so'rash shart emas.

failed bo'lsa mablag' avtomatik qaytarilgan (refunded: true) — qo'shimcha hech narsa qilish shart emas.

Yo'l parametrlari

NomTurTavsif
order_id integer majburiy

BIZNING buyurtma id (order_id), provayderniki emas

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/games/orders/1" \
  -H "X-API-Key: sj_..."

Javob

200 Buyurtma holati
{
  "success": true,
  "order_id": 1001,
  "idempotency_key": "game-order-1001",
  "product_type": "game",
  "game_code": "pubgm",
  "denomination": "60",
  "player_id": "51221257198",
  "player_name": "MirshodforwarD",
  "usdt_charged": 0.9345,
  "balance_after": 41.0655,
  "status": "processing",
  "provider_order_id": 1327432,
  "provider_status": "PROCESSING",
  "refunded": true,
  "error": "",
  "poll": true,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Buyurtma holati
400 order_id noto'g'ri
401 API kalit
404 Topilmadi
Orders

Orders

Buyurtma holati va tarixi

So'nggi buyurtmalar ro'yxati

#
GET /v1/orders auth

API kalitiga tegishli oxirgi buyurtmalar (eng yangisi birinchi).

So'rov parametrlari

NomTurTavsif
limit integer ixtiyoriy

Nechta buyurtma qaytsin (1–100, default 20)

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/orders" \
  -H "X-API-Key: sj_..."

Javob

200 Buyurtmalar ro'yxati
{
  "success": true,
  "count": 2,
  "orders": [
    {
      "order_id": 42,
      "product_type": "stars",
      "username": "durov",
      "amount": 500,
      "usdt_charged": 7.5,
      "status": "completed",
      "transaction_id": "frg_abc123",
      "created_at": "",
      "completed_at": ""
    }
  ]
}

Javob kodlari

KodMa'nosi
200 Buyurtmalar ro'yxati
401 API kalit

Bitta buyurtma holati

#
GET /v1/orders/{order_id} auth

ID bo'yicha buyurtma (faqat o'z buyurtmalaringiz).

Yo'l parametrlari

NomTurTavsif
order_id integer majburiy

So'rov

cURL
curl -X GET "https://api.starstg.uz/api/purchase/v1/orders/1" \
  -H "X-API-Key: sj_..."

Javob

200 Buyurtma
{
  "success": true,
  "order_id": 1,
  "idempotency_key": "order-12345",
  "product_type": "stars",
  "username": "durov",
  "amount": 500,
  "stars": 500,
  "usdt_charged": 7.5,
  "status": "completed",
  "transaction_id": "frg_abc123",
  "balance_remaining_usdt": 21,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Buyurtma
400 order_id noto'g'ri
401 API kalit
404 Topilmadi
Sandbox

Sandbox

Test rejimi — xuddi real kabi javob qaytaradi, lekin balans yechilmaydi va yetkazilmaydi.

So'rov formati real endpoint bilan bir xil. Javobda "test": true qo'shiladi va transaction_id test_... bilan boshlanadi. Integratsiyani xavfsiz sinash uchun ishlating.

[TEST] Stars yuborish — sandbox

#
POST /test/v1/stars auth

Real /v1/stars bilan bir xil so'rov formati. Balans yechilmaydi, Fragment chaqirilmaydi.

Javobda "test": true va "transaction_id": "test_..." bo'ladi.

So'rov tanasi

MaydonTurTavsif
username string majburiy

Telegram @username ( @ ixtiyoriy, 3–32 belgi )

stars integer majburiy

Stars soni (50–10000)

idempotency_key string ixtiyoriy

Takroriy so'rovda bir xil natija qaytadi — bir buyurtmaga bir unikal kalit. Tarmoq xatosida xavfsiz qayta yuborish uchun majburiy tavsiya etiladi.

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/test/v1/stars" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"username":"durov","stars":500,"idempotency_key":"order-12345"}'

Javob

200 Sandbox muvaffaqiyat (real yetkazilmaydi)
{
  "test": true,
  "success": true,
  "order_id": 9999,
  "idempotency_key": "",
  "product_type": "stars",
  "username": "",
  "amount": 0,
  "stars": 0,
  "months": 0,
  "usdt_charged": 7.5,
  "status": "completed",
  "transaction_id": "test_1718000000_abc123",
  "balance_remaining_usdt": 100,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Sandbox muvaffaqiyat (real yetkazilmaydi)
400 Validatsiya xatosi
401 API kalit
429 Rate limit

[TEST] Premium yuborish — sandbox

#
POST /test/v1/premium auth

Real /v1/premium bilan bir xil so'rov formati. Balans yechilmaydi, Fragment chaqirilmaydi.

So'rov tanasi

MaydonTurTavsif
username string majburiy
months integer majburiy

Premium muddati (oy)

idempotency_key string ixtiyoriy

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/test/v1/premium" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"username":"durov","months":3,"idempotency_key":"order-12346"}'

Javob

200 Sandbox muvaffaqiyat (real yetkazilmaydi)
{
  "test": true,
  "success": true,
  "order_id": 9999,
  "idempotency_key": "",
  "product_type": "stars",
  "username": "",
  "amount": 0,
  "stars": 0,
  "months": 0,
  "usdt_charged": 7.5,
  "status": "completed",
  "transaction_id": "test_1718000000_abc123",
  "balance_remaining_usdt": 100,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Sandbox muvaffaqiyat (real yetkazilmaydi)
400 Validatsiya xatosi
401 API kalit
429 Rate limit

[TEST] Steam to'ldirish — sandbox

#
POST /test/v1/steam auth

Real /v1/steam bilan bir xil so'rov va javob formati. Balans yechilmaydi, provayder chaqirilmaydi, hech qanday Steam akkaunt to'ldirilmaydi.

Javobda "test": true va transaction_id test_... bilan boshlanadi.

Sandbox har doim darhol completed qaytaradi. Realda buyurtma avval processing (202) bo'lishi mumkin — integratsiyangiz ikkala yo'lni ham qo'llab-quvvatlasin.

So'rov tanasi

MaydonTurTavsif
login string majburiy

Steam akkaunt login'i (email yoki ko'rinadigan nik EMAS).

Kechirimli qabul qilinadi: mylogin, https://steamcommunity.com/id/mylogin. Email va /profiles/7656119... (SteamID) rad etiladi — ular bilan to'ldirib bo'lmaydi.

amount_usd number majburiy

Steam hamyoniga tushadigan nominal summa (USD, ko'pi bilan 2 kasr xona). Amaldagi chegaralarni GET /v1/steam/pricing beradi (hozir $1–$400).

Bu balansdan yechiladigan summa emas — yechiladigani nominal + ustama (usdt_charged).
idempotency_key string ixtiyoriy

Takroriy so'rovda bir xil natija qaytadi. Steam'da ayniqsa muhim: yetkazish asinxron, shuning uchun tarmoq uzilsa xavfsiz qayta yuborishning yagona yo'li shu.

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/test/v1/steam" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"login":"mysteamlogin","amount_usd":10,"idempotency_key":"steam-order-777"}'

Javob

200 Sandbox muvaffaqiyat (real to'ldirilmaydi)
{
  "success": true,
  "order_id": 128,
  "idempotency_key": "steam-order-777",
  "product_type": "steam",
  "steam_login": "mysteamlogin",
  "steam_amount_usd": 10,
  "steam_markup_usdt": 0.51,
  "amount": 10,
  "usdt_charged": 10.71,
  "status": "completed",
  "transaction_id": "b7034b62-a10e-409c-a89e-16accbf7cd06",
  "balance_remaining_usdt": 89.5,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Sandbox muvaffaqiyat (real to'ldirilmaydi)
400 Validatsiya xatosi
401 API kalit
429 Rate limit