Pakkimise API
Saada kaubad, saada tagasi optimeeritud ja füüsiliselt korrektne koormaplaan — paigutused, laadimismeetrid, lineaarjalad ja arveldatavad palleti positsioonid. Sama mootor, mis on rakenduses, pidevalt valideeritud päris dispetšerite paigutuste alusel. Liivakasti ligipääs iga plaaniga; tootmisrežiim Enterprise-plaanil.
Kiire algus
- Logi sisse → klõpsa oma nimele → API → genereeri võti.
- Saada pakkimise töö (see töötab liivakastis — tasuta iga plaaniga):
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-..."
}Küsi status_url (sama autentimispeaga) kuni status on "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/..."
}
}Pöördumispunktid
POST /api/v1/pack
Valideerib ja paneb järjekorda pakkimise töö. Tagastab 202 koos job_id-ga. Toetab Idempotency-Key päist — korduspäringud sama võtmega tagastavad algse töö asemel uue töö loomise.
GET /api/v1/jobs/{id}
Töö olek ja, kui töö on lõpetatud, täielik tulemus. Tulemused säilitatakse 30 päeva; tootmisplaani tööd jäävad sinu tööruumi jäädavalt.
GET /api/v1/openapi.json
Masinloetav OpenAPI 3.1 leping — impordi see Postmani, koodigeneraatoritesse või suuna oma AI-kodeerimistööriist sellele. Sõidukikoodid on pärit reaalajas mootorist, seega on see alati ajakohane. Ava spetsifikatsioon ↗
Vastuse väljad
result objekt lõpetatud töös:
| Väli | Tüüp | Kirjeldus |
|---|---|---|
| placed_count / unplaced_count | integer | Mitu eset mahus / ei mahtunud. |
| units | "metric" | "imperial" | Ühikud, milles on väljendatud kõik allolevad numbrid (kordab päringut). |
| metrics.ldm_m | number | Laadimismeetrid — kaubabloki ulatus (maksimaalne lõpp − minimaalne algus). |
| metrics.linear_ft | number | Sama ulatus lineaarjalgades (USA LTL). |
| metrics.span_mm | integer | Ulatus millimeetrites, alati meetermõõdustikus. |
| metrics.pallet_positions_eur | integer | null | Arveldatavad EUR-palletipositsioonid. null, kui paigutus on liiga suur mõõtmiseks. |
| metrics.total_weight_kg | number | Paigutatud kaal, alati kg. |
| metrics.overlaps | integer | Üksteist läbistavad paarid — alati 0 kehtiva paigutuse korral. |
| items[].placed | boolean | Kas ese mahutati paigutusse. |
| items[].x / y / z | number | null | Asukoht päringuühikutes: x uksepoolse otsa suunas, y vasakust seina suunas, z põrandast üles. Kõik kolm on null, kui placed on false. |
| items[].rotation_deg / tilt_deg | 0 | 90 | Suund: pöörlemine vertikaaltelje ümber; tilt = külili asetatud. |
| items[].length / width / height / weight | number | Ese, nagu see päringus esitatud, kordatud päringuühikutes. |
| plan_url | string | null | Loodud plaan rakenduses. null liivakasti tööde korral. |
Versioneerimine ja stabiilsus
Leping on versioneeritud teejuhises (/api/v1/). Versiooni v1 sees tehakse muudatusi ainult lisavormis — uued valikulised päringu väljad, uued vastuse väljad, uued sõidukikoodid ja veakoodid võivad ilmneda, ning kliendid peaksid ignoreerima välju, mida nad ei tunne. Olemasolevate väljade tähendus ega tüüp ei muutu, ega midagi ei eemaldata. Murdev muudatus tähendab uue versiooni teejuhet, kusjuures v1-d säilitatakse paralleelselt vähemalt 12 kuu jooksul ja hoiatatakse e-posti teel iga tööruumi omanikku, kellel on aktiivne võti.
Päringu väljad
| Väli | Tüüp | Kirjeldus |
|---|---|---|
| vehicle | string | Sõidukikood allolevatest tabelitest. Või kasuta {customVehicleId} (sõiduk sinu tööruumi pargist). |
| objective | "ldm" | "pallets" | Minimeeri laadimismeetreid või arveldatavaid palleti positsioone. Vaikimisi "ldm". |
| units | "metric" | "imperial" | Kuidas eseme mõõtmeid ja kaalu loetakse JA tagastatakse: mm/kg (vaikimisi) või in/lb. Vastuses positsioonid järgivad samu ühikuid. |
| items | array, required | Kaubamanifest (väljad allpool). |
| sandbox | boolean | Testrežiim: täielik tulemus, midagi ei salvestata. Saadaval iga plaaniga. |
| name | string | Plaaninimi (tootmisrežiimis). |
| ldm_limit_m | number | Piira koorma esimese N laadimismeetrini (veoautod). |
| budget_ms | number | Optimeerimise ajapiirang (tootmisrežiimis; vaikimisi 30000, maksimaalselt 300000). |
| callback_url | https URL | POST-itab tulemuse, kui töö on lõpetatud, allkirjastatult (vt Veebihaakujad). |
Ese väljad
| Väli | Tüüp | Kirjeldus |
|---|---|---|
| length / width / height | number, required | Ese mõõtmed, loetakse päringu ühikutes (vaikimisi mm, tollid kui "units": "imperial"). |
| weight | number, required | Ese kaal (vaikimisi kg, naelad kui "units": "imperial"). |
| quantity | integer, default 1 | Laiendatakse üksikuteks ühikuteks. |
| name | string, optional | Kuvatakse plaanis ja vastuses. |
| stackable | boolean, default true | Kas teised kaubad võivad selle eseme peale asetada. |
| max_stack | number, optional | Maksimaalne kaal, mida ese peal talub (samas ühikus nagu kaal). |
| fragile | boolean, default false | Õrnad esemed paigutatakse ainult ülemistele kihtidele. |
| tiltable | boolean, default true | Kas ese võib külili asetada. |
| destination_stop | integer, default 1 | Sihtpeatus mitmepeatuselise LIFO-laadimise jaoks. |
Sõidukikoodid
Genereeritud reaalajas mootori spetsifikatsioonidest. Tööruumi pargi kohandatud sõidukid töötavad läbi custom_vehicle_id.
Veoautod ja haagised
| Kood | Sõiduk | Sisemõõdud (P×L×K) | Kandevõime |
|---|---|---|---|
| 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 |
Konteinerid
| Kood | Konteiner | Sisemõõdud (P×L×K) | Kandevõime |
|---|---|---|---|
| 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 |
Ligipääsutasemed ja piirangud
| Liivakast (iga plaaniga) | Tootmine (Enterprise) | |
|---|---|---|
| Päringud | 25 edukat / kuu | 5 000 edukat pakkimist / kuu |
| Esemeid manifestis | 20 | 5,000 |
| Üheaegsed tööd | 1 | 10 |
| Optimeerimise ajapiirang | 10 s | 30 s vaikimisi, kuni 300 s |
| Püsivus | Midagi ei salvestata | Iga pakkimine loob reaalse plaani sinu tööruumis |
Arvesse lähevad ainult edukad pakkimised – valideerimise või töö nurjumisel kvooti ei arvestata. Mõlemad loendurid lähtestatakse 1. kuupäeval (UTC). Testkeskkonna tulemused on täielikud ja piiramatud – piirangud kehtivad sisendile, mitte väljundile. Vajad rohkem kui 5 000 pakkimist kuus? Võta meiega ühendust, et arutada mahulisi ja OEM-hinnapakkumisi.
Veebihaakujad
Saada callback_url, et saada tulemus POST-i teel, kui töö on lõpetatud. Iga veebihaak kannab endaga kaasas X-Hansatic-Signature: HMAC-SHA256 allkirja toorest kehaosast sinu võtme veebihaakude salajasega (kuvatakse üks kord võtme loomisel). Kontrolli seda:
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));
}Edastus tehakse ühe katsega 5s ajapiiranguga — status_url jääb alati tõe allikaks.
Vead
Kõik vead on { "error": { "code", "message", ... } } kujul — masinloetav kood, inimloetav sõnum ja field, kui konkreetne sisend on vigane.
| Kood | HTTP | Tähendus |
|---|---|---|
| invalid_key | 401 | Puuduv, vigane või tühistatud API võti. |
| invalid_json | 400 | Päringukeha pole kehtiv JSON. |
| invalid_vehicle | 400 | Tundmatu sõidukikood või {customVehicleId}. |
| invalid_items | 400 | Ühel eseme väljal puudub väärtus, see pole number või on väljaspool lubatud vahemikku. |
| suspicious_dimensions | 400 | Kõik mõõdud alla 100 mm — tõenäoliselt tollid saadetud millimeetritena. Kasuta "units": "imperial". |
| invalid_units | 400 | units peab olema "metric" või "imperial". |
| invalid_objective | 400 | objective peab olema "ldm" või "pallets". |
| invalid_callback | 400 | callback_url peab olema https. |
| too_many_items | 400 | Manifest ületab sinu ligipääsutaseme eseme limiidi. |
| upgrade_required | 402 | Tootmisrežiim nõuab Enterprise-plaani. Kasuta liivakasti või uuenda plaani. |
| sandbox_limit_reached | 402 | Kuuane liivakasti limiit on täis — limiit taastub 1. kuupäeval. |
| quota_exceeded | 402 | Kuuane tootmiskvoot (5 000 pakkimist) on täis – lähtestub 1. kuupäeval. Suurema mahu korral palun võta meiega ühendust. |
| too_many_jobs | 429 | Üheaegsete tööde limiit on täis. Küsi käimasolevate tööde olekut ja proovi uuesti. |
| not_found | 404 | Sellist tööd sellele tööruumile ei leitud. |
Küsimusi, suuremaid limiite või vajalikku ühendajat (Zapier, Excel, MCP)? hello@hansatic.com