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
- Tizimga kiring → ismingizni bosing → API → kalit yarating.
- 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:
| Maydon | Turi | Tavsif |
|---|---|---|
| placed_count / unplaced_count | integer | Sigʻgan / sigʻmagan elementlar soni. |
| units | "metric" | "imperial" | Quyidagi barcha raqamlar ifodalangan oʻlchov birligi (soʻrovdagi qiymat takrorlanadi). |
| metrics.ldm_m | number | Yuklash metrlari — yuk blokining uzunligi (maksimal oxiri − minimal boshlanishi). |
| metrics.linear_ft | number | Xuddi shu uzunlik chiziqli futlarda (AQSh LTL). |
| metrics.span_mm | integer | Uzunlik millimetrlarda, har doim metrik tizimda. |
| metrics.pallet_positions_eur | integer | null | Hisoblangan EUR pallet pozitsiyalari. Joylashuv oʻlchash uchun juda katta boʻlsa, null qiymat qaytariladi. |
| metrics.total_weight_kg | number | Joylashtirilgan yuk ogʻirligi, har doim kg da. |
| metrics.overlaps | integer | Oʻzaro kesishgan juftliklar — toʻgʻri joylashtirilgan tartibda har doim 0. |
| items[].placed | boolean | Element tartibga joylashtirilganligini koʻrsatadi. |
| items[].x / y / z | number | null | Soʻ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_deg | 0 | 90 | Orientatsiya: vertikal oʻq atrofida aylanish; tilt = yon tomonga yotqizilgan. |
| items[].length / width / height / weight | number | Elementning yuborilgan oʻlchamlari, soʻrov birligida takrorlanadi. |
| plan_url | string | null | Ilovada 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
| Maydon | Turi | Tavsif |
|---|---|---|
| vehicle | string | Quyidagi 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. |
| items | array, required | Yuk manifesti (quyidagi maydonlar). |
| sandbox | boolean | Sinov rejimi: toʻliq natija, hech narsa saqlanmaydi. Har bir tarif rejasida mavjud. |
| name | string | Reja nomi (ishlab chiqarish rejimida). |
| ldm_limit_m | number | Yukni birinchi N yuklash metriga cheklash (yuk mashinalari uchun). |
| budget_ms | number | Optimallashtirish vaqt byudjeti (ishlab chiqarish rejimida; standart 30000, maksimal 300000). |
| callback_url | https URL | Topshiriq tugaganda natija POST orqali yuboriladi, imzolanadi (Veb-xuklar boʻlimiga qarang). |
Element maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
| length / width / height | number, required | Element oʻlchamlari, soʻrovdagi birliklarda oʻqiladi (standart mm, "units": "imperial" bilan dyuymda). |
| weight | number, required | Element ogʻirligi (standart kg, "units": "imperial" bilan funtda). |
| quantity | integer, default 1 | Alohida birliklarga ajratiladi. |
| name | string, optional | Reja va javobda koʻrsatiladi. |
| stackable | boolean, default true | Ustiga boshqa yuk qoʻyilishi mumkin. |
| max_stack | number, optional | Ustiga qoʻyilishi mumkin boʻlgan maksimal ogʻirlik (ogʻirlik bilan bir xil birlikda). |
| fragile | boolean, default false | Moʻrt elementlar faqat yuqori qatlamlarga joylashtiriladi. |
| tiltable | boolean, default true | Element yon tomonga yotqizilishi mumkin. |
| destination_stop | integer, default 1 | Koʻ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
| Kod | Transport vositasi | Ichki oʻlchamlar (U×E×B) | Yuk koʻtarish qobiliyati |
|---|---|---|---|
| CURTAINSIDER_136 | 13.6m Curtainsider | 13.62 × 2.48 × 2.70 m | 24 t |
| BOX_136 | 13.6m Box Trailer | 13.62 × 2.46 × 2.68 m | 24 t |
| MEGA_136 | 13.6m Mega Trailer | 13.62 × 2.48 × 3.00 m | 22.5 t |
| MEGA_CURTAIN_136 | 13.6m Mega Curtainsider | 13.62 × 2.48 × 3.00 m | 22 t |
| FLATBED_136 | 13.6m Flatbed | 13.62 × 2.48 × 3.00 m | 25 t |
| REEFER_136 | 13.6m Reefer | 13.32 × 2.44 × 2.54 m | 22 t |
| CURTAINSIDER_75 | 7.5m City Curtainsider | 7.50 × 2.48 × 2.70 m | 12 t |
| SWAPBODY_715 | 7.15m Swap Body | 7.15 × 2.48 × 2.70 m | 12 t |
| SWAPBODY_745 | 7.45m Swap Body | 7.45 × 2.48 × 2.70 m | 12 t |
| DRY_VAN_53 | 53ft Dry Van | 16.15 × 2.59 × 2.74 m | 20 t |
| FLATBED_53 | 53ft Flatbed | 16.15 × 2.59 × 3.66 m | 22 t |
| REEFER_53 | 53ft Reefer | 15.85 × 2.46 × 2.59 m | 18.5 t |
| CURTAINSIDER_125_CN | 12.5m Curtainsider (CN) | 12.50 × 2.50 × 2.80 m | 27 t |
| FLATBED_40_IN | 40ft Flatbed (IN) | 12.19 × 2.50 × 3.50 m | 26 t |
| BOX_138_BR | 13.8m Box Van (BR) | 13.80 × 2.50 × 2.90 m | 28 t |
| CURTAINSIDER_12_ZA | 12m Curtainsider (ZA) | 12.00 × 2.48 × 2.70 m | 28 t |
Konteynerlar
| Kod | Konteyner | Ichki oʻlchamlar (U×E×B) | Yuk koʻtarish qobiliyati |
|---|---|---|---|
| 20DC | 20' Dry Container | 5.89 × 2.35 × 2.39 m | 21.727 t |
| 20HC | 20' High Cube | 5.89 × 2.35 × 2.70 m | 21.58 t |
| 40DC | 40' Dry Container | 12.03 × 2.35 × 2.39 m | 26.63 t |
| 40HC | 40' High Cube | 12.03 × 2.35 × 2.70 m | 26.58 t |
| 45HC | 45' High Cube | 13.56 × 2.35 × 2.70 m | 25.68 t |
| 20OT | 20' Open Top | 5.89 × 2.35 × 2.39 m | 21.64 t |
| 40OT | 40' Open Top | 12.03 × 2.35 × 2.39 m | 26.58 t |
| 20RF | 20' Reefer | 5.44 × 2.29 × 2.27 m | 21 t |
| 40RF | 40' Reefer | 11.58 × 2.29 × 2.21 m | 25.6 t |
| 40RFHC | 40' Reefer High Cube | 11.58 × 2.29 × 2.54 m | 25.88 t |
| 53DC | 53' Domestic | 16.15 × 2.59 × 2.90 m | 26 t |
Kirish darajalari va cheklovlar
| Sinov muhiti (har bir tarif rejasi) | Ishlab chiqarish (Enterprise) | |
|---|---|---|
| Soʻrovlar | Oyiga 25 ta muvaffaqiyatli | 5 000 ta muvaffaqiyatli / oy |
| Manifestdagi elementlar soni | 20 | 5,000 |
| Bir vaqtda bajariladigan topshiriqlar | 1 | 10 |
| Optimallashtirish byudjeti | 10 s | Standart 30 s, maksimal 300 s |
| Saqlash | Hech narsa saqlanmaydi | Har 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).
| Kod | HTTP | Maʼno |
|---|---|---|
| invalid_key | 401 | Yetishmayotgan, notoʻgʻri shakllangan yoki bekor qilingan API kaliti. |
| invalid_json | 400 | Tanada yaroqli JSON mavjud emas. |
| invalid_vehicle | 400 | Nomaʼlum transport vositasi kodi / custom_vehicle_id. |
| invalid_items | 400 | Element maydoni yetishmayapti, raqamli emas yoki diapazondan tashqarida. |
| suspicious_dimensions | 400 | Barcha oʻlchamlar 100 mm dan kichik — ehtimol dyuymlar mm sifatida yuborilgan. "units": "imperial" kiriting. |
| invalid_units | 400 | units "metric" yoki "imperial" boʻlishi kerak. |
| invalid_objective | 400 | objective "ldm" yoki "pallets" boʻlishi kerak. |
| invalid_callback | 400 | callback_url https boʻlishi kerak. |
| too_many_items | 400 | Manifest kirish darajangiz uchun elementlar chegarasidan oshib ketdi. |
| upgrade_required | 402 | Ishlab chiqarish rejimi Enterprise tarifini talab qiladi. Sinov rejimidan foydalaning yoki tarifni yangilang. |
| sandbox_limit_reached | 402 | Oylik sinov limiti tugagan — oy boshida qayta tiklanadi. |
| quota_exceeded | 402 | Oylik 5 000 ta joylashtirish kvotasi tugagan — oy boshida (1-kuni) qayta tiklanadi. Kattaroq hajm uchun: biz bilan bogʻlaning. |
| too_many_jobs | 429 | Bir vaqtda bajariladigan topshiriqlar chegarasiga yetildi. Ishlayotgan topshiriqlarni soʻrov qiling va qayta urinib koʻring. |
| not_found | 404 | Bu ish maydonida bunday topshiriq mavjud emas. |
Savollar, yuqori cheklovlar yoki kerakli ulanish (Zapier, Excel, MCP) haqida? hello@hansatic.com