Asosiy kontentga o'tish
MilliySavdo

Xatolar

Barcha xatolar RFC 9457 application/problem+json formatida. Barqaror code maydoni bo'yicha tarmoqlang — to'liq xato kodlari ro'yxati.

Format#

Xato javoblari Content-Type: application/problem+json bilan qaytadi (RFC 9457):

MaydonTavsif
typeHujjatdagi xato sahifasiga URI (…/docs/errors#<code>)
titleQisqa, odam o'qiy oladigan sarlavha
statusHTTP status kodi
detailAniq holat bo'yicha tushuntirish (o'zgarishi mumkin — kodda solishtirmang)
codeBarqaror mashina kodi — mantiqni shunga qarab quring
request_idSo'rov ID si (X-Request-Id bilan bir xil)
errorsFaqat validation_error: [{field, message}]
{
  "type": "https://api.milliysavdo.uz/docs/errors#validation_error",
  "title": "Maydonlar tekshiruvdan o'tmadi",
  "status": 422,
  "detail": "So'rov maydonlari noto'g'ri",
  "code": "validation_error",
  "errors": [
    {
      "field": "country_id",
      "message": "Input should be greater than or equal to 1",
      "type": "greater_than_equal"
    },
    {
      "field": "service_code",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "request_id": "req_a9ce2c4d85f7162a99297d2c"
}
{
  "type": "https://api.milliysavdo.uz/docs/errors#not_found",
  "title": "Topilmadi",
  "status": 404,
  "detail": "Buyurtma topilmadi",
  "code": "not_found",
  "request_id": "req_6e73e3f1328ea25dd4272531"
}

Xatolarni qayta ishlash#

Python
resp = requests.post(f"{API}/orders", json=payload, headers=headers, timeout=30)
if resp.ok:
    order = resp.json()
else:
    problem = resp.json()
    match problem.get("code"):
        case "insufficient_balance":
            notify_user("Balansni to'ldiring")
        case "out_of_stock" | "service_unavailable":
            try_another_country()
        case "rate_limited" | "upstream_unavailable":
            retry_later(int(resp.headers.get("Retry-After", 5)))
        case _:
            log.error("MilliySavdo xatosi %s (%s)", problem.get("code"), problem.get("request_id"))

API xato kodlari#

codeHTTPMa'nosiNima qilish kerak
invalid_request400So'rov noto'g'riSo'rov formatini tekshiring (detail da sabab). Qayta yuborishdan oldin tuzating.
validation_error422Maydonlar tekshiruvdan o'tmadierrors[] dagi field/message bo'yicha maydonlarni tuzating.
authentication_required401API kalit berilmaganAuthorization: Bearer <kalit> headerini qo'shing.
invalid_api_key401API kalit yaroqsizKalit to'liq va to'g'ri nusxalanganini tekshiring; kerak bo'lsa yangisini yarating.
api_key_expired401API kalit muddati tugaganKabinetda yangi kalit yarating yoki rotatsiya qiling.
api_key_revoked401API kalit bekor qilinganKalit bekor qilingan — yangi kalit yarating.
api_key_in_query400API kalit URL'da yuborilmasinKalitni URL dan olib tashlang va faqat Authorization headerida yuboring. Kalitni rotatsiya qiling — u loglarga tushgan bo'lishi mumkin.
insufficient_scope403Kalitda bu amal uchun ruxsat yo'qKerakli scope bilan yangi kalit yarating (masalan, orders:write).
live_access_not_granted403Production ruxsati berilmaganProduction ruxsatiga ariza bering yoki test kalitdan foydalaning.
client_suspended403Akkaunt vaqtincha to'xtatilganKabinetdagi banner'da sabab va muddat ko'rsatilgan. Savollar bo'lsa qo'llab-quvvatlashga yozing.
client_blocked403Akkaunt bloklanganQo'llab-quvvatlash xizmatiga murojaat qiling.
ip_not_allowed403IP manzil ruxsat ro'yxatida yo'qSo'rovni ruxsat etilgan server IP sidan yuboring yoki allowlist ni yangilashni so'rang.
forbidden403Ruxsat yo'qBu resursga ruxsatingiz yo'q.
not_found404TopilmadiID va yo'lni tekshiring; buyurtma boshqa rejim (test/live) kaliti bilan yaratilgan bo'lishi mumkin.
conflict409Holat ziddiyatiResurs holatini qayta o'qing va amalni takrorlang.
idempotency_in_progress409Shu Idempotency-Key bilan so'rov hali bajarilmoqdaBirinchi so'rov tugashini kuting, so'ng o'sha Idempotency-Key bilan qayta yuboring.
idempotency_key_reused422Idempotency-Key boshqa so'rov uchun ishlatilganHar bir yangi buyurtma uchun yangi Idempotency-Key (UUID) yarating.
sms_already_received409SMS kod allaqachon kelganBekor qilish shart emas — SMS kodni buyurtmadan oling.
order_not_cancellable409Buyurtmani bekor qilib bo'lmaydiBuyurtma yakuniy holatda; GET /orders/{id} bilan holatni tekshiring.
insufficient_balance402Balans yetarli emasmilliysavdo.uz da balansni to'ldiring va qayta urining.
out_of_stock409Raqamlar tugaganBoshqa davlatni tanlang yoki keyinroq urining (GET /prices dagi in_stock).
service_unavailable409Xizmat vaqtincha ishlamayaptiXizmat vaqtincha yopiq — keyinroq yoki boshqa davlat bilan urining.
rate_limited429So'rovlar chegarasi oshdiRetry-After soniya kuting; exponential backoff qo'llang.
quota_exceeded429Kunlik/oylik kvota tugadiKunlik/oylik kvota tugadi — keyingi davrni kuting yoki limitni oshirishni so'rang.
order_limit_reached429Buyurtmalar chegarasi oshdiFaol buyurtmalar tugashini kuting yoki kunlik limit yangilanishini kuting.
too_many_failed_orders429SMS kelmagan buyurtmalar ko'p — vaqtincha cheklovSMS kelmagan buyurtmalar ko'p — xizmat/davlat tanlovini tekshiring, cheklov vaqtincha.
temporarily_blocked429Shubhali trafik — vaqtincha cheklovRetry-After'ga amal qilmay juda ko'p so'rov yuborildi — ko'rsatilgan vaqt kuting va backoff qo'shing.
upstream_unavailable503Operator bilan aloqa yo'qOperator bilan aloqa yo'q — biroz kutib, backoff bilan qayta urining.
internal_error500Ichki xatoQayta urining; takrorlansa request_id bilan bizga yozing.

Kabinet (portal) xato kodlari#

Bu kodlar faqat dasturchilar kabineti API sida uchraydi.

codeHTTPMa'nosiNima qilish kerak
session_required401Portal sessiyasi yo'q yoki tugaganKabinet: qaytadan kiring.
csrf_failed403So'rov manbasi tasdiqlanmadiKabinet: sahifani yangilang va qayta urining.
invalid_grant400SSO kodi yaroqsiz yoki muddati tugaganKabinet: kirish kodi eskirgan — qayta kiring.
webhook_url_rejected422Webhook manzili qabul qilinmadiOmmaviy https:// manzil kiriting (localhost/xususiy IP taqiqlangan).
limit_reached409Chegara: yangi obyekt yaratib bo'lmaydiObyektlar soni limitga yetgan — keraksizlarini o'chiring.