Buyurtmalar

Ushbu bo'lim jo'natma bo'yicha narxni hisoblash, buyurtma yaratish va jo'natmaning holatlar tarixini olish uchun API'larni tavsiflaydi.

1. Umumiy

Barcha so'rovlar {BASE_URL}/api/v2/orders/... manziliga yuboriladi. Bazaviy URL va token Starex tomonidan beriladi.

Authorization: Bearer {TOKEN}
Content-Type: application/json
Accept: application/json
Accept-Language: uz
Ushbu bo'limdagi barcha metodlar uchun akkauntingizda «Buyurtmalar» servisi yoqilgan bo'lishi shart. Aks holda -401 xatoligi qaytadi.

Metodlar ro'yxati:

MetodManzilVazifasi
POST /api/v2/orders/calculate Yetkazish narxini hisoblash
POST /api/v2/orders/create Buyurtma (jo'natma) yaratish
GET /api/v2/orders/trace Jo'natmaning holatlar tarixi
Narxlar tiyinda qaytadi. Masalan 4500000 — bu 45 000 so'm.

2. Yetkazish turi

service maydoni jo'natma qayerga yetkazilishini belgilaydi va boshqa qaysi maydonlar majburiy bo'lishini aniqlaydi.

serviceTuriMajburiy maydon
1 Uyigacha (kuryer manzilga yetkazadi) receiver_district_id + receiver_address
2 PVZgacha (filialdan olib ketiladi) receiver_branch_id

Tuman va filial ID'lari Ma'lumotnomalar bo'limidagi API'lardan olinadi.

service = 1 bo'lganda receiver_branch_id e'tiborga olinmaydi, service = 2 bo'lganda esa receiver_district_id e'tiborga olinmaydi.

3. Narxni hisoblash

Jo'natma yaratishdan oldin yetkazish narxini hisoblab olish uchun.

POST {BASE_URL}/api/v2/orders/calculate

So'rov parametrlari
ParametrTurMajburiyTavsif
sender_district_idintegerHaYuboruvchi tumani ID
sender_addressstringYo'qYuboruvchi manzili
serviceintegerHa1 — uyigacha, 2 — PVZgacha
receiver_district_idintegerservice=1 uchun haQabul qiluvchi tumani ID
receiver_branch_idintegerservice=2 uchun haFilial (PVZ) ID
receiver_addressstringYo'qQabul qiluvchi manzili
weightnumberHaOg'irligi, kg (masalan 1.5)
So'rov namunasi
POST {BASE_URL}/api/v2/orders/calculate
Authorization: Bearer {TOKEN}
Content-Type: application/json
{
  "sender_district_id": 12,
  "sender_address": "Amir Temur ko'chasi, 1",
  "receiver_district_id": 45,
  "receiver_address": "Mustaqillik ko'chasi, 20",
  "weight": 1.5,
  "service": 1
}
Javob (200)
{
  "success": true,
  "data": {
    "price": 4500000,
    "from_town": { "code": 3922, "name": "TASHKENT" },
    "to_town": { "code": 3969, "name": "SAMARKAND" },
    "mass": 1.5,
    "service": { "code": 1, "name": "Kuryerlik yetkazish" }
  }
}
MaydonTurTavsif
priceintegerYetkazish narxi, tiyinda
from_town.codeinteger|nullYuboruvchi shahri kodi (Starex ichki kodi)
from_town.namestring|nullYuboruvchi shahri nomi
to_town.codeinteger|nullQabul qiluvchi shahri kodi
to_town.namestring|nullQabul qiluvchi shahri nomi
massnumber|nullHisobga olingan og'irlik (kg)
service.codeinteger|nullYetkazish turi kodi
service.namestring|nullYetkazish turi nomi
service = 2 (PVZ) bo'lganda to_town bo'sh qaytishi mumkin — bu holda manzil filial orqali aniqlanadi.

4. Buyurtma yaratish

Yangi jo'natma yaratadi va shtrix-kod (barcode) qaytaradi.

POST {BASE_URL}/api/v2/orders/create

So'rov parametrlari
ParametrTurMajburiyTavsif
sender_district_idintegerHaYuboruvchi tumani ID
sender_personstringYo'qYuboruvchi ismi
sender_phonestringYo'qYuboruvchi telefoni
sender_addressstringYo'qYuboruvchi manzili
serviceintegerHa*1 — uyigacha, 2 — PVZgacha
receiver_district_idintegerservice=1 uchun haQabul qiluvchi tumani ID
receiver_branch_idintegerservice=2 uchun haFilial (PVZ) ID
receiver_personstringHa**Qabul qiluvchi ismi (jismoniy shaxs)
receiver_companystringHa**Qabul qiluvchi kompaniya nomi
receiver_phonestringHaQabul qiluvchi telefoni
receiver_addressstringYo'qQabul qiluvchi manzili (uyigacha uchun kerak)
weightnumberYo'qOg'irligi, kg

* Texnik jihatdan bo'sh qoldirish mumkin, lekin bu holda jo'natma manzilsiz ketadi — doim 1 yoki 2 yuboring.

** receiver_person yoki receiver_company dan kamida bittasi bo'lishi shart.

Muhim: receiver_person va receiver_company ni bir vaqtda yubormang — ikkalasi ham yuborilsa, qabul qiluvchi nomi jo'natmaga tushmay qoladi. Jismoniy shaxs uchun faqat receiver_person, yuridik shaxs uchun faqat receiver_company yuboring.
So'rov namunasi (uyigacha)
POST {BASE_URL}/api/v2/orders/create
Authorization: Bearer {TOKEN}
Content-Type: application/json
{
  "sender_district_id": 12,
  "sender_person": "Ali Valiyev",
  "sender_phone": "998901234567",
  "sender_address": "Amir Temur ko'chasi, 1",
  "receiver_district_id": 45,
  "receiver_person": "Vali Aliyev",
  "receiver_phone": "998907654321",
  "receiver_address": "Mustaqillik ko'chasi, 20",
  "weight": 1.5,
  "service": 1
}
So'rov namunasi (PVZgacha)
{
  "sender_district_id": 12,
  "sender_person": "Ali Valiyev",
  "sender_phone": "998901234567",
  "receiver_branch_id": 7,
  "receiver_person": "Vali Aliyev",
  "receiver_phone": "998907654321",
  "weight": 1.5,
  "service": 2
}
Javob (200)
{
  "success": true,
  "data": {
    "order_code": "AB123456789UZ",
    "price": 4500000,
    "api_response": {
      "orderNo": "123456",
      "barcode": "AB123456789UZ",
      "error": 0,
      "errorMessage": null,
      "errorMessageRu": null,
      "orderPrice": 45000
    }
  }
}
MaydonTurTavsif
order_codestring|nullShtrix-kod (barcode) — keyingi barcha so'rovlarda va webhook'da shu ishlatiladi
priceinteger|nullJo'natma narxi, tiyinda
api_response.orderNostring|nullJo'natmaning ichki raqami
api_response.barcodestring|nullShtrix-kod
api_response.errorinteger|null0 — muvaffaqiyatli, boshqa qiymat — xatolik
api_response.errorMessagestring|nullXatolik matni
api_response.errorMessageRustring|nullXatolik matni (rus tilida)
api_response.orderPricenumber|nullNarx (so'mda, tiyinsiz)
Diqqat: jo'natma yaratishda tashqi tizim xatolik qaytarsa ham, javob "success": true bilan keladi. Shuning uchun har doim data.api_response.error ni tekshiring: 0 bo'lsa — jo'natma yaratilgan, aks holda — yo'q.

Xatolik bilan qaytgan javob namunasi:

{
  "success": true,
  "data": {
    "order_code": null,
    "price": null,
    "api_response": {
      "orderNo": null,
      "barcode": null,
      "error": 1,
      "errorMessage": "Wrong town code",
      "errorMessageRu": "Неверный код города",
      "orderPrice": null
    }
  }
}
Buyurtma yaratilgandan so'ng u Starex tizimiga tushadi va holatlari o'zgara boshlaydi. Holatlarni jo'natma holatlari so'rovi yoki webhook orqali kuzatib borasiz.

5. Jo'natma holatlari

Bitta jo'natma bo'yicha holatlar tarixini shtrix-kod orqali qaytaradi.

GET {BASE_URL}/api/v2/orders/trace

ParametrTurMajburiyTavsif
barcodestringHaJo'natmaning shtrix-kodi
GET {BASE_URL}/api/v2/orders/trace?barcode=AB123456789UZ
Authorization: Bearer {TOKEN}
Accept: application/json
Javob (200)
{
  "success": true,
  "data": {
    "barcode": "AB123456789UZ",
    "date": "2026-06-10 09:00:00",
    "weight": 1.5,
    "recipient": "Vali Aliyev",
    "trace": [
      { "code": 1, "name": "Новый",     "advanced": "NEW",      "statetime": "2026-06-10 09:00:00", "branch": "Toshkent markaziy ombori", "description": "Buyurtma qabul qilindi" },
      { "code": 9, "name": "Доставлен", "advanced": "COMPLETE", "statetime": "2026-06-15 14:30:00", "branch": "Samarqand filiali",        "description": "Qabul qiluvchiga topshirildi" }
    ]
  }
}
MaydonTurTavsif
barcodestringJo'natmaning shtrix-kodi
datestring|nullQabul qilingan sana-vaqt
weightnumber|nullOg'irligi (kg)
recipientstring|nullQabul qiluvchi
trace[]arrayHolatlar tarixi (vaqt bo'yicha o'sish tartibida)
trace[].codeintegerHolat kodi (6-bo'lim)
trace[].namestring|nullHolat nomi (rus tilida)
trace[].advancedstring|nullTil-neytral mnemonik kod (masalan NEW)
trace[].statetimestring|nullHolat vaqti
trace[].branchstring|nullHolat qayd etilgan filial yoki ombor nomi
trace[].descriptionstring|nullHolat bo'yicha qo'shimcha izoh

Shtrix-kod topilmasa:

{
  "success": false,
  "error": {
    "code": -404,
    "message": "Ma'lumot topilmadi"
  }
}

6. Holat kodlari

Jo'natmaning har bir holati raqamli code bilan belgilanadi. Bu kodlar bir xil ma'noda uchta joyda ishlatiladi:

Kodlarning ma'nosini olish uchun ma'lumotnoma so'rovi:

GET {BASE_URL}/api/v2/dictionaries/states

{
  "success": true,
  "data": [
    { "code": 0, "name": "Ожидает синхронизации", "advanced": "AWAITING_SYNC" },
    { "code": 1, "name": "Новый",                  "advanced": "NEW" },
    { "code": 9, "name": "Доставлен",              "advanced": "COMPLETE" }
  ]
}
MaydonTurTavsif
codeintegerHolat kodi
namestring|nullHolat nomi (rus tilida)
advancedstring|nullBarqaror, til-neytral mnemonik kod
Muhim: holatlar ro'yxati doimiy emas — yangi holatlar qo'shilishi yoki mavjudlari o'zgarishi mumkin. Ro'yxatni kodingizga "qotirib" qo'ymang; uni API'dan olib, keshlab ishlating.

7. Xatoliklar

Xatolik bo'lganda javobda success = false bo'ladi va error obyekti qaytadi:

{
  "success": false,
  "error": {
    "code": -2006,
    "message": "Tuman tanlanishi shart"
  }
}
KodHTTPSabab
422422Maydonlar validatsiyasi (masalan receiver_phone yo'q)
401401Token yuborilmagan yoki yaroqsiz
-423423Akkaunt bloklangan
-401200«Buyurtmalar» servisiga ruxsat yo'q
-500200Akkauntingiz uchun kirish sozlamalari to'liq emas — Starex bilan bog'laning
-2001200Yuboruvchi tumani topilmadi
-2002200Qabul qiluvchi tumani topilmadi
-2004200Qabul qiluvchi filiali topilmadi
-2005200receiver_person ham, receiver_company ham yuborilmagan
-2006200service=1, lekin receiver_district_id yo'q
-2007200service=2, lekin receiver_branch_id yo'q
-404200Jo'natma topilmadi (trace uchun)
100200Kutilmagan ichki xatolik
Xato matni Accept-Language sarlavhasiga qarab uz, ru yoki en tilida qaytadi.