Packing API

Zadajte náklad a získajte späť optimalizovaný, fyzikálne platný plán nakladania – umiestnenia, nákladové metre, lineárne stopy a fakturované pozície paliet. Rovnaký engine, ktorý poháňa aplikáciu, je nepretržite overovaný oproti skutočným dispečerskym rozvrhom. Prístup k sandboxu je na každom pláne; produkčný prístup je k dispozícii na podnikovom pláne Enterprise.

Rýchly štart

  1. Prihláste sa → kliknite na svoje meno → API → vygenerujte kľúč.
  2. Odosielajte požiadavku na zabalenie (táto sa spúšťa v sandboxe – zadarmo na každom pláne):
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-..."
}

Pýtajte stav na status_url (s rovnakým autentifikačným hlavičkovým riadkom), kým status nie je "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/..."
  }
}

Endpointy

POST /api/v1/pack

Overí a zaradí požiadavku na zabalenie do fronty. Vráti 202 s job_id. Podporuje hlavičku Idempotency-Key – opakované požiadavky s rovnakým kľúčom vrátia pôvodnú úlohu namiesto dvojitého spracovania.

GET /api/v1/jobs/{id}

Stav úlohy a po dokončení celý výsledok. Výsledky sa uchovávajú 30 dní; produkčné plány zostávajú vo vašom pracovnom priestore natrvalo.

GET /api/v1/openapi.json

Strojovo čitateľná OpenAPI 3.1 špecifikácia – importujte ju do Postmanu, generátorov kódu alebo ju nasmerujte na svoj nástroj pre AI programovanie. Kódy vozidiel sú načítané z aktuálneho enginu, takže je vždy aktuálna. Otvoriť špecifikáciu ↗

Polia odpovede

Objekt result po dokončení úlohy:

PoliaTypPopis
placed_count / unplaced_countintegerKoľko položiek sa zmestilo / nezmestilo.
units"metric" | "imperial"Jednotky, v ktorých sú vyjadrené všetky nižšie uvedené číselné hodnoty (zodpovedá požiadavke).
metrics.ldm_mnumberNákladové metre – rozsah nákladového bloku (max koniec − min začiatok).
metrics.linear_ftnumberRovnaký rozsah v lineárnych stopách (US LTL).
metrics.span_mmintegerRozsah v mm, vždy metrický.
metrics.pallet_positions_eurinteger | nullFakturované pozície EUR paliet. null, ak je rozvrh príliš veľký na meranie.
metrics.total_weight_kgnumberHmotnosť naloženého nákladu, vždy v kg.
metrics.overlapsintegerPrekrývajúce sa páry – vždy 0 pre platný rozvrh.
items[].placedbooleanČi sa položka dostala do rozvrhu.
items[].x / y / znumber | nullPozícia v jednotkách požiadavky: x od čela vozidla, y od ľavej steny, z od podlahy. Všetky tri sú null, ak je placed false.
items[].rotation_deg / tilt_deg0 | 90Orientácia: rotácia okolo zvislej osi; tilt = položka položená na bok.
items[].length / width / height / weightnumberPoložka tak, ako bola odoslaná, v jednotkách požiadavky.
plan_urlstring | nullVytvorený plán v aplikácii. null pre úlohy v sandboxe.

Verzovanie a stabilita

Zmluva je verzovaná v ceste (/api/v1/). Vo verzii v1 sú zmeny iba pridávacie – nové voliteľné polia požiadavky, nové polia odpovede, nové kódy vozidiel a chybové kódy sa môžu objaviť a klienti by mali ignorovať polia, ktoré nerozpoznajú. Existujúce polia nikdy nemenia význam ani typ a nič sa neodstraňuje. Zmena, ktorá narušuje kompatibilitu, znamená novú verziu cesty, pričom v1 zostáva udržiavaná paralelne najmenej 12 mesiacov a o zrušení sa oznamuje e-mailom každému pracovnému priestoru s aktívnym kľúčom.

Polia požiadavky

PoliaTypPopis
vehiclestringKód vozidla z nižšie uvedených tabuliek. Alebo zadajte {customVehicleId} (vozidlo z vášho pracovného priestoru).
objective"ldm" | "pallets"Minimalizovať nákladové metre alebo fakturované pozície paliet. Predvolené je "ldm".
units"metric" | "imperial"V akých jednotkách sa zadávajú a vracajú rozmery a hmotnosti položiek: mm/kg (predvolené) alebo in/lb. Pozície v odpovedi používajú rovnaké jednotky.
itemsarray, requiredZoznam nákladu (polia nižšie).
sandboxbooleanTestovací režim: úplný výsledok, nič sa neukladá. K dispozícii na každom pláne.
namestringNázov plánu (produkčný režim).
ldm_limit_mnumberObmedziť náklad na prvých N nákladových metrov (nákladné vozidlá).
budget_msnumberČasový limit optimalizácie (produkčný režim; predvolené 30000, maximum 300000).
callback_urlhttps URLPo dokončení úlohy sa na túto adresu odošle POST s výsledkom, podpísaný (pozri Webhooky).

Polia položiek

PoliaTypPopis
length / width / heightnumber, requiredRozmery položky v jednotkách požiadavky (predvolene mm, palce pri "units": "imperial").
weightnumber, requiredHmotnosť položky (predvolene kg, lb pri "units": "imperial").
quantityinteger, default 1Rozbalí sa na jednotlivé kusy.
namestring, optionalZobrazuje sa v pláne a v odpovedi.
stackableboolean, default trueNa túto položku môže byť naložený ďalší náklad.
max_stacknumber, optionalMaximálna hmotnosť, ktorú môže položka uniesť navrchu (v rovnakých jednotkách ako hmotnosť).
fragileboolean, default falseKrehké položky sa umiestňujú iba do vrchných vrstiev.
tiltableboolean, default trueMôže sa položka položiť na bok.
destination_stopinteger, default 1Miesto doručenia pre viaczastávkové LIFO nakladanie.

Kódy vozidiel

Generované z aktuálnych špecifikácií enginu. Vlastné vozidlá z vášho pracovného priestoru fungujú cez custom_vehicle_id.

Nákladné vozidlá a prívesy

KódVozidloVnútorné rozmery (D׊×V)Nosnosť
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

Kontajnery

KódKontajnerVnútorné rozmery (D׊×V)Nosnosť
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

Úrovne prístupu a limity

Sandbox (každý plán)Produkcia (Enterprise)
Požiadavky25 úspešných / mesiac5 000 úspešných / mesiac
Položiek v zozname205,000
Súbežné úlohy110
Limit optimalizácie10 s30 s predvolene, až 300 s
TrvalosťNič sa neukladáKaždé zabalenie vytvorí reálny plán vo vašom pracovnom priestore

Do limitu sa započítavajú iba úspešné plánovania — zlyhané validácie a neúspešné úlohy sa nezapočítavajú. Obidva počítadlá sa resetujú 1. dňa v mesiaci (UTC). Výsledky v sandboxe sú úplné a neobmedzené — limity sú bránou, nie výstupom. Potrebovali by ste viac ako 5 000 plánovaní mesačne? Kontaktujte nás ohľadom objemových a OEM cien.

Webhooky

Zadajte callback_url, aby ste po dokončení úlohy dostali výsledok pomocou POST. Každý callback obsahuje X-Hansatic-Signature: HMAC-SHA256 podpis tela správy s webhook tajomstvom vášho kľúča (zobrazené iba raz pri vytvorení kľúča). Overte ho:

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

Doručenie sa pokúša iba raz s časovým limitom 5 s – status_url zostáva vždy zdrojom pravdy.

Chyby

Všetky chyby majú { "error": { "code", "message", ... } } – strojovo čitateľný kód, zrozumiteľnú správu pre človeka a field, ak je chyba v konkrétnom vstupnom poli.

KódHTTPVýznam
invalid_key401Chýbajúci, nesprávne formátovaný alebo odvolaný API kľúč.
invalid_json400Telo požiadavky nie je platný JSON.
invalid_vehicle400Neznámy kód vozidla / {customVehicleId}.
invalid_items400Niektoré pole položky chýba, nie je číselné alebo je mimo rozsahu.
suspicious_dimensions400Všetky rozmery pod 100 mm – pravdepodobne palce odoslané ako milimetre. Zadajte "units": "imperial".
invalid_units400units musí byť "metric" alebo "imperial".
invalid_objective400objective musí byť "ldm" alebo "pallets".
invalid_callback400callback_url musí byť https.
too_many_items400Zoznam nákladu prekračuje limit položiek pre vašu úroveň prístupu.
upgrade_required402Produkčný režim vyžaduje plán Enterprise. Použite sandbox alebo upgradujte.
sandbox_limit_reached402Mesačný limit sandboxu bol vyčerpaný – obnoví sa 1. v mesiaci.
quota_exceeded402Mesačný limit 5 000 plánovaní bol vyčerpaný — resetuje sa 1. dňa v mesiaci. Pre vyšší objem nás kontaktujte.
too_many_jobs429Bol dosiahnutý limit súbežných úloh. Skontrolujte bežiace úlohy a skúste to znova.
not_found404Pre tento pracovný priestor neexistuje takáto úloha.

Otázky, vyššie limity alebo konektor, ktorý potrebujete (Zapier, Excel, MCP)? hello@hansatic.com