★ 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 🕹 9 ta o'yin — PUBG · Mobile Legends · Free Fire · va boshqalar
Boshlanish nuqtasi
Base URL
Autentifikatsiya
X-API-Key: sj_...
27endpoint
USDTyagona balans
24/7avto yetkazish
Boshlash

Integratsiya

Tashqi tizimlar ushbu API orqali Telegram Stars, Premium, Steam hamyoni, o'yin akkauntlari va gift card kodlarini sotadi.

MahsulotEndpointYetkazish
⭐️ Telegram StarsPOST /v1/starssinxron (javobda natija)
💎 Telegram PremiumPOST /v1/premiumsinxron
🎮 Steam hamyoniPOST /v1/steamasinxron bo'lishi mumkin (202 → polling)
🕹 O'yin akkaunti (24 ta o'yin)POST /v1/games/{code}/orderasinxron (~1–2 daqiqa, 202 → polling)
🎁 Gift card kodi (16 brend)POST /v1/giftcards/{category_id}/orderasinxron (~23 sekund, 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.

Gift card boshqalardan TUBDAN farq qiladi: mahsulot qabul qiluvchi hisobiga tushmaydi, u matn ko'rinishidagi kod sifatida qaytariladi va xaridor uni o'zi aktivlashtiradi. Kod FAQAT GET /v1/giftcards/orders/{order_id} javobida beriladi — buyurtmalar ro'yxatida u yo'q, chunki kod bearer instrument: kim ko'rsa, o'sha ishlatib yuboradi va qaytarib bo'lmaydi.
Sotuvdagi o'yinlar

Ro'yxat kodda qattiq yozilmasin — GET /v1/games dan oling, biz o'yin qo'shsak integratsiyangiz o'zgarishsiz ko'radi. Hozirgi holat:

O'yincodeValyutaserver_id
PUBG MobilePUBG MobilepubgmUC—
Mobile LegendsMobile Legendsmlbb_globalolmosmajburiy
Magic Chess GogoMagic Chess Gogomagic_chess_gogoolmosmajburiy
Delta ForceDelta ForcedeltaforceCoins—
Free FireFree Firefreefire_globalolmos—
Bigo LiveBigo Livebigoolmos—
Honor of KingsHonor of Kingshoktoken—
Asphalt 9Asphalt 9asphalt9tokenmajburiy — platforma
CoD MobileCoD Mobilecodm_sgmyCP—
Honkai: Star RailHonkai: Star Railhonkai_star_railOneiric Shardmajburiy
Zenless Zone ZeroZenless Zone ZerozenlessMonochromemajburiy
Arena BreakoutArena Breakoutarena_breakoutBond—
Arena Breakout: InfiniteArena Breakout: Infinitearena_breakout_infBond—
Age of Empire MobileAge of Empire Mobileage_of_empireGemmajburiy
Ace RacerAce Racerace_racerTokenmajburiy
Football Master 2Football Master 2football_master2FMP—
Legend of NeverlandLegend of Neverlandlegend_neverlandpaket—
Modern Strike OnlineModern Strike Onlinemodern_strikeCredit—
Modern WarshipsModern Warshipsmodern_warshipsGold—
PUBG: New StatePUBG: New Statepubg_new_stateNC—
Rainbow Six MobileRainbow Six Mobiler6_mobilePlatinum—
IMOIMOimoolmos—
LikeeLikeelikeeolmos—
CapCutCapCutcapcutobuna—
MINTAQA CHEKLOVI BU JADVALDA YO'Q — ATAYLAB. Uni GET /v1/games javobidagi notes maydonidan o'qing, chunki cheklov BIZ ISHLATAYOTGAN yetkazib beruvchiga qarab o'zgaradi va bu yerda qotirib qo'yilsa eskirib qoladi. O'lchangan misol: mlbb_global bir yetkazib beruvchida "faqat Indoneziya", boshqasida "barcha mintaqa". notes esa HAR DOIM amaldagi holatni ko'rsatadi.
Noto'g'ri mintaqadagi o'yinchiga yuborsangiz buyurtma failed bo'ladi — mablag' qaytadi, lekin xaridor kutib qoladi. Mintaqasi notes da ko'rsatilgan o'yinlarda buni xaridorga OLDIN aytib qo'ying.
Asphalt 9'da server_id — o'yin serveri emas, platforma. Qiymatlarni GET /v1/games javobidagi servers obyektidan oling (Android/Windows/iOS); "ios" kichik harf bilan yozilsa buyurtma yiqiladi.

Autentifikatsiya

🔑 Kalitni qayerdan olasiz — @StarsPaymee_Api_bot. Telegram'da botni oching va /start bosing: ro'yxatdan o'tasiz, kalit darhol beriladi, balansni to'ldirish yo'riqnomasi ham o'sha yerda. Kalit faqat bir marta ko'rsatiladi — bazada uning o'zi emas, SHA-256 xeshi saqlanadi. Ya'ni yo'qotsangiz biz ham tiklay olmaymiz, botdan yangisini olasiz (eskisi shu zahoti ishlamay qoladi).

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.

Takror deb faqat aynan bir xil so'rov hisoblanadi: o'sha kalit + o'sha mahsulot, qabul qiluvchi va miqdor. Bitta API kalitini bir nechta botingiz ishlatsa va kalitlar tasodifan mos kelib qolsa (masalan, ikki bot ham order-<raqam> qilsa), boshqa qabul qiluvchi yoki miqdorli so'rov yangi alohida buyurtma sifatida bajariladi — boshqa botning eski buyurtmasi qaytarilmaydi. Javobdagi idempotency_key siz yuborgan qiymat bo'lib qoladi. Shunda ham har botga o'z prefiksini bergan ma'qul (bot2-order-123).

"Bir xil so'rov" maydonlari: Stars/Premium — username + stars/months; Steam — login + amount_usd; o'yin — o'yin + denomination + player_id + server_id; gift card — brend + card_id + quantity; sovg'a — recipient + gift_id + hide_name + message. Qayta yuborishda so'rov tanasini o'zgartirmang. ⚠️ Gift cardda qabul qiluvchi yo'q: bir kalitda ikki bot bir xil nominalni olsa, ular bir buyurtma deb hisoblanadi — gift card uchun har botga alohida prefiks shart.

30 soniyada integratsiya

Bu — oddiy REST + JSON API. PHP, Node.js, Python yoki istalgan til HTTP request orqali ulanadi.

0-qadam — kalit oling: @StarsPaymee_Api_bot → /start. Quyidagi misollardagi sj_... o'rniga o'sha kalitni qo'ying.

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 (9 ta o'yin — ro'yxat GET /v1/games da)

To'liq oqim — ID tekshiruvidan yakunigacha:

JS
const H = { "X-API-Key": "sj_...", "Content-Type": "application/json" };
const GAME = "pubgm"; // kodni GET /v1/games dan oling

// 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.9167
O'yin to'ldirish uchun 6 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, aks holda mijoz boshqa mahsulot oladi: - PUBG: "60" (haqiqiy UC) va "60 WOW Coins" — butunlay boshqa narsa - Delta Force: "Meltdown Supplies" ($0.46) ⊂ "Meltdown Supplies - Advanced" ($1.37) - Honor of Kings: "Weekly Card" ⊂ "Weekly Card Plus" - Bigo Live: "5" ⊂ "50" ⊂ "500" ⊂ "5000" — bu yerda startsWith ming barobar qimmat nominalni tanlab yuborishi mumkin
  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, Magic Chess va Asphalt 9'da majburiy, qolganlarida umuman kerak emas. GET /v1/games javobidagi required_fields ga qarang. Agar o'sha javobda servers obyekti bo'lsa — qiymatni aynan o'sha ro'yxatdan oling (Asphalt 9'da bu platforma).
  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.
  6. O'yinlar mintaqaviy cheklangan bo'lishi mumkin — notes ni o'qing. GET /v1/games javobidagi notes har o'yin qaysi mintaqaga ishlashini aytadi va bu kod nomiga MOS KELMASLIGI mumkin (codm_sgmy — faqat SG/MY, freefire_global — CIS). Cheklov yetkazib beruvchiga qarab O'ZGARADI, shuning uchun uni kodingizda qotirib qo'ymang: har doim jonli notes ni o'qing. Cheklangan mintaqadagi o'yinchiga yuborilgan buyurtma failed bo'ladi (mablag' qaytariladi, lekin xaridor kutib qoladi).
💡 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,
  "giftcard_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. Takror = o'sha kalit + o'sha qabul qiluvchi va miqdor; boshqasi bilan kelsa yangi buyurtma bo'ladi. 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, Mobile Legends, Magic Chess Gogo, Delta Force, Free Fire, Bigo Live, Honor of Kings, Asphalt 9, CoD Mobile.

Ro'yxatni kodga yozib qo'ymang — GET /v1/games dan oling.

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, qolganlari ~1 daqiqa.

O'yinlar mintaqaviy cheklangan bo'lishi mumkin. GET /v1/games javobidagi notes ni o'qing — cheklov KOD NOMIGA MOS KELMASLIGI mumkin (masalan codm_sgmy faqat Singapur/Malayziya, freefire_global esa CIS). Cheklov yetkazib beruvchiga qarab o'zgaradi, shuning uchun yagona ishonchli manba — jonli notes. Cheklangan mintaqadagi o'yinchiga yuborilgan buyurtma failed bo'ladi.

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": 3,
  "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",
      "servers": {
        "Android": "Android",
        "Windows": "Windows",
        "iOS": "iOS"
      }
    }
  ]
}

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": 3,
  "game": {
    "code": "pubgm",
    "required_fields": [
      "userid"
    ],
    "needs_server": false,
    "notes": ""
  },
  "denominations": [
    {
      "name": "60",
      "price_usdt": 0.9167,
      "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.9167,
  "balance_after": 41.0833,
  "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.9167,
  "balance_after": 41.0833,
  "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
Giftcards

Giftcards

Gift card kodlari — App Store & iTunes (TR/RU/US), Google Play (TR/US), Roblox, Xbox (TR/US), Microsoft Windows, Minecraft (Java & Bedrock / Minecoins), Epic Games, Fortnite (US/EU), Standoff 2, Discord Nitro.

Ro'yxatni kodga yozib qo'ymang — GET /v1/giftcards dan oling.

Boshqa mahsulotlardan TUBDAN farq qiladi

Bu yerda mahsulot qabul qiluvchi hisobiga tushmaydi — u matn ko'rinishidagi kod sifatida sizga qaytariladi va uni xaridor o'zi aktivlashtiradi. Shuning uchun player_id / username kabi maydonlar yo'q va noto'g'ri ID xavfi ham yo'q.

To'g'ri oqim

  1. GET /v1/giftcards — brendlar va mintaqa izohlari (notes)
  2. GET /v1/giftcards/{category_id}/catalogue — nominallar, narx va zaxira
  3. POST /v1/giftcards/{category_id}/order — buyurtma (202 processing)
  4. GET /v1/giftcards/orders/{order_id} — kod AYNAN shu yerda qaytadi
Kod faqat 4-qadamda beriladi. Buyurtma javobida ham, buyurtmalar ro'yxatida (GET /v1/orders) ham codes maydoni yo'q — kod bearer instrument, ya'ni kim ko'rsa o'sha ishlatib yuboradi. O'lchangan tayyorlanish vaqti — ~23 sekund.
Kodni qaytarib bo'lmaydi. Bir marta berilgandan keyin "ishlamadi" degan da'voni tekshirishning texnik imkoni yo'q va provayder ham uni bekor qila olmaydi. Kodni olgach o'zingizda xavfsiz saqlang.
MINTAQAGA e'tibor bering. notes da "Region: TR" kabi izoh bo'ladi — boshqa mamlakat akkauntida kod ishlamaydi.
ZAXIRA cheklangan va notekis (stock): ba'zi nominalda mingdan ortiq, ba'zisida 2 dona. quantity > stock bo'lgan so'rov 400 bilan rad etiladi va pul yechilmaydi.

Sotuvdagi gift card brendlari

#
GET /v1/giftcards auth

Qo'llab-quvvatlanadigan brendlar va mintaqa izohlari (notes).

notes ni o'qing: "Region: TR" degan kod boshqa mamlakat akkauntida ishlamaydi va qaytarib bo'lmaydi.

Nominallar, narx va zaxira alohida endpointda: GET /v1/giftcards/{category_id}/catalogue.

So'rov

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

Javob

200 Brendlar ro'yxati
{
  "success": true,
  "markup_percent": 6,
  "giftcards": [
    {
      "category_id": "app_store_itunes_tr",
      "name": "App Store & iTunes (TR)",
      "notes": "Region: TR\nCodes can be safely stored and redeemed later."
    }
  ]
}

Javob kodlari

KodMa'nosi
200 Brendlar ro'yxati
401 API kalit
503 Gift card sotuvi o'chirilgan yoki provayder mavjud emas

Nominallar, narxlar va zaxira

#
GET /v1/giftcards/{category_id}/catalogue auth

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

stock ni tekshiring. Gift card o'yin to'ldirishdan aynan shu bilan farq qiladi: mahsulot omborda sanoqli va zaxira juda notekis (ba'zi nominalda 2 dona). quantity > stock bo'lgan buyurtma 400 bilan rad etiladi va pul yechilmaydi.
card_id ni aynan uzating ("10_try"), nomni emas — nomlar takrorlanishi mumkin.
Narx valyuta kursi bilan o'zgaradi — buyurtmadan oldin qayta o'qing.

Yo'l parametrlari

NomTurTavsif
category_id string majburiy

Brend kodi — GET /v1/giftcards dan oling

So'rov

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

Javob

200 Katalog
{
  "success": true,
  "currency": "USDT",
  "category_id": "app_store_itunes_tr",
  "markup_percent": 6,
  "denominations": [
    {
      "card_id": "10_try",
      "name": "10 TRY",
      "price_usdt": 0.2213,
      "stock": 130,
      "min_quantity": 1,
      "max_quantity": 100
    }
  ]
}

Javob kodlari

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

Gift card xaridi

#
POST /v1/giftcards/{category_id}/order auth

Gift card kodini sotib oladi.

Balansdan yechiladigan summa = katalogdagi price_usdt × quantity.

⚠️ Kod bu javobda QAYTMAYDI

Xarid 202 processing bilan boshlanadi va kodlar o'lchangan holatda ~23 sekundda tayyor bo'ladi. Kodni faqat GET /v1/giftcards/orders/{order_id} beradi — bu ataylab yagona joy, kod buyurtmalar ro'yxatida hech qachon ko'rinmaydi.

Javob kodlari — muhim farq

KodMa'nosiNima qilish
200completed — kodlar tayyorbitta buyurtma endpointidan oling
202processing — tayyorlanmoqdaGET /v1/giftcards/orders/{order_id} bilan kuzating
400nominal/miqdor noto'g'ri yoki zaxira yetmaydipul yechilmagan
402balans yetarli emaspul yechilmagan
502provayder rad etdipul qaytarildi (refunded: true)
503vaqtincha mavjud emaskeyinroq qayta urining

Idempotentlik

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

Yo'l parametrlari

NomTurTavsif
category_id string majburiy

Brend kodi — GET /v1/giftcards dan oling

So'rov tanasi

MaydonTurTavsif
card_id string majburiy

Katalogdagi card_id, o'zgartirilmagan holda. GET /v1/giftcards/{category_id}/catalogue dan oling.

quantity integer ixtiyoriy

Kodlar soni. Katalogdagi stock, min_quantity va max_quantity chegaralariga sig'ishi kerak — aks holda 400 (pul yechilmaydi).

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/giftcards/app_store_itunes_tr/order" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"card_id":"10_try","quantity":1,"idempotency_key":"giftcard-order-1001"}'

Javob

200 Kodlar tayyor (yoki idempotent takror)
{
  "success": true,
  "order_id": 1001,
  "idempotency_key": "giftcard-order-1001",
  "product_type": "giftcard",
  "category_id": "app_store_itunes_tr",
  "card_id": "10_try",
  "denomination": "10 TRY",
  "quantity": 1,
  "usdt_charged": 0.2213,
  "balance_after": 28.2787,
  "status": "processing",
  "codes_count": 1,
  "codes": [
    "XK5F2WMDRC3X75Z9"
  ],
  "provider_order_id": "ord-1302060",
  "provider_status": "processing",
  "refunded": true,
  "error": "",
  "poll": true,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Kodlar tayyor (yoki idempotent takror)
202 Qabul qilindi — kodlar tayyorlanmoqda (status: processing)
400 Nominal, miqdor yoki zaxira muammosi (pul yechilmaydi)
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
429 Rate limit
502 Provayder rad etdi — balans qaytarildi
503 Gift card sotuvi vaqtincha mavjud emas

Gift card buyurtmasi holati va KODLAR

#
GET /v1/giftcards/orders/{order_id} auth
Bu — kodni beradigan yagona endpoint. Buyurtmalar ro'yxati (GET /v1/orders) codes maydonini hech qachon qaytarmaydi: kod bearer instrument, ya'ni kim ko'rsa o'sha ishlatib yuboradi.

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

Tavsiya: 3–5 soniyada bir marta. status: "completed" kelganda codes massivi to'la bo'ladi va uzunligi quantity ga teng — shundan keyin so'rash shart emas.

Kodni olgach o'zingizda xavfsiz saqlang: uni qaytarib bo'lmaydi.

failed bo'lsa mablag' avtomatik qaytarilgan (refunded: true).

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/giftcards/orders/1" \
  -H "X-API-Key: sj_..."

Javob

200 Buyurtma holati (va `completed` bo'lsa `codes`)
{
  "success": true,
  "order_id": 1001,
  "idempotency_key": "giftcard-order-1001",
  "product_type": "giftcard",
  "category_id": "app_store_itunes_tr",
  "card_id": "10_try",
  "denomination": "10 TRY",
  "quantity": 1,
  "usdt_charged": 0.2213,
  "balance_after": 28.2787,
  "status": "processing",
  "codes_count": 1,
  "codes": [
    "XK5F2WMDRC3X75Z9"
  ],
  "provider_order_id": "ord-1302060",
  "provider_status": "processing",
  "refunded": true,
  "error": "",
  "poll": true,
  "created_at": "",
  "completed_at": ""
}

Javob kodlari

KodMa'nosi
200 Buyurtma holati (va completed bo'lsa codes)
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. Takror = o'sha kalit + o'sha qabul qiluvchi va miqdor; boshqasi bilan kelsa yangi buyurtma bo'ladi. 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
Sovg'alar

Sovg'alar

Sovg'alar katalogi

#
GET /v1/gifts auth

Sotuvdagi Telegram sovg'alari va siz to'laydigan narx.

Katalog Telegram tomonidan boshqariladi va sovg'alar sotilib tugaydi — ro'yxatni kodga yozib qo'ymang, har safar shu endpointdan oling.

gift_id — satr. U 64-bitli son, JS number aniqligidan oshadi: songa aylantirsangiz qiymat jimgina buziladi.

So'rov

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

Javob

200 Katalog
{
  "success": true,
  "count": 11,
  "stars_range": {
    "min": 15,
    "max": 100
  },
  "gifts": [
    {
      "gift_id": "5170145012310081615",
      "stars": 15,
      "price_usdt": 0.2475,
      "emoji": "💝",
      "limited": false
    }
  ]
}

Javob kodlari

KodMa'nosi
200 Katalog
401 API kalit
503 Sovg'a xizmati sozlanmagan

Sovg'a yuborish

#
POST /v1/gifts auth

Telegram sovg'asini yuboradi. Yetkazish sinxron va odatda bir soniyadan tez — javob kelganda sovg'a allaqachon qabul qiluvchida bo'ladi.

Muhim: ba'zi foydalanuvchilar Telegram maxfiylik sozlamasida sovg'a qabul qilishni yopib qo'ygan bo'ladi. Bunday holatda 400 va error_code: "recipient_refuses" qaytadi — balans yechilmaydi. Bu tizim nosozligi emas, qabul qiluvchining tanlovi.

hide_name: true — jo'natuvchi qabul qiluvchining ommaviy profilida ko'rinmaydi (qabul qiluvchining o'zi baribir kimdan kelganini ko'radi).

So'rov tanasi

MaydonTurTavsif
recipient string majburiy

Telegram @username ( @ ixtiyoriy )

gift_id string majburiy

GET /v1/gifts dan olingan satr

hide_name boolean ixtiyoriy

true — jo'natuvchi ommaviy profilda ko'rinmaydi (qabul qiluvchining o'zi baribir ko'radi)

message string ixtiyoriy

Sovg'aga biriktiriladigan matn

idempotency_key string ixtiyoriy

Takroriy so'rov bir marta bajarilishi uchun

So'rov

cURL
curl -X POST "https://api.starstg.uz/api/purchase/v1/gifts" \
  -H "X-API-Key: sj_..." \
  -H "Content-Type: application/json" \
  -d '{"recipient":"durov","gift_id":"5170145012310081615","hide_name":true,"message":"Tabriklayman!","idempotency_key":"gift-2026-0001"}'

Javob

200 Idempotent javob (o'sha kalit bilan avval yuborilgan)
{
  "success": true,
  "order_id": 1042,
  "status": "completed",
  "recipient": "durov",
  "gift_id": "5170145012310081615",
  "stars": 15,
  "emoji": "💝",
  "hide_name": false,
  "message": "Tabriklayman!",
  "usdt_charged": 0.2475,
  "error": "",
  "error_code": "recipient_refuses",
  "refunded": true,
  "created_at": ""
}

Javob kodlari

KodMa'nosi
200 Idempotent javob (o'sha kalit bilan avval yuborilgan)
201 Yuborildi
400 Validatsiya yoki qabul qiluvchi rad etdi (error_code)
401 API kalit
402 Balans yetarli emas (pul yechilmaydi)
502 Yuborib bo'lmadi — balans qaytariladi
503 Sovg'a ombori vaqtincha bo'sh yoki xizmat sozlanmagan

Sovg'a animatsiyasi (.tgs)

#
GET /v1/gifts/{gift_id}/sticker auth

Sovg'aning Lottie animatsiyasi.

Javob Content-Encoding: gzip bilan keladi — brauzer uni o'zi ochadi va sizga tayyor Lottie JSON tegadi (pako kabi kutubxona kerak emas). lottie-web ga to'g'ridan-to'g'ri path sifatida bering.

Yo'l parametrlari

NomTurTavsif
gift_id string majburiy —

So'rov

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

Javob kodlari

KodMa'nosi
200 Lottie JSON (gzip)
401 API kalit
404 Stiker topilmadi