Do‘koningizni
Savdolar’ga ulang.
Katalogni oling, narxni tasdiqlang va xaridni avtomatik yetkazing. Bitta hisob, bitta balans.
https://apishop.nexa.uz/v1Barcha 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
GET /v1/servicesvaGET /v1/productsorqali katalogni oling.availableni tekshiring; aniq ombor soni oshkor qilinmaydi.POST /v1/quotesbilan mahsulot uchun yangi narx taklifi oling. Bu qadam pul yechmaydi.- Taklif narxini xaridoringizga ko‘rsating. Bitta biznes xaridi uchun yagona
Idempotency-Keyyarating va so‘rov yuborishdan oldin o‘z bazangizga yozing. POST /v1/ordersbilanquote_idni yuboring.202 queued— so‘rov saqlandi, xarid hali yakunlanmagan.GET /v1/orders/{id}ni 5 soniya oralatib tekshiring.activation_requiredbo‘lsa ko‘rsatilgan hisob identifikatorini yuboring.- Faqat
completedholatidaGET /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.
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
| Holat | Ma’nosi va keyingi qadam |
|---|---|
queued | Qabul qilindi. Hali balans rezerv qilinmagan bo‘lishi mumkin. |
processing | Xarid yuborilmoqda. Yangi xarid yaratmang. |
review_required | Natija noaniq; tizim tekshiradi. Yangi kalit yoki taxminiy refund qilmang. |
pending_delivery | To‘langan, mahsulot tayyorlanmoqda. |
activation_required | /activationga faqat kerakli email yoki identifikatorni yuboring. |
activating | Hisobda yoqilmoqda; kuting. |
completed | Yetkazish ma’lumotini olish mumkin. |
failed / cancelled | Yakunlangan. 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.
| Kod | Sarlavha | Amal |
|---|---|---|
HTTPS_REQUIRED | HTTPS kerak | API faqat https://apishop.nexa.uz orqali ishlatiladi. |
AUTH_REQUIRED | Token kerak | Authorization: Bearer TOKEN sarlavhasini yuboring. |
INVALID_TOKEN | Token yaroqsiz | Token noto‘g‘ri yoki bekor qilingan. Botdan yangi token oling. |
ACCOUNT_DISABLED | Hisob cheklangan | Yordam xizmatiga murojaat qiling. |
PHONE_REQUIRED | Hisob tasdiqlanmagan | Botda telefon raqamingizni tasdiqlang. |
SUBSCRIPTION_REQUIRED | Obuna kerak | Botdagi majburiy obuna talabini bajaring. |
MAINTENANCE | Texnik tanaffus | Yangi xaridlar vaqtincha yopiq. Keyinroq urinib ko‘ring. |
RATE_LIMITED | So‘rovlar chegarasi | Retry-After sarlavhasidagi muddatdan keyin takrorlang. |
VALIDATION_ERROR | So‘rov noto‘g‘ri | Maydonlarni API hujjatiga muvofiq yuboring. |
NOT_FOUND | Topilmadi | Resurs mavjud emas yoki bu hisobga tegishli emas. |
IDEMPOTENCY_CONFLICT | Takroriy kalit mos kelmadi | Bu kalit boshqa so‘rovda yoki taklif boshqa xaridda ishlatilgan. Eski xaridni tekshiring. |
QUOTE_EXPIRED | Taklif eskirgan | Yangi narx taklifi oling. Balansdan pul yechilmadi. |
PRODUCT_UNAVAILABLE | Hozir mavjud emas | Tarifni keyinroq tekshiring. Balansdan pul yechilmadi. |
INSUFFICIENT_BALANCE | Balans yetarli emas | Token egasining botdagi balansini to‘ldiring. |
PRICE_CHANGED | Narx yangilangan | Yangi narx taklifini oling va yangi narxni xaridoringizga tasdiqlating. |
ORDER_IN_PROGRESS | Xarid tekshirilmoqda | Oldingi buyurtma holatini tekshiring; yangi kalit bilan takroriy xarid qilmang. |
DELIVERY_PENDING | Yetkazish kutilmoqda | Buyurtma yakunlangach yetkazish ma’lumotlarini qayta so‘rang. |
ORDER_NOT_CANCELLABLE | Bekor qilib bo‘lmaydi | Faqat hali rezerv qilinmagan navbatdagi buyurtma bekor qilinadi. |
ACTIVATION_CONFLICT | Aktivatsiya tekshirilmoqda | Avval yuborilgan ma’lumot qayta ishlanmoqda. Yangi qiymat yubormang. |
UPSTREAM_UNAVAILABLE | Xizmat vaqtincha javob bermayapti | Keyinroq urinib ko‘ring. Qabul qilingan xaridni avval o‘z kaliti orqali tekshiring. |
INTERNAL_ERROR | So‘rov bajarilmadi | Yordam xizmatiga request_id bilan murojaat qiling. |
METHOD_NOT_ALLOWED | Usul qo‘llanmaydi | Ushbu manzil uchun API hujjatidagi HTTP usulidan foydalaning. |
BODY_TOO_LARGE | So‘rov juda katta | JSON 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.