Yuklash API

Yuklarni yuboring, optimallashtirilgan va fizik jihatdan toʻgʻri yuk rejasi — joylashuvlar, yuklash metrlari, chiziqli futlar va hisoblangan pallet pozitsiyalarini oling. Ilova orqasidagi xuddi shu mexanizm, haqiqiy dispetcher tartiblari bilan uzluksiz tekshiriladi. Har bir tarif rejasida sinov muhiti mavjud; ishlab chiqarish rejimi faqat Enterprise uchun.

Tez boshlash

  1. Tizimga kiring → ismingizni bosing → API → kalit yarating.
  2. Yuklash topshirigʻini yuboring (bu sinov muhitida ishlaydi — har bir tarif rejasida bepul):
curl -X POST https://hansatic.com/api/v1/pack \
  -H "Authorization: Bearer hk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "vehicle": "CURTAINSIDER_136",
    "objective": "ldm",
    "sandbox": true,
    "items": [{
      "name": "Machine crate",
      "length": 2300, "width": 750, "height": 1400,
      "weight": 300, "quantity": 7,
      "stackable": false, "tiltable": false
    }]
  }'
{
  "job_id": "5e3617d1-abe4-4549-b7e6-d18c6baf814f",
  "status": "queued",
  "sandbox": true,
  "status_url": "https://hansatic.com/api/v1/jobs/5e3617d1-..."
}

status_url manzilini soʻrov yuboring (xuddi shu autentifikatsiya sarlavhasi bilan) to status "done" holatiga kelguncha:

{
  "job_id": "5e3617d1-...",
  "status": "done",
  "result": {
    "placed_count": 7,
    "unplaced_count": 0,
    "units": "metric",
    "metrics": {
      "ldm_m": 5.25,
      "span_mm": 5250,
      "linear_ft": 17.2,
      "pallet_positions_eur": 14,
      "total_weight_kg": 2100,
      "overlaps": 0
    },
    "items": [
      { "id": "...", "name": "Machine crate", "placed": true,
        "x": 8370, "y": 0, "z": 0,
        "rotation_deg": 90, "tilt_deg": 0, "...": "..." }
    ],
    "plan_url": "https://hansatic.com/en/app/plans/..."
  }
}

Ulanish nuqtalari

POST /api/v1/pack

Yuklash topshirigʻini tekshiradi va navbatga qoʻyadi. 202 va job_id qaytaradi. Idempotency-Key sarlavhasi qoʻllab-quvvatlanadi — bir xil kalit bilan qayta urinishlar asl topshiriqni qaytaradi, ikkinchi marta yuklash amalga oshirilmaydi.

GET /api/v1/jobs/{id}

Topshiriq holati va tugaganda toʻliq natija. Natijalar 30 kun davomida saqlanadi; ishlab chiqarish rejalaridagi maʼlumotlar doimiy ravishda ish maydoningizda saqlanadi.

GET /api/v1/openapi.json

Mashina oʻqiy oladigan OpenAPI 3.1 shartnomasi — uni Postman, kod generatorlariga import qiling yoki AI kodlash vositasiga yoʻnaltiring. Transport vositalari kodlari jonli mexanizmdan olinadi, shuning uchun u har doim yangilanadi. Spetsifikatsiyani ochish ↗

Javob maydonlari

Tugallangan topshiriqdagi result obyekti:

MaydonTuriTavsif
placed_count / unplaced_countintegerSigʻgan / sigʻmagan elementlar soni.
units"metric" | "imperial"Quyidagi barcha raqamlar ifodalangan oʻlchov birligi (soʻrovdagi qiymat takrorlanadi).
metrics.ldm_mnumberYuklash metrlari — yuk blokining uzunligi (maksimal oxiri − minimal boshlanishi).
metrics.linear_ftnumberXuddi shu uzunlik chiziqli futlarda (AQSh LTL).
metrics.span_mmintegerUzunlik millimetrlarda, har doim metrik tizimda.
metrics.pallet_positions_eurinteger | nullHisoblangan EUR pallet pozitsiyalari. Joylashuv oʻlchash uchun juda katta boʻlsa, null qiymat qaytariladi.
metrics.total_weight_kgnumberJoylashtirilgan yuk ogʻirligi, har doim kg da.
metrics.overlapsintegerOʻzaro kesishgan juftliklar — toʻgʻri joylashtirilgan tartibda har doim 0.
items[].placedbooleanElement tartibga joylashtirilganligini koʻrsatadi.
items[].x / y / znumber | nullSoʻrov birligidagi pozitsiya: x — eshik tomondan, y — chap devordan, z — pol sathidan. Agar placed false boʻlsa, barcha uchala qiymat null boʻladi.
items[].rotation_deg / tilt_deg0 | 90Orientatsiya: vertikal oʻq atrofida aylanish; tilt = yon tomonga yotqizilgan.
items[].length / width / height / weightnumberElementning yuborilgan oʻlchamlari, soʻrov birligida takrorlanadi.
plan_urlstring | nullIlovada yaratilgan rejaga havola. Sinov topshiriqlari uchun null.

Versiyalash va barqarorlik

Shartnoma manzilda versiyalangan (/api/v1/). v1 doirasida oʻzgarishlar faqat qoʻshimcha tarzda amalga oshiriladi — yangi ixtiyoriy soʻrov maydonlari, yangi javob maydonlari, yangi transport vositalari kodlari va xato kodlari paydo boʻlishi mumkin, mijozlar tanimagan maydonlarni eʼtiborsiz qoldirishi kerak. Mavjud maydonlarning maʼnosi yoki turi hech qachon oʻzgartirilmaydi va hech narsa olib tashlanmaydi. Buziluvchi oʻzgarish yangi versiya manzilini anglatadi, v1 esa kamida 12 oy davomida parallel ravishda saqlanadi va faol kalitga ega har bir ish maydoniga elektron pochta orqali bekor qilish xabarnomasi yuboriladi.

Soʻrov maydonlari

MaydonTuriTavsif
vehiclestringQuyidagi jadvallardan transport vositasi kodi. Yoki custom_vehicle_id (ish maydoningizdagi transport vositasidan) kiriting.
objective"ldm" | "pallets"Yuklash metrlari yoki hisoblangan pallet pozitsiyalarini minimallashtirish. Standart "ldm".
units"metric" | "imperial"Element oʻlchamlari va ogʻirliklari qanday oʻlchanishi VA qaytarilishi: mm/kg (standart) yoki dyuym/funt. Javobdagi pozitsiyalar ham xuddi shu birliklarda boʻladi.
itemsarray, requiredYuk manifesti (quyidagi maydonlar).
sandboxbooleanSinov rejimi: toʻliq natija, hech narsa saqlanmaydi. Har bir tarif rejasida mavjud.
namestringReja nomi (ishlab chiqarish rejimida).
ldm_limit_mnumberYukni birinchi N yuklash metriga cheklash (yuk mashinalari uchun).
budget_msnumberOptimallashtirish vaqt byudjeti (ishlab chiqarish rejimida; standart 30000, maksimal 300000).
callback_urlhttps URLTopshiriq tugaganda natija POST orqali yuboriladi, imzolanadi (Veb-xuklar boʻlimiga qarang).

Element maydonlari

MaydonTuriTavsif
length / width / heightnumber, requiredElement oʻlchamlari, soʻrovdagi birliklarda oʻqiladi (standart mm, "units": "imperial" bilan dyuymda).
weightnumber, requiredElement ogʻirligi (standart kg, "units": "imperial" bilan funtda).
quantityinteger, default 1Alohida birliklarga ajratiladi.
namestring, optionalReja va javobda koʻrsatiladi.
stackableboolean, default trueUstiga boshqa yuk qoʻyilishi mumkin.
max_stacknumber, optionalUstiga qoʻyilishi mumkin boʻlgan maksimal ogʻirlik (ogʻirlik bilan bir xil birlikda).
fragileboolean, default falseMoʻrt elementlar faqat yuqori qatlamlarga joylashtiriladi.
tiltableboolean, default trueElement yon tomonga yotqizilishi mumkin.
destination_stopinteger, default 1Koʻp bekatli LIFO yuklash uchun yetkazib berish bekat raqami.

Transport vositalari kodlari

Jonli mexanizm spetsifikatsiyalaridan yaratilgan. Ish maydoningizdagi maxsus transport vositalari custom_vehicle_id orqali ishlaydi.

Yuk mashinalari va tirkamalar

KodTransport vositasiIchki oʻlchamlar (U×E×B)Yuk koʻtarish qobiliyati
CURTAINSIDER_13613.6m Curtainsider13.62 × 2.48 × 2.70 m24 t
BOX_13613.6m Box Trailer13.62 × 2.46 × 2.68 m24 t
MEGA_13613.6m Mega Trailer13.62 × 2.48 × 3.00 m22.5 t
MEGA_CURTAIN_13613.6m Mega Curtainsider13.62 × 2.48 × 3.00 m22 t
FLATBED_13613.6m Flatbed13.62 × 2.48 × 3.00 m25 t
REEFER_13613.6m Reefer13.32 × 2.44 × 2.54 m22 t
CURTAINSIDER_757.5m City Curtainsider7.50 × 2.48 × 2.70 m12 t
SWAPBODY_7157.15m Swap Body7.15 × 2.48 × 2.70 m12 t
SWAPBODY_7457.45m Swap Body7.45 × 2.48 × 2.70 m12 t
DRY_VAN_5353ft Dry Van16.15 × 2.59 × 2.74 m20 t
FLATBED_5353ft Flatbed16.15 × 2.59 × 3.66 m22 t
REEFER_5353ft Reefer15.85 × 2.46 × 2.59 m18.5 t
CURTAINSIDER_125_CN12.5m Curtainsider (CN)12.50 × 2.50 × 2.80 m27 t
FLATBED_40_IN40ft Flatbed (IN)12.19 × 2.50 × 3.50 m26 t
BOX_138_BR13.8m Box Van (BR)13.80 × 2.50 × 2.90 m28 t
CURTAINSIDER_12_ZA12m Curtainsider (ZA)12.00 × 2.48 × 2.70 m28 t

Konteynerlar

KodKonteynerIchki oʻlchamlar (U×E×B)Yuk koʻtarish qobiliyati
20DC20' Dry Container5.89 × 2.35 × 2.39 m21.727 t
20HC20' High Cube5.89 × 2.35 × 2.70 m21.58 t
40DC40' Dry Container12.03 × 2.35 × 2.39 m26.63 t
40HC40' High Cube12.03 × 2.35 × 2.70 m26.58 t
45HC45' High Cube13.56 × 2.35 × 2.70 m25.68 t
20OT20' Open Top5.89 × 2.35 × 2.39 m21.64 t
40OT40' Open Top12.03 × 2.35 × 2.39 m26.58 t
20RF20' Reefer5.44 × 2.29 × 2.27 m21 t
40RF40' Reefer11.58 × 2.29 × 2.21 m25.6 t
40RFHC40' Reefer High Cube11.58 × 2.29 × 2.54 m25.88 t
53DC53' Domestic16.15 × 2.59 × 2.90 m26 t

Kirish darajalari va cheklovlar

Sinov muhiti (har bir tarif rejasi)Ishlab chiqarish (Enterprise)
SoʻrovlarOyiga 25 ta muvaffaqiyatli5 000 ta muvaffaqiyatli / oy
Manifestdagi elementlar soni205,000
Bir vaqtda bajariladigan topshiriqlar110
Optimallashtirish byudjeti10 sStandart 30 s, maksimal 300 s
SaqlashHech narsa saqlanmaydiHar bir yuklash haqiqiy rejani ish maydoningizda yaratadi

Faqat muvaffaqiyatli joylashtirishlar hisobga olinadi — tekshiruvdan oʻta olmagan va bajarilmagan topshiriqlar kvotaga taʼsir qilmaydi. Ikkala hisoblagich ham har oyning 1-kunida (UTC boʻyicha) qayta tiklanadi. Sinov muhitidagi natijalar toʻliq va cheklanmagan — chegaralar faqat kirish uchun, natijalar uchun emas. Oyiga 5 000 dan ortiq joylashtirish kerakmi? Hajmli va OEM narxlari boʻyicha biz bilan bogʻlaning.

Veb-xuklar

Topshiriq tugaganda natijani POST orqali olish uchun callback_url kiriting. Har bir xabar X-Hansatic-Signature bilan keladi: xom tananing HMAC-SHA256 imzosi, kalit yaratishda koʻrsatilgan veb-xuk maxfiy kaliti bilan. Uni tekshiring:

const crypto = require('crypto');

function verify(rawBody, signatureHeader, webhookSecret) {
  const expected = crypto.createHmac('sha256', webhookSecret)
    .update(rawBody).digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(signatureHeader));
}

Yetkazib berish bitta urinish bilan amalga oshiriladi, 5s vaqt chegarasi bilan — status_url har doim haqiqiy manba boʻlib qoladi.

Xatolar

Barcha xatolar { "error": { "code", "message", ... } } shaklida — mashina oʻqiy oladigan kod, inson tushunadigan xabar va field (agar muayyan kiritish maydoni xato boʻlsa).

KodHTTPMaʼno
invalid_key401Yetishmayotgan, notoʻgʻri shakllangan yoki bekor qilingan API kaliti.
invalid_json400Tanada yaroqli JSON mavjud emas.
invalid_vehicle400Nomaʼlum transport vositasi kodi / custom_vehicle_id.
invalid_items400Element maydoni yetishmayapti, raqamli emas yoki diapazondan tashqarida.
suspicious_dimensions400Barcha oʻlchamlar 100 mm dan kichik — ehtimol dyuymlar mm sifatida yuborilgan. "units": "imperial" kiriting.
invalid_units400units "metric" yoki "imperial" boʻlishi kerak.
invalid_objective400objective "ldm" yoki "pallets" boʻlishi kerak.
invalid_callback400callback_url https boʻlishi kerak.
too_many_items400Manifest kirish darajangiz uchun elementlar chegarasidan oshib ketdi.
upgrade_required402Ishlab chiqarish rejimi Enterprise tarifini talab qiladi. Sinov rejimidan foydalaning yoki tarifni yangilang.
sandbox_limit_reached402Oylik sinov limiti tugagan — oy boshida qayta tiklanadi.
quota_exceeded402Oylik 5 000 ta joylashtirish kvotasi tugagan — oy boshida (1-kuni) qayta tiklanadi. Kattaroq hajm uchun: biz bilan bogʻlaning.
too_many_jobs429Bir vaqtda bajariladigan topshiriqlar chegarasiga yetildi. Ishlayotgan topshiriqlarni soʻrov qiling va qayta urinib koʻring.
not_found404Bu ish maydonida bunday topshiriq mavjud emas.

Savollar, yuqori cheklovlar yoki kerakli ulanish (Zapier, Excel, MCP) haqida? hello@hansatic.com