Packing API

Oddajte tovor in pridobite nazaj optimiziran, fizično veljaven načrt nakladanja — položaje, nakladalne metre, linearne čevlje in obračunane položaje palet. Enak motor kot v aplikaciji, nenehno preverjan glede na dejanske dispečerske razporeditve. Dostop do peskovnika na vsakem paketu; produkcijski dostop na Enterprise.

Hitri začetek

  1. Prijavite se → kliknite na svoje ime → API → ustvarite ključ.
  2. Oddajte nalogo za pakiranje (ta se izvaja v peskovniku — brezplačno na vsakem paketu):
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-..."
}

Ponavljajte poizvedbe na status_url (enaka avtentikacijska glava) dokler status ni "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/..."
  }
}

Končne točke

POST /api/v1/pack

Preveri in uvrsti nalogo za pakiranje v čakalno vrsto. Vrne 202 s job_id. Podpira glavo Idempotency-Key — ponovitve z istim ključem vrnejo izvirno nalogo namesto ponovnega pakiranja.

GET /api/v1/jobs/{id}

Stanje naloge in, ko je končana, celoten rezultat. Rezultati se hranijo 30 dni; produkcijski načrti ostanejo v vašem delovnem prostoru trajno.

GET /api/v1/openapi.json

Strojno berljiva OpenAPI 3.1 pogodba — uvozite jo v Postman, generatorje kode ali jo prikažite svojemu orodju za kodiranje z umetno inteligenco. Kode vozil so vnesene iz aktivnega motorja, zato je vedno aktualna. Odprite specifikacijo ↗

Polja odgovora

Objekt result končane naloge:

PoljeTipOpis
placed_count / unplaced_countintegerKoliko izdelkov se je prileglo / se ni prileglo.
units"metric" | "imperial"Enote, v katerih so izražena vsa spodnja števila (ponovitev zahteve).
metrics.ldm_mnumberNakladalni metri — razpon tovornega bloka (maks. konec − min. začetek).
metrics.linear_ftnumberEnak razpon v linearnih čevljih (ameriški LTL).
metrics.span_mmintegerRazpon v mm, vedno metrično.
metrics.pallet_positions_eurinteger | nullObračunani položaji EUR palet. null, če je razporeditev prevelika za merjenje.
metrics.total_weight_kgnumberTeža nameščenih izdelkov, vedno v kg.
metrics.overlapsintegerPrekrivajoči se pari — vedno 0 za veljavno razporeditev.
items[].placedbooleanAli je izdelek prišel v razporeditev.
items[].x / y / znumber | nullPoložaj v enotah zahteve: x od konca z vrati, y od leve stene, z od tal. Vsi trije so null, če je placed false.
items[].rotation_deg / tilt_deg0 | 90Orientacija: rotacija okoli navpične osi; tilt = položen na stran.
items[].length / width / height / weightnumberIzdelek, kot je bil oddan, ponovljen v enotah zahteve.
plan_urlstring | nullUstvarjen načrt v aplikaciji. null za naloge v peskovniku.

Verzioniranje in stabilnost

Pogodba je verzionirana v poti (/api/v1/). Znotraj v1 so spremembe izključno aditivne — novi neobvezni polji zahteve, nova polja odgovora, nove kode vozil in napake se lahko pojavijo, stranke pa naj prezrejo polja, ki jih ne prepoznajo. Obstoječa polja nikoli ne spremenijo pomena ali tipa, ničesar pa se ne odstrani. Prekinitev združljivosti pomeni novo verzijo poti, pri čemer se v1 vzdržuje vzporedno vsaj 12 mesecev in obvestilo o opuščanju pošlje na e-pošto vsakega delovnega prostora z aktivnim ključem.

Polja zahteve

PoljeTipOpis
vehiclestringKoda vozila iz spodnjih tabel. Lahko podate tudi {customVehicleId} (vozilo iz vaše flote delovnega prostora).
objective"ldm" | "pallets"Minimizirajte nakladalne metre ali obračunane položaje palet. Privzeto "ldm".
units"metric" | "imperial"Kako se berejo in vračajo dimenzije in teže izdelkov: mm/kg (privzeto) ali in/lb. Položaji v odgovoru sledijo enakim enotam.
itemsarray, requiredManifest tovora (polja spodaj).
sandboxbooleanNačin preizkusa: poln rezultat, ničesar se ne shrani. Na voljo na vsakem paketu.
namestringIme načrta (način produkcije).
ldm_limit_mnumberOmejite nakladanje na prvih N nakladalnih metrov (tovornjaki).
budget_msnumberČasovni proračun za optimizacijo (produkcija; privzeto 30000, največ 300000).
callback_urlhttps URLPo končani nalogi se rezultat pošlje na {callbackUrl}, podpisan (glej Spletni klici).

Polja izdelkov

PoljeTipOpis
length / width / heightnumber, requiredDimenzije izdelka, prebranega v enotah zahteve (privzeto mm, palci z "units": "imperial").
weightnumber, requiredTeža izdelka (privzeto kg, lb z "units": "imperial").
quantityinteger, default 1Razširi se v posamezne enote.
namestring, optionalPrikazano v načrtu in odgovoru.
stackableboolean, default trueNa ta izdelek se lahko namesti drug tovor.
max_stacknumber, optionalMaksimalna teža, ki jo lahko izdelek nosi na sebi (enake enote kot teža).
fragileboolean, default falseKrhki izdelki se namestijo samo v zgornje plasti.
tiltableboolean, default trueAli se lahko izdelek položi na stran.
destination_stopinteger, default 1Prevozna postaja za večpostajno LIFO nakladanje.

Kode vozil

Ustvarjene iz specifikacij aktivnega motorja. Prilagojena vozila iz vaše flote delovnega prostora delujejo prek custom_vehicle_id.

Tovornjaki in prikolice

KodaVoziloNotranjost (D׊×V)Nosilnost
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

Kontejnerji

KodaKontejnerNotranjost (D׊×V)Nosilnost
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

Razredi dostopa in omejitve

Peskovnik (vsak paket)Produkcija (Enterprise)
Klici25 uspešnih / mesec5.000 uspešnih pakiranj / mesec
Izdelkov na manifest205,000
Vzporedne naloge110
Proračun optimizacije10 s30 s privzeto, do 300 s
ShranjevanjeNičesar se ne shraniVsako pakiranje ustvari pravi načrt v vašem delovnem prostoru

Štejejo se le uspešno zaključena pakiranja — neuspešne validacije in neuspešne naloge nikoli ne zaračunavamo v kvoto. Oba števca se ponastavita 1. dne (UTC). Rezultati v peskovniku so popolni in neokrnjeni — omejitve so le meja, ne pa tudi izhoda. Potrebujete več kot 5.000 pakiranj na mesec? Oglejte si možnosti za večje količine in cene OEM.

Spletni klici

Podajte callback_url, da prejmete rezultat prek POST, ko se naloga zaključi. Vsak klic vsebuje X-Hansatic-Signature: HMAC-SHA256 izvornega telesa s spletno skrivnostjo vašega ključa (prikazano enkrat ob ustvarjanju ključa). Preverite ga:

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

Dostava je en poskus s časovno omejitvijo 5 s — status_url vedno ostane vir resnice.

Napake

Vse napake so { "error": { "code", "message", ... } } — strojno berljiva koda, razumljivo sporočilo za človeka in field, če je vzrok določeno vhodno polje.

KodaHTTPPomen
invalid_key401Manjkajoč, napačno oblikovan ali preklican API ključ.
invalid_json400Telo ni veljaven JSON.
invalid_vehicle400Neznana koda vozila / {customVehicleId}.
invalid_items400Polje izdelka manjka, ni številsko ali je izven obsega.
suspicious_dimensions400Vse dimenzije pod 100 mm — verjetno palci poslani kot mm. Podajte "units": "imperial".
invalid_units400units mora biti "metric" ali "imperial".
invalid_objective400objective mora biti "ldm" ali "pallets".
invalid_callback400callback_url mora biti https.
too_many_items400Manifest presega omejitev števila izdelkov za vaš razred dostopa.
upgrade_required402Način produkcije zahteva paket Enterprise. Uporabite peskovnik ali nadgradite.
sandbox_limit_reached402Mesečna kvota peskovnika je porabljena — ponastavi se 1. v mesecu.
quota_exceeded402Mesečna proizvodna kvota 5.000 pakiranj je izkoriščena — ponastavitev 1. dne. Za večje količine: stopite v stik z nami.
too_many_jobs429Dosežena omejitev vzporednih nalog. Poizvedujte o tekočih nalogah in poskusite znova.
not_found404Nobena taka naloga za ta delovni prostor.

Vprašanja, višje omejitve ali povezovalnik, ki ga potrebujete (Zapier, Excel, MCP)? hello@hansatic.com