Жүктеу API

Жүк мәліметтерін жіберіңіз, оңтайландырылған, физикалық тұрғыдан дұрыс жүктеу жоспарын алыңыз — орналастырулар, жүк метрлері, сызықтық футтар және есептелген паллет позициялары. Бұл қолданбаның артындағы сол қозғалтқыш, нақты диспетчерлік жоспарлармен үздіксіз тексеріліп отырады. Әрбір тарифтік жоспарда сынақ режиміне қол жетімділік; өндірістік қол жетімділік Enterprise тарифінде.

Жылдам бастау

  1. Кіріңіз → атыңызды басыңыз → API → кілтті жасаңыз.
  2. Жүктеу тапсырмасын жіберіңіз (бұл сынақ режимінде жұмыс істейді — әрбір тарифтік жоспарда тегін):
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 мекенжайын тексеріп отырыңыз (авторизация тақырыбы сол қалпында) status "done" болғанша:

{
  "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/..."
  }
}

Мекенжайлар

POST /api/v1/pack

Жүктеу тапсырмасын тексеріп, кезекке қояды. 202 және job_id қайтарады. Idempotency-Key тақырыбын қолдайды — бірдей кілтпен қайталау сұраулары екінші рет жүктеу орнына алғашқы тапсырманы қайтарады.

GET /api/v1/jobs/{id}

Тапсырманың статусы және аяқталған кезде толық нәтижесі. Нәтижелер 30 күн сақталады; өндірістік жоспарлар сіздің жұмыс аймағыңызда мәңгі сақталады.

GET /api/v1/openapi.json

Машина оқитын OpenAPI 3.1 шарты — оны Postman, код генераторларына импорттаңыз немесе AI код жазу құралына бағыттаңыз. Көлік кодтары тірі қозғалтқыштан алынады, сондықтан ол әрқашан жаңартылған. Спецификацияны ашу ↗

Жауап өрістері

Аяқталған тапсырмадағы result нысаны:

ӨрісТипіСипаттама
placed_count / unplaced_countintegerҚанша зат сыйды / сыймады.
units"metric" | "imperial"Төмендегі барлық сандардың өлшем бірлігі (сұранымдағыдай қайталанған).
metrics.ldm_mnumberЖүк метрлері — жүк блогының ұзындығы (максималды соңы − минималды басы).
metrics.linear_ftnumberСол ұзындық сызықтық футтарда (АҚШ LTL).
metrics.span_mmintegerҰзындық миллиметрмен, әрқашан метрикалық жүйеде.
metrics.pallet_positions_eurinteger | nullЕсептелген EUR паллет позициялары. Жүктеу өлшемі өлшеуге тым үлкен болған кезде null.
metrics.total_weight_kgnumberОрналастырылған салмақ, әрқашан кг.
metrics.overlapsintegerӨзара еніп кеткен жұптар — дұрыс жоспарда әрқашан 0.
items[].placedbooleanЗат жоспарға сыйды ма.
items[].x / y / znumber | nullСұранымдағы өлшем бірліктеріндегі позиция: x есік жағынан, y сол қабырғадан, z еденнен жоғары. Барлығы да placed false болғанда null.
items[].rotation_deg / tilt_deg0 | 90Бағыт: тік осі бойынша айналу; tilt = жанынан жатқызылған.
items[].length / width / height / weightnumberСұранымдағы заттың өлшемдері, сұранымдағы өлшем бірліктерінде қайталанған.
plan_urlstring | nullҚолданбадағы жасалған жоспар. Сынақ тапсырмалары үшін null.

Нұсқалау және тұрақтылық

Шарт жолдағы (/api/v1/) нұсқамен белгіленеді. v1 ішінде өзгерістер тек қосымша түрде болады — жаңа міндетті емес сұраным өрістері, жаңа жауап өрістері, жаңа көлік кодтары мен қате кодтары пайда болуы мүмкін, ал клиенттер танымайтын өрістерді елемеуі керек. Өмір сүріп жатқан өрістердің мағынасы мен типі ешқашан өзгермейді, ештеңе жойылмайды. Бұзушы өзгеріс жаңа нұсқа жолын білдіреді, ал v1 параллель режимде кем дегенде 12 ай бойы қолдаулы болып, белсенді кілті бар әрбір жұмыс аймағына электрондық пошта арқылы ескерту жіберіледі.

Сұраным өрістері

ӨрісТипіСипаттама
vehiclestringТөмендегі кестелерден көлік коды. Немесе custom_vehicle_id (сіздің жұмыс аймағыңыздағы көліктен) беріңіз.
objective"ldm" | "pallets"Жүк метрлерін азайту немесе есептелген паллет позицияларын азайту. Әдепкісі "ldm".
units"metric" | "imperial"Зат өлшемдері мен салмақтары қалай оқылады ЖӘНЕ қайтарылады: мм/кг (әдепкісі) немесе дюйм/фунт. Жауаптағы позициялар сол өлшем бірліктерінде болады.
itemsarray, requiredЖүк манифесті (төмендегі өрістер).
sandboxbooleanСынақ режимі: толық нәтиже, ештеңе сақталмайды. Әрбір тарифтік жоспарда қолжетімді.
namestringЖоспар атауы (өндірістік режимде).
ldm_limit_mnumberЖүкті алғашқы N жүк метрімен шектеу (жүк машиналары үшін).
budget_msnumberОңтайландыру уақытының бюджеті (өндірістік режимде; әдепкісі 30000, максимумы 300000).
callback_urlhttps URLТапсырма аяқталғанда нәтижені POST арқылы жіберу, қол қойылған (қараңыз: Вебхуктар).

Зат өрістері

ӨрісТипіСипаттама
length / width / heightnumber, requiredЗат өлшемдері, сұранымдағы өлшем бірліктерінде оқылады (әдепкісі мм, "units": "imperial" болғанда дюйм).
weightnumber, requiredЗат салмағы (әдепкісі кг, "units": "imperial" болғанда фунт).
quantityinteger, default 1Жеке бірліктерге жіктеледі.
namestring, optionalЖоспар мен жауапта көрсетіледі.
stackableboolean, default trueБұл заттың үстіне басқа жүк қоюға болады.
max_stacknumber, optionalБұл заттың үстіне қоюға болатын максималды салмақ (салмақпен бір өлшем бірлікте).
fragileboolean, default falseМорт заттар тек жоғарғы қабаттарға орналастырылады.
tiltableboolean, default trueЗатты жанынан жатқызуға болады ма.
destination_stopinteger, default 1Көп аялдамалы LIFO жүктеу үшін жеткізу аялдамасы.

Көлік кодтары

Тірі қозғалтқыш спецификацияларынан жасалған. Сіздің жұмыс аймағыңыздағы арнайы көліктер custom_vehicle_id арқылы жұмыс істейді.

Жүк машиналары мен тіркемелер

КодКөлікІшкі өлшемдері (Ұ×Е×Б)Жүктеме
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

Контейнерлер

КодКонтейнерІшкі өлшемдері (Ұ×Е×Б)Жүктеме
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

Қолжетімдік деңгейлері мен лимиттер

Сынақ режимі (әрбір жоспарда)Өндірістік режим (Enterprise)
СұрауларАйына 25 сәтті сұрауАй сайынғы 5,000 сәтті пакеттеу
Манифесттегі заттар саны205,000
Бір уақыттағы тапсырмалар110
Оңтайландыру бюджеті10 сӘдепкісі 30 с, максимумы 300 с
СақтауЕштеңе сақталмайдыӘрбір жүктеу нақты жоспарды сіздің жұмыс аймағыңызда жасайды

Тек сәтті пакеттеулер ғана есептеледі — жарамсыз деректерді тексеру және орындалмаған тапсырмалар квотаға есептелмейді. Екі есептегіш те айдың 1-і күні (UTC) нөлден басталады. Sandbox нәтижелері толық және шектеусіз — лимит тек шектеу ретінде қолданылады, нәтижелерге әсер етпейді. Айына 5,000 пакеттен артық қажет пе? Көлемді және OEM бағалары туралы бізбен байланысыңыз.

Вебхуктар

Тапсырма аяқталғанда нәтижені POST арқылы алу үшін callback_url беріңіз. Әрбір хабарламада X-Hansatic-Signature болады: сіздің кілттің вебхук құпия сөзімен (кілт жасалған кезде бір рет көрсетіледі) HMAC-SHA256 қолтаңбасы. Оны тексеріңіз:

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));
}

Хабарлама бір рет жіберіледі, уақыты 5с — status_url әрқашан шындық көзі болып қалады.

Қателер

Барлық қателер { "error": { "code", "message", ... } } пішінде — машина оқитын код, адамға түсінікті хабарлама және қате кіріс мәліметі болған кезде field.

КодHTTPМағынасы
invalid_key401Кілт жоқ, дұрыс емес пішінде немесе тоқтатылған API кілті.
invalid_json400Денесі жарамды JSON емес.
invalid_vehicle400Белгісіз көлік коды / custom_vehicle_id.
invalid_items400Зат өрісі жоқ, сандық емес немесе ауқымнан тыс.
suspicious_dimensions400Барлық өлшемдер 100 мм-ден аз — мүмкін дюймдар мм ретінде жіберілген. "units": "imperial" беріңіз.
invalid_units400units "metric" немесе "imperial" болуы керек.
invalid_objective400objective "ldm" немесе "pallets" болуы керек.
invalid_callback400callback_url https болуы керек.
too_many_items400Манифест сіздің қолжетімдік деңгейіңіздің заттар лимитіне сай емес.
upgrade_required402Өндірістік режим Enterprise жоспарын талап етеді. Сынақ режимін пайдаланыңыз немесе жоспарды жаңартыңыз.
sandbox_limit_reached402Айлық сынақ лимиті пайдаланылды — айдың 1-інде қалпына келеді.
quota_exceeded402Ай сайынғы 5,000 пакеттеу квотасы пайдаланылды — айдың 1-і күні қалпына келеді. Көлемді көбею: бізбен байланысыңыз.
too_many_jobs429Бір уақыттағы тапсырмалар лимитіне жетілді. Жүріп жатқан тапсырмаларды тексеріп, қайталап көріңіз.
not_found404Бұл жұмыс аймағы үшін мұндай тапсырма жоқ.

Сұрақтар, жоғары лимиттер немесе сізге қажет коннектор (Zapier, Excel, MCP)? hello@hansatic.com