Do‘koningizni
Savdolar’ga ulang.

Katalogni oling, narxni tasdiqlang va xaridni avtomatik yetkazing. Bitta hisob, bitta balans.

https://apishop.nexa.uz/v1

Barcha narxlar butun so‘mda (UZS). Narx botdagi do‘kon bilan bir xil; API uchun alohida ustama yo‘q. API xaridi token yaratilgan Telegram hisobining balansidan to‘lanadi. Balansni botda to‘ldiring.

Tokenni olish

@Savdolar_Robot → Start → API → Token yaratish. Qoidalarni qabul qilgach token bir marta ko‘rsatiladi. Bir hisobda bitta faol token bor; almashtirish eskisini darhol bekor qiladi.

Authorization: Bearer sav_live_…
Content-Type: application/json

Tokenni faqat server muhit o‘zgaruvchisida saqlang. Brauzer JavaScript’i, mobil ilova, GitHub, log yoki URL ichiga joylamang. CORS brauzerdan to‘g‘ridan-to‘g‘ri maxfiy API ishlatish uchun ochilmagan. Saytingiz brauzeri o‘z serveringizga, serveringiz esa ushbu API’ga murojaat qiladi.

Telefon tasdig‘i, hisob cheklovi, majburiy obuna va texnik tanaffus bot bilan bir xil hisobga olinadi. Bitta token uchun daqiqasiga 60 so‘rov, shundan 10 ta yozuvchi so‘rov; IP uchun 240 so‘rov. 429 javobida Retry-Afterni kuting. Bir so‘rov tanasi 16 KB dan oshmaydi.

Bir xaridning to‘liq yo‘li

  1. GET /v1/services va GET /v1/products orqali katalogni oling. availableni tekshiring; aniq ombor soni oshkor qilinmaydi.
  2. POST /v1/quotes bilan mahsulot uchun yangi narx taklifi oling. Bu qadam pul yechmaydi.
  3. Taklif narxini xaridoringizga ko‘rsating. Bitta biznes xaridi uchun yagona Idempotency-Key yarating va so‘rov yuborishdan oldin o‘z bazangizga yozing.
  4. POST /v1/orders bilan quote_idni yuboring. 202 queued — so‘rov saqlandi, xarid hali yakunlanmagan.
  5. GET /v1/orders/{id}ni 5 soniya oralatib tekshiring. activation_required bo‘lsa ko‘rsatilgan hisob identifikatorini yuboring.
  6. Faqat completed holatida GET /v1/orders/{id}/deliveryni chaqiring. Javobdagi matn yoki havolalarni faqat shu xaridorning shaxsiy kabinetida ko‘rsating.
POST /v1/quotes
{"product_id": 109, "quantity": 1}

POST /v1/orders
Idempotency-Key: myshop-order-42
{"quote_id": "0123456789abcdef", "customer_reference": "myshop-order-42"}

Mahsulot IDlari namuna; joriy katalogdan oling. Narx taklifi 5 daqiqa amal qiladi. API faqat quantity: 1ni qo‘llaydi. O‘z xaridoringizni shu narxga rozi qilmasdan buyurtma yubormang.

Timeout, 500 yoki ulanish uzilishi pul yechilmaganini anglatmaydi. Yangi kalit yaratmang. Avval GET /v1/orders/lookup?idempotency_key=…, keyin kerak bo‘lsa ayni kalit va ayni JSON bilan POST’ni takrorlang. Lookup 404 bo‘lsa ham darhol yangi kalit yaratmang: so‘rov hali serverga yetib borayotgan bo‘lishi mumkin.

Javob shakli

{
  "ok": true,
  "data": {"amount": 150000, "currency": "UZS"},
  "request_id": "opaque-support-id"
}

Ro‘yxatlarda data massiv bo‘ladi. meta.next_cursorni keyingi sahifaning cursor maydoniga yuboring; null — oxirgi sahifa. Vaqtlar UTC Unix soniyalarda. Yangi javob maydonlarini inkor qilmang: v1 ichida qo‘shimcha maydonlar qo‘shilishi mumkin; nom yoki ma’no buzilsa yangi v2 chiqariladi.

API v1 endpointlari

GET /v1/me

Hisob va limitlar. Javob: 200, Me.

GET /v1/balance

Token egasining joriy balansi. Javob: 200, Money.

GET /v1/balance/transactions

Balans harakatlari. Javob: 200, Transaction[].

GET /v1/services

Xizmatlar va eng arzon mavjud tarif. Javob: 200, Service[].

GET /v1/products

Tariflar, narxlar va mavjudlik. Javob: 200, Product[].

GET /v1/products/{pid}

Tarifning to‘liq tavsifi. Javob: 200, Product.

POST /v1/quotes

5 daqiqalik narx taklifi; pul yechilmaydi. JSON sxemasi: QuoteInput. Javob: 201, Quote.

GET /v1/quotes/{oid}

O‘zingiz yaratgan narx taklifi. Javob: 200, Quote.

POST /v1/orders

Xaridni navbatga qabul qilish. JSON sxemasi: OrderInput. Javob: 202, Order.

GET /v1/orders

API orqali yaratilgan o‘z buyurtmalaringiz. Javob: 200, Order[].

GET /v1/orders/lookup

Idempotency-Key orqali avvalgi buyurtma. Javob: 200, Order.

GET /v1/orders/{oid}

Buyurtmaning joriy holati. Javob: 200, Order.

GET /v1/orders/{oid}/delivery

Faqat yakunlangan xaridning maxfiy ma’lumotlari. Javob: 200, Delivery.

POST /v1/orders/{oid}/cancel

Faqat hali rezerv qilinmagan queued buyurtmani bekor qilish. Javob: 200, Order.

POST /v1/orders/{oid}/activation

Aktivatsiya ma’lumotini bir marta yuborish. JSON sxemasi: ActivationInput. Javob: 200, Order.

OpenAPI 3.1 sxemasini olish

Sxemada barcha kirish va chiqish maydonlari, turlar, majburiy sarlavhalar hamda statuslar berilgan. POST JSON’da noma’lum maydonlar qabul qilinmaydi. customer_reference faqat o‘zingiz uchun; u idempotentlik kalitining o‘rnini bosmaydi.

Holatni to‘g‘ri talqin qiling

HolatMa’nosi va keyingi qadam
queuedQabul qilindi. Hali balans rezerv qilinmagan bo‘lishi mumkin.
processingXarid yuborilmoqda. Yangi xarid yaratmang.
review_requiredNatija noaniq; tizim tekshiradi. Yangi kalit yoki taxminiy refund qilmang.
pending_deliveryTo‘langan, mahsulot tayyorlanmoqda.
activation_required/activationga faqat kerakli email yoki identifikatorni yuboring.
activatingHisobda yoqilmoqda; kuting.
completedYetkazish ma’lumotini olish mumkin.
failed / cancelledYakunlangan. charged va refunded orqali shu buyurtmaning moliyaviy holatini tekshiring.

Balans faqat atomik rezervda yechiladi. Yetkazib beruvchi pul yechilmaganini tasdiqlasa yoki buyurtma bekor bo‘lsa, shu xaridning summasi bir marta qaytariladi. Noaniq holatda mablag‘ natija aniqlanguncha band turadi. completed keyinchalik provayder bekor qilsa cancelledga o‘tishi mumkin. Bir hisobda bir paytda faqat bitta processing/review_required xarid bo‘lishi mumkin.

Aktivatsiya yuborilgach timeout bo‘lsa, qayta yubormang. So‘rov alohida saqlanadi va holati tekshiriladi. Faqat queued buyurtmani /cancel orqali bekor qilish mumkin; poyga holatida 409 qaytishi mumkin.

Xato har doim tushunarli

{
  "ok": false,
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "title": "Balans yetarli emas",
    "description": "Token egasining botdagi balansini to‘ldiring.",
    "details": [],
    "retryable": false
  },
  "request_id": "opaque-support-id"
}

HTTP: 400/422 noto‘g‘ri so‘rov; 401 token; 403 hisob/obuna; 402 balans; 404 resurs; 409 konflikt; 429 limit; 500/503 vaqtinchalik xato. retryable yangi xarid yaratishga ruxsat bermaydi. POST xaridda kalit va tana o‘zgarmasligi shart.

KodSarlavhaAmal
HTTPS_REQUIREDHTTPS kerakAPI faqat https://apishop.nexa.uz orqali ishlatiladi.
AUTH_REQUIREDToken kerakAuthorization: Bearer TOKEN sarlavhasini yuboring.
INVALID_TOKENToken yaroqsizToken noto‘g‘ri yoki bekor qilingan. Botdan yangi token oling.
ACCOUNT_DISABLEDHisob cheklanganYordam xizmatiga murojaat qiling.
PHONE_REQUIREDHisob tasdiqlanmaganBotda telefon raqamingizni tasdiqlang.
SUBSCRIPTION_REQUIREDObuna kerakBotdagi majburiy obuna talabini bajaring.
MAINTENANCETexnik tanaffusYangi xaridlar vaqtincha yopiq. Keyinroq urinib ko‘ring.
RATE_LIMITEDSo‘rovlar chegarasiRetry-After sarlavhasidagi muddatdan keyin takrorlang.
VALIDATION_ERRORSo‘rov noto‘g‘riMaydonlarni API hujjatiga muvofiq yuboring.
NOT_FOUNDTopilmadiResurs mavjud emas yoki bu hisobga tegishli emas.
IDEMPOTENCY_CONFLICTTakroriy kalit mos kelmadiBu kalit boshqa so‘rovda yoki taklif boshqa xaridda ishlatilgan. Eski xaridni tekshiring.
QUOTE_EXPIREDTaklif eskirganYangi narx taklifi oling. Balansdan pul yechilmadi.
PRODUCT_UNAVAILABLEHozir mavjud emasTarifni keyinroq tekshiring. Balansdan pul yechilmadi.
INSUFFICIENT_BALANCEBalans yetarli emasToken egasining botdagi balansini to‘ldiring.
PRICE_CHANGEDNarx yangilanganYangi narx taklifini oling va yangi narxni xaridoringizga tasdiqlating.
ORDER_IN_PROGRESSXarid tekshirilmoqdaOldingi buyurtma holatini tekshiring; yangi kalit bilan takroriy xarid qilmang.
DELIVERY_PENDINGYetkazish kutilmoqdaBuyurtma yakunlangach yetkazish ma’lumotlarini qayta so‘rang.
ORDER_NOT_CANCELLABLEBekor qilib bo‘lmaydiFaqat hali rezerv qilinmagan navbatdagi buyurtma bekor qilinadi.
ACTIVATION_CONFLICTAktivatsiya tekshirilmoqdaAvval yuborilgan ma’lumot qayta ishlanmoqda. Yangi qiymat yubormang.
UPSTREAM_UNAVAILABLEXizmat vaqtincha javob bermayaptiKeyinroq urinib ko‘ring. Qabul qilingan xaridni avval o‘z kaliti orqali tekshiring.
INTERNAL_ERRORSo‘rov bajarilmadiYordam xizmatiga request_id bilan murojaat qiling.
METHOD_NOT_ALLOWEDUsul qo‘llanmaydiUshbu manzil uchun API hujjatidagi HTTP usulidan foydalaning.
BODY_TOO_LARGESo‘rov juda kattaJSON tanasi 16 KB dan oshmasin.

Server tomoni uchun namunalar

O‘z bazangizda xaridor buyurtmasi, Idempotency-Key, taklifning ayni JSON tanasi va biz qaytargan buyurtma IDni saqlang. Yetkazish matni turli mahsulotda turlicha bo‘lishi mumkin: API uni plain_text va alohida links ko‘rinishida beradi. HTML sifatida bajarib yubormang.