API hujjati

Saytimizning ochiq API'si: raqamlarni o'z botingiz yoki dasturingiz orqali avtomatik sotib oling.

01 API nima va nimaga kerak

API — ikkita dastur bir-biri bilan gaplashadigan til. Siz saytga kirib tugma bosasiz; sizning dasturingiz esa tugma bosolmaydi — u maxsus manzilga so'rov yuboradi va javobni matn (JSON) ko'rinishida oladi.

so'rov va javob
# So'rov (siz yuborasiz):
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=balance

# Javob (server qaytaradi):
{
  "status": "ok",
  "user_id": 12,
  "balance": 125000,
  "spend": 48000,
  "currency": "UZS",
  "discount_percent": 10
}

Bu API bilan nima qila olasiz

  • Qaysi davlatlarning Telegram raqamlari sotuvda ekanini va narxini bilish
  • Tanlangan davlatdan telefon raqam sotib olish
  • O'sha raqamga kelgan tasdiqlash (SMS) kodini olish
  • Hisobingizdagi pulni tekshirish

Ko'pincha o'z Telegram botingiz yoki saytingizni qurish uchun ishlatiladi: mijoz botdan raqam so'raydi, botingiz esa fon rejimida shu API'ga murojaat qilib raqamni oladi.

02 Birinchi so'rovingiz

Uch qadamda birinchi natijani olasiz. Hech qanday dastur yozish shart emas — brauzer yetadi.

  1. API kalitni oling. Tizimga kiring → Profil → «API kalit yaratish». Kalit — sizning shaxsiy parolingiz: serverga «bu men» deb aytadi.
  2. Havolani yig'ing. Quyidagi havolada SIZNING_KALITINGIZ o'rniga o'z kalitingizni qo'ying.
  3. Brauzerga joylang va Enter bosing. Ekranda JSON javobni ko'rasiz — bu sizning birinchi API so'rovingiz.
birinchi so'rov
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=balance
Xotirjam sinang. balance va countries hech qanday pul sarflamaydi. Pul faqat getnum so'rovida yechiladi.

03 So'rov yig'uvchi

Havolani qo'lda yozish shart emas. Kerakli amalni tanlang, kalitingizni kiriting — tayyor havola o'zi yig'iladi. (Kalit hech qayerga yuborilmaydi va saqlanmaydi: hammasi brauzeringizda hisoblanadi.)

Tayyor havola

Brauzerda ochib ko'rish

04 So'rov tuzilishi

Har bir so'rov bir xil qoidaga bo'ysunadi.

havola qismlari
https://www.numbers.net.uz/api  ?  key=abc123  &  action=getnum  &  code=UZ
└── manzil ──┘  ↑  └─ 1-param ─┘ ↑  └── 2-param ──┘ ↑  └─ 3-param ─┘
                savol belgisi     ampersand          ampersand
  • Manzil — doim bir xil: https://www.numbers.net.uz/api (qisqa shakl — https://www.numbers.net.uz/ — ham ishlaydi)
  • ? — shundan keyin parametrlar boshlanadi; nom=qiymat — bitta parametr; & — parametrlarni ajratadi

GET, POST va JSON

Uchalasi ham qabul qilinadi. GET — parametrlar havolada, brauzerdan sinash uchun qulay. POST — parametrlar so'rov tanasida: kalit brauzer tarixiga va server jurnallariga tushmaydi. Haqiqiy dasturda POST ni tanlang. Kalitni X-API-Key yoki Authorization: Bearer … sarlavhasida ham yuborish mumkin.

Javobni qanday o'qish kerak

Javobda doim status maydoni bo'ladi. "ok" bo'lsa hammasi joyida. Xato bo'lsa error maydoni paydo bo'ladi va unda sabab yozilgan.

muvaffaqiyat
{
  "status": "ok",
  "balance": 125000
}
xatolik
{
  "status": "error",
  "error": "Noto'g'ri API kalit"
}
Eng ko'p uchraydigan xato: javobni tekshirmasdan darhol phone ni o'qish. Xato qaytganda bu maydon bo'lmaydi va dasturingiz «yiqiladi». Avval status ni tekshiring.

05 API kalit

Kalit — hisobingizga to'liq kirish huquqi: u orqali balansingizni ko'rish va pulingizga raqam sotib olish mumkin.

Kalitni hech kimga bermang. Uni brauzerdagi JavaScript ichiga, GitHub'ga yoki skrinshotga joylamang — faqat o'z serveringizda turishi kerak. Boshqaga ma'lum bo'lib qolsa, Profildan darhol yangisini yarating: eski kalit shu zahoti ishlamay qoladi.

Kalit qanday saqlanadi

Kalit bazada faqat xesh ko'rinishida saqlanadi, shuning uchun u yaratilgan paytda bir marta ko'rsatiladi. Yo'qotsangiz — yangisini yaratasiz.

IP cheklovi

Kalit birinchi marta getnum bilan ishlatilganda, so'rov kelgan IP avtomatik saqlanadi — keyin raqamni faqat shu IP dan olish mumkin. Boshqa IP dan kelgan so'rov pulga tegilmasdan rad etiladi. IP ni almashtirish (5 tagacha) yoki cheklovni o'chirish — Profil → «IP manzilga bog'lash» bo'limida.

shunday QILMANG
// Brauzerda ishlaydigan kod — kalit hammaga ko'rinadi!
fetch("https://www.numbers.net.uz/api?key=abc123&action=balance")
shunday TO'G'RI
// Server tomonidagi kod — kalit yashirin
$key = getenv("NOMERSAYT_KEY");
$url = "https://www.numbers.net.uz/api?key=$key&action=balance";

06 balance GET / POST pul sarflamaydi

Hisobingizdagi pul miqdorini va shu paytgacha sarflangan summani qaytaradi.

so'rov
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=balance
ParametrTavsifHolat
keyAPI kalitingizmajburiy
actionQiymati: balancemajburiy
javob
{
  "status": "ok",
  "user_id": 12,
  "balance": 125000,
  "spend": 48000,
  "currency": "UZS",
  "discount_percent": 10
}
MaydonMa'nosi
statusok — so'rov muvaffaqiyatli bajarildi
user_idHisobingiz raqami (ID)
balanceHozirgi balansingiz, so'mda
spendShu paytgacha jami sarflangan summa (raqamlar va tariflar)
currencyValyuta — doim UZS (so'm)
discount_percentTarifingizdan keladigan chegirma foizi. Tarif bo'lmasa 0

07 countries GET / POST pul sarflamaydi

Hozir sotuvda turgan davlatlar va narxlarini qaytaradi. getnum ga yuboradigan code qiymatini shu yerdan olasiz.

so'rov
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=countries
javob
{
  "status": "ok",
  "count": 87,
  "currency": "UZS",
  "discount_percent": 10,
  "countries": [
    {
      "code": "UZ",
      "name": "Uzbekistan",
      "price": 5491,
      "price_without_discount": 6864
    },
    {
      "code": "RU",
      "name": "Russia",
      "price": 8112
    }
  ]
}
MaydonMa'nosi
countRo'yxatdagi davlatlar soni
countriesDavlatlar ro'yxati (massiv). Har bir element — bitta davlat
codeEng muhimi. Shu qiymatni getnum ga yuborasiz
nameDavlat nomi — foydalanuvchiga ko'rsatish uchun
priceSiz to'laydigan narx, so'mda. Chegirmangiz allaqachon hisobga olingan
price_without_discountChegirmasiz narx. Faqat chegirmangiz bo'lsa keladi — «tejadingiz» deb ko'rsatish uchun qulay
Maslahat: davlatlar ro'yxati tez-tez o'zgarmaydi. Uni dasturingizda bir marta olib, bir necha daqiqa saqlab turing — dasturingiz sezilarli tezlashadi.

08 getnum GET / POST

Tanlangan davlatdan bitta Telegram uchun telefon raqam sotib oladi va narxini balansingizdan yechadi. Keyin unga kelgan kodni getsms orqali olasiz.

so'rov
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=getnum&code=UZ
ParametrTavsifHolat
keyAPI kalitingizmajburiy
actionQiymati: getnummajburiy
codeDavlat kodi — countries javobidagi code. Masalan UZmajburiy
javob
{
  "status": "ok",
  "phone": "+998901234567",
  "hash": "+998901234567",
  "price": 5491,
  "price_without_discount": 6864,
  "currency": "UZS",
  "discount_percent": 10,
  "country": "Uzbekistan",
  "country_code": "UZ",
  "balance": 119509,
  "order_id": 1042
}
MaydonMa'nosi
phoneSotib olingan telefon raqam. Ro'yxatdan o'tayotgan saytga (Telegramga) shuni kiritasiz
hashBuni saqlab qo'ying. getsms so'roviga aynan shu qiymat kerak
priceBalansingizdan yechilgan summa, so'mda
price_without_discountChegirmasiz narx (faqat chegirma bo'lsa)
discount_percentSizga qo'llangan chegirma foizi
country / country_codeDavlat nomi va kodi
balanceXariddan keyingi yangi balansingiz
order_idBuyurtma raqami (saytdagi «Buyurtmalar» bo'limida ham ko'rinadi)
Puldan xavotir olmang. Ta'minotchi raqam bera olmasa yoki aloqa uzilsa, yechilgan summa avtomatik balansingizga qaytariladi. Xato javobida "refunded": true ko'rsangiz — pul allaqachon o'z joyida.
Raqamni yo'qotib qo'ymang. Javob kelishi bilan phone va hash ni bazangizga yozib qo'ying. (Yo'qotsangiz, raqam saytdagi «Buyurtmalar» bo'limida turadi.)

09 getsms GET / POST pul sarflamaydi

Sotib olgan raqamingizga kelgan tasdiqlash kodini qaytaradi. Kod hali kelmagan bo'lsa «SMS kodi hali kelmadi» javobi qaytadi — bu normal holat, biroz kutib qayta so'rang.

so'rov
https://www.numbers.net.uz/api?key=SIZNING_KALITINGIZ&action=getsms&hash=%2B998901234567
ParametrTavsifHolat
keyAPI kalitingizmajburiy
actionQiymati: getsmsmajburiy
hashgetnum javobidan olingan hashmajburiy
javob (kod keldi)
{
  "status": "ok",
  "sms": "12345",
  "password": "",
  "phone": "+998901234567"
}
javob (kod hali kelmadi)
{
  "status": "error",
  "error": "SMS kodi hali kelmadi",
  "waiting": true
}
MaydonMa'nosi
smsKelgan tasdiqlash kodi
passwordIkki bosqichli himoya (2FA) paroli. Ko'p hollarda bo'sh bo'ladi
phoneQaysi raqamga tegishli ekani
waitingtrue — kod hali kelmagan (xato emas), qayta so'rang

Havoladagi «+» belgisi

URL manzilida + belgisi bo'sh joy degani. Shuning uchun raqamni havolaga to'g'ridan-to'g'ri yozsangiz, plyus yo'qolib ketishi mumkin. To'g'ri yo'l — qiymatni kodlash (%2B): PHP'da urlencode(), JavaScript'da encodeURIComponent(), Python'da requests buni o'zi qiladi. Yoki oddiygina POST ishlating. Xotirjam bo'ling: server plyus yo'qolgan holatni ham tushunadi.

Kod darhol kelmaydi. Odatda 5–60 soniyada yetib keladi. Har 5 soniyada bir marta so'rang va 2–3 daqiqadan keyin to'xtating. Kutishsiz uzluksiz sikl (while(true)) yozmang.
Faqat o'z raqamingiz. Har bir raqam kim tomonidan sotib olinganini tizim yozib boradi. Boshqa odamning raqamiga kelgan kodni o'qib bo'lmaydi.

10 To'liq stsenariy

Boshidan oxirigacha bitta amaliy misol: mijozga O'zbekiston raqamini sotib berish.

  1. Balansni tekshiring. Pul yetarli ekaniga ishonch hosil qiling: action=balance
  2. Davlatlar ro'yxatini oling. Kerakli davlatning code va price ini toping: action=countries
  3. Raqam sotib oling. Javobdagi hash ni albatta saqlang: action=getnum&code=UZ
  4. Raqamni Telegramga kiriting. Telegram shu raqamga kod yuboradi.
  5. Kodni so'rang. Kod kelmaguncha har 5 soniyada takrorlang, lekin 3 daqiqadan oshirmang: action=getsms&hash=…
  6. Kodni ishlating. Tayyor. Bir raqam odatda bitta ro'yxatdan o'tish uchun mo'ljallangan.

11 Kod namunalari

Nusxalab oling; kalitni o'zgaruvchiga (yoki muhit o'zgaruvchisiga) qo'ying. Har bir namuna to'liq ishlaydigan dastur.

PHP — to'liq dastur
<?php
$key  = getenv("NOMERSAYT_KEY");          // kalitni serverda, muhit o'zgaruvchisida saqlang
$base = "https://www.numbers.net.uz/api";

/** API ga so'rov yuboruvchi yordamchi funksiya (POST: kalit server jurnaliga tushmaydi). */
function api($action, array $params = array()) {
    global $key, $base;
    $params["key"]    = $key;
    $params["action"] = $action;

    $ch = curl_init($base);
    curl_setopt_array($ch, array(
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($params),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 40,
    ));
    $body = curl_exec($ch);
    curl_close($ch);

    $data = json_decode((string)$body, true);
    return is_array($data) ? $data : array("status" => "error", "error" => "Javob JSON emas");
}

// 1. Balans
$bal = api("balance");
if ($bal["status"] !== "ok") exit("Xatolik: " . $bal["error"]);
echo "Balans: " . $bal["balance"] . " so'm\n";

// 2. Davlatlar
$c = api("countries");
if ($c["status"] !== "ok") exit("Xatolik: " . $c["error"]);
foreach ($c["countries"] as $country) {
    echo $country["code"] . " - " . $country["name"] . " - " . $country["price"] . " so'm\n";
}

// 3. Raqam sotib olish (pul yechiladi!)
$num = api("getnum", array("code" => "UZ"));
if ($num["status"] !== "ok") exit("Raqam olinmadi: " . $num["error"]);
$phone = $num["phone"];
$hash  = $num["hash"];                     // buni saqlab qo'ying
echo "Raqam: $phone\n";

// 4. SMS kodni kutish (har 5 soniyada, ko'pi bilan 3 daqiqa)
$code = null;
for ($i = 0; $i < 36; $i++) {
    sleep(5);
    $r = api("getsms", array("hash" => $hash));
    if ($r["status"] === "ok") { $code = $r["sms"]; break; }
    if (empty($r["waiting"])) { echo "Xatolik: " . $r["error"] . "\n"; break; }   // "kod hali kelmadi" bo'lmasa — to'xtaymiz
}
echo $code ? "SMS kod: $code\n" : "Kod olinmadi\n";

12 Chegirma

Chegirma tariflar orqali beriladi va avtomatik qo'llanadi — promokod yoki qo'shimcha parametr yuborish shart emas. Tariflar sahifasidan tarifni sotib oling: amal qilish muddati davomida sayt va API orqali olingan har bir raqam arzonroq bo'ladi.

Chegirmangiz bor-yo'qligini qanday bilasiz

balance so'rovini yuboring va javobdagi discount_percent maydoniga qarang (0 — chegirma yo'q).

hisob-kitob
Oddiy narx              6 864 so'm
        ↓  chegirma ayiriladi (−10%)
Siz to'laysiz            5 491 so'm
Ro'yxatdagi narx — aynan to'lanadigan narx. countries qaytargan price chegirmangiz hisobga olingan holda keladi: ro'yxatda ko'rgan narxingiz bilan balansdan yechiladigan summa bir xil.

13 Xatoliklar

Xatolik bo'lsa javobda error maydoni paydo bo'ladi (HTTP kodi ham mos ravishda o'zgaradi). Dasturingiz avval shuni tekshirsin.

Xabar (error)HTTPSababiNima qilish kerak
API kalit ko'rsatilmagan401So'rovda key parametri yo'qHavolaga &key=... qo'shing
Noto'g'ri API kalit401Kalit noto'g'ri yozilgan yoki almashtirilganProfil bo'limidan kalitni qayta oling. Bo'sh joy tushib qolmaganini tekshiring
Noto'g'ri so'rov400action yozilmagan yoki noto'g'riFaqat balance, countries, getnum, getsms ishlaydi
Davlat kodi (code) ko'rsatilmagan400getnum ga code berilmagan&code=UZ ko'rinishida qo'shing
Bu davlat uchun narx topilmadi404Bunday kod yo'q yoki davlat vaqtincha sotuvda emascountries dan joriy ro'yxatni oling
Balans yetarli emas402Hisobda pul kamHisobni to'ldiring. Javobda need maydonida kerakli summa yozilgan
Raqam olishda xatolik yuz berdi502Ta'minotchida shu davlat raqamlari tugagan yoki aloqa uzilganBoshqa davlat tanlang. Pul avtomatik qaytariladi (javobda refunded)
SMS kodi hali kelmadi200Kod hali yetib bormagan (javobda waiting: true)5 soniya kutib qayta so'rang. Bu xato emas, normal holat
Bu raqam sizga tegishli emas403Boshqa hisob sotib olgan raqam so'ralyaptiFaqat o'zingiz olgan raqamlarning kodini olishingiz mumkin
Ruxsat etilmagan IP manzildan so'rov yuborildi403IP cheklovi yoqilgan, so'rov esa ruxsat etilgan IP dan kelmadi (javobdagi ip — serverga ko'ringan manzil)Profil → «IP manzilga bog'lash» bo'limida IP ni almashtiring yoki cheklovni o'chiring. Pul yechilmaydi
Telefon raqam formati noto'g'ri400hash buzilgan holda yuborilgangetnum javobidagi qiymatni o'zgartirmasdan yuboring
Bu raqam uchun kod olib bo'lmaydi (buyurtma bekor qilingan)400Buyurtma bekor qilingan, pul qaytarilganYangi raqam sotib oling
So'rovlar juda ko'p. Birozdan so'ng urinib ko'ring429Tezlik chegarasi oshdi (javobda retry_after — necha soniya kutish kerak)So'rovlarni siyrakroq yuboring
Hisobingiz bloklangan403Hisob administrator tomonidan bloklangan«Murojaat» orqali yozing
Xizmat vaqtincha mavjud emas503Texnik ishlar yoki ta'minotchi bilan aloqa yo'qBirozdan so'ng qayta urining

Tezlik chegaralari

Har bir kalit uchun daqiqada 120 ta so'rov, shundan getnum — 20 ta, getsms — 60 ta; bitta IP dan daqiqada 300 ta. Chegaradan oshsangiz 429 va retry_after (soniya) qaytadi.