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
- Prihláste sa → kliknite na svoje meno → API → vygenerujte kľúč.
- 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:
| Polia | Typ | Popis |
|---|---|---|
| placed_count / unplaced_count | integer | Koľ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_m | number | Nákladové metre – rozsah nákladového bloku (max koniec − min začiatok). |
| metrics.linear_ft | number | Rovnaký rozsah v lineárnych stopách (US LTL). |
| metrics.span_mm | integer | Rozsah v mm, vždy metrický. |
| metrics.pallet_positions_eur | integer | null | Fakturované pozície EUR paliet. null, ak je rozvrh príliš veľký na meranie. |
| metrics.total_weight_kg | number | Hmotnosť naloženého nákladu, vždy v kg. |
| metrics.overlaps | integer | Prekrývajúce sa páry – vždy 0 pre platný rozvrh. |
| items[].placed | boolean | Či sa položka dostala do rozvrhu. |
| items[].x / y / z | number | null | Pozí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_deg | 0 | 90 | Orientácia: rotácia okolo zvislej osi; tilt = položka položená na bok. |
| items[].length / width / height / weight | number | Položka tak, ako bola odoslaná, v jednotkách požiadavky. |
| plan_url | string | null | Vytvorený 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
| Polia | Typ | Popis |
|---|---|---|
| vehicle | string | Kó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. |
| items | array, required | Zoznam nákladu (polia nižšie). |
| sandbox | boolean | Testovací režim: úplný výsledok, nič sa neukladá. K dispozícii na každom pláne. |
| name | string | Názov plánu (produkčný režim). |
| ldm_limit_m | number | Obmedziť náklad na prvých N nákladových metrov (nákladné vozidlá). |
| budget_ms | number | Časový limit optimalizácie (produkčný režim; predvolené 30000, maximum 300000). |
| callback_url | https URL | Po dokončení úlohy sa na túto adresu odošle POST s výsledkom, podpísaný (pozri Webhooky). |
Polia položiek
| Polia | Typ | Popis |
|---|---|---|
| length / width / height | number, required | Rozmery položky v jednotkách požiadavky (predvolene mm, palce pri "units": "imperial"). |
| weight | number, required | Hmotnosť položky (predvolene kg, lb pri "units": "imperial"). |
| quantity | integer, default 1 | Rozbalí sa na jednotlivé kusy. |
| name | string, optional | Zobrazuje sa v pláne a v odpovedi. |
| stackable | boolean, default true | Na túto položku môže byť naložený ďalší náklad. |
| max_stack | number, optional | Maximálna hmotnosť, ktorú môže položka uniesť navrchu (v rovnakých jednotkách ako hmotnosť). |
| fragile | boolean, default false | Krehké položky sa umiestňujú iba do vrchných vrstiev. |
| tiltable | boolean, default true | Môže sa položka položiť na bok. |
| destination_stop | integer, default 1 | Miesto 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ód | Vozidlo | Vnútorné rozmery (D׊×V) | Nosnosť |
|---|---|---|---|
| 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 |
Kontajnery
| Kód | Kontajner | Vnútorné rozmery (D׊×V) | Nosnosť |
|---|---|---|---|
| 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 |
Úrovne prístupu a limity
| Sandbox (každý plán) | Produkcia (Enterprise) | |
|---|---|---|
| Požiadavky | 25 úspešných / mesiac | 5 000 úspešných / mesiac |
| Položiek v zozname | 20 | 5,000 |
| Súbežné úlohy | 1 | 10 |
| Limit optimalizácie | 10 s | 30 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ód | HTTP | Význam |
|---|---|---|
| invalid_key | 401 | Chýbajúci, nesprávne formátovaný alebo odvolaný API kľúč. |
| invalid_json | 400 | Telo požiadavky nie je platný JSON. |
| invalid_vehicle | 400 | Neznámy kód vozidla / {customVehicleId}. |
| invalid_items | 400 | Niektoré pole položky chýba, nie je číselné alebo je mimo rozsahu. |
| suspicious_dimensions | 400 | Všetky rozmery pod 100 mm – pravdepodobne palce odoslané ako milimetre. Zadajte "units": "imperial". |
| invalid_units | 400 | units musí byť "metric" alebo "imperial". |
| invalid_objective | 400 | objective musí byť "ldm" alebo "pallets". |
| invalid_callback | 400 | callback_url musí byť https. |
| too_many_items | 400 | Zoznam nákladu prekračuje limit položiek pre vašu úroveň prístupu. |
| upgrade_required | 402 | Produkčný režim vyžaduje plán Enterprise. Použite sandbox alebo upgradujte. |
| sandbox_limit_reached | 402 | Mesačný limit sandboxu bol vyčerpaný – obnoví sa 1. v mesiaci. |
| quota_exceeded | 402 | Mesačný limit 5 000 plánovaní bol vyčerpaný — resetuje sa 1. dňa v mesiaci. Pre vyšší objem nás kontaktujte. |
| too_many_jobs | 429 | Bol dosiahnutý limit súbežných úloh. Skontrolujte bežiace úlohy a skúste to znova. |
| not_found | 404 | Pre tento pracovný priestor neexistuje takáto úloha. |
Otázky, vyššie limity alebo konektor, ktorý potrebujete (Zapier, Excel, MCP)? hello@hansatic.com