Packing API

Pošaljite teret, a dobijete optimiziran i fizički valjan plan utovara — pozicije, utovarni metri, linearne stope i obračunate pozicije paleta. Isti mehanizam koji stoji iza aplikacije, kontinuirano provjeren prema stvarnim dispečerskim rasporedima. Pristup pješčaniku uključen na svakom paketu; produkcijski pristup na Enterprise planu.

Brzi početak

  1. Prijavite se → kliknite na svoje ime → API → generirajte ključ.
  2. Pošaljite zahtjev za pakiranje (ovaj se izvodi u pješčaniku — besplatan na svakom 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-..."
}

Provjeravajte status_url (isti zaglavlje za autentifikaciju) dok status ne bude "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/..."
  }
}

Endpointi

POST /api/v1/pack

Provjerava i stavlja u red zahtjev za pakiranje. Vraća 202 s job_id. Podržava zaglavlje Idempotency-Key — ponovljeni zahtjevi s istim ključem vraćaju izvorni posao umjesto ponovnog pakiranja.

GET /api/v1/jobs/{id}

Status posla i, kada je završen, cijeli rezultat. Rezultati se čuvaju 30 dana; produkcijski planovi trajno su pohranjeni u vašem radnom prostoru.

GET /api/v1/openapi.json

Strojno čitljivi OpenAPI 3.1 ugovor — uvezite ga u Postman, generatore koda ili ga proslijedite alatu za kodiranje s AI-om. Kodovi vozila preuzimaju se iz aktivnog mehanizma, pa je uvijek ažuran. Otvori specifikaciju ↗

Polja odgovora

Objekt result za završen posao:

PoljeTipOpis
placed_count / unplaced_countintegerKoliko je predmeta stalo / nije stalo.
units"metric" | "imperial"Jedinice u kojima su izražene sve navedene vrijednosti (ponavlja zahtjev).
metrics.ldm_mnumberUtovarni metri — duljina teretnog bloka (maksimalni kraj − minimalni početak).
metrics.linear_ftnumberIsta duljina u linearnih stopa (američki LTL).
metrics.span_mmintegerDuljina u mm, uvijek metrički.
metrics.pallet_positions_eurinteger | nullObračunate EUR pozicije paleta. null ako je raspored prevelik za mjerenje.
metrics.total_weight_kgnumberUkupna masa utovarenih predmeta, uvijek u kg.
metrics.overlapsintegerPreklapajući parovi — uvijek 0 za valjan raspored.
items[].placedbooleanJe li predmet ušao u raspored.
items[].x / y / znumber | nullPozicija u jedinicama zahtjeva: x od vrata, y od lijevog zida, z od poda. Sve tri vrijednosti su null ako je placed false.
items[].rotation_deg / tilt_deg0 | 90Orijentacija: rotacija oko okomite osi; tilt = položeno na bok.
items[].length / width / height / weightnumberDimenzije predmeta kako su navedene u zahtjevu, u jedinicama zahtjeva.
plan_urlstring | nullStvoreni plan u aplikaciji. null za poslove u pješčaniku.

Verzioniranje i stabilnost

Ugovor je verzioniran u putanji (/api/v1/). Unutar v1, promjene su isključivo dodatne — novi neobavezni polja zahtjeva, nova polja odgovora, novi kodovi vozila i kodovi grešaka mogu se pojaviti, a klijenti trebaju zanemariti polja koja ne prepoznaju. Postojeća polja nikada ne mijenjaju značenje ili tip, a ništa se ne uklanja. Promjena koja narušava kompatibilnost znači novu verziju putanje, pri čemu se v1 održava paralelno najmanje 12 mjeseci, uz obavijest o zastariivanju e-poštom svakom radnom prostoru s aktivnim ključem.

Polja zahtjeva

PoljeTipOpis
vehiclestringKod vozila iz donjih tablica. Ili proslijedite {customVehicleId} (vozilo iz vaše radne flote).
objective"ldm" | "pallets"Minimizirajte utovarnih metara ili obračunate pozicije paleta. Zadano "ldm".
units"metric" | "imperial"Kako se tumače i vraćaju dimenzije i mase predmeta: mm/kg (zadano) ili in/lb. Pozicije u odgovoru slijede iste jedinice.
itemsarray, requiredPopis tereta (polja u nastavku).
sandboxbooleanTestni način: puni rezultat, ništa se ne pohranjuje. Dostupan na svakom paketu.
namestringNaziv plana (proizvodni način).
ldm_limit_mnumberOgraničite utovar na prvih N utovarnih metara (kamioni).
budget_msnumberVremenski budžet optimizacije (proizvodnja; zadano 30000, maksimalno 300000).
callback_urlhttps URLRezultat se šalje POST zahtjevom na ovu adresu kada posao završi, potpisan (vidi Webhookove).

Polja predmeta

PoljeTipOpis
length / width / heightnumber, requiredDimenzije predmeta, tumače se u jedinicama zahtjeva (zadano mm, inči s "units": "imperial").
weightnumber, requiredMasa predmeta (zadano kg, lb s "units": "imperial").
quantityinteger, default 1Razvija se u pojedinačne jedinice.
namestring, optionalPrikazuje se u planu i odgovoru.
stackableboolean, default trueMože li drugi teret biti smješten iznad ovog predmeta.
max_stacknumber, optionalMaksimalna masa koja može biti smještena iznad (iste jedinice kao i masa).
fragileboolean, default falseKrhki predmeti smještaju se samo u gornje slojeve.
tiltableboolean, default trueMože li se predmet položiti na bok.
destination_stopinteger, default 1Odredišna stanica za utovar s više stanica (LIFO).

Kodovi vozila

Generirani iz specifikacija aktivnog mehanizma. Prilagođena vozila iz vaše radne flote rade preko custom_vehicle_id.

Kamioni i prikolice

KodVoziloUnutrašnje dimenzije (D׊×V)Nosivost
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

Kontejneri

KodKontejnerUnutrašnje dimenzije (D׊×V)Nosivost
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

Razine pristupa i ograničenja

Pješčanik (svaki paket)Proizvodnja (Enterprise)
Pozivi25 uspješnih / mjesec5.000 uspješnih pakiranja / mjesec
Predmeta po popisu205,000
Istovremeni poslovi110
Budžet optimizacije10 s30 s zadano, do 300 s
TrajnostNišta se ne pohranjujeSvaki paket stvara stvarni plan u vašem radnom prostoru

Broj se odnosi samo na uspješno izvršena pakiranja — neuspješne provjere valjanosti i neuspješni poslovi ne utječu na kvotu. Oba brojača se resetiraju 1. u mjesecu (UTC). Rezultati u sandbox okruženju su potpuni i neograničeni — ograničenja se odnose na broj zahtjeva, a ne na izlazne podatke. Trebate više od 5.000 pakiranja mjesečno? Kontaktirajte nas za rješenja većih volumena i OEM cijene.

Webhookovi

Proslijedite callback_url kako biste primili rezultat PUT zahtjevom kada posao završi. Svaki poziv sadrži X-Hansatic-Signature: HMAC-SHA256 potpisa sirovog tijela s webhook tajnim ključem vašeg ključa (prikazan jednom prilikom stvaranja ključa). Provjerite 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 jedan pokušaj s vremenskim ograničenjem od 5 s — status_url uvijek ostaje izvor istine.

Greške

Sve greške su { "error": { "code", "message", ... } } — strojno čitljiv kod, ljudski čitljiva poruka i field ako je određeni ulazni podatak kriv.

KodHTTPZnačenje
invalid_key401Nedostaje, neispravan ili opozvan API ključ.
invalid_json400Tijelo nije valjani JSON.
invalid_vehicle400Nepoznat kod vozila / {customVehicleId}.
invalid_items400Polje predmeta nedostaje, nije brojčano ili je izvan raspona.
suspicious_dimensions400Sve dimenzije ispod 100 mm — vjerojatno su inči poslani kao mm. Proslijedite "units": "imperial".
invalid_units400units mora biti "metric" ili "imperial".
invalid_objective400objective mora biti "ldm" ili "pallets".
invalid_callback400callback_url mora biti https.
too_many_items400Popis tereta premašuje ograničenje predmeta za vašu razinu pristupa.
upgrade_required402Proizvodni način zahtijeva Enterprise paket. Koristite pješčanik ili nadogradite paket.
sandbox_limit_reached402Mjesečni limit pješčanika iskorišten — obnavlja se 1. u mjesecu.
quota_exceeded402Mjesečna kvota od 5.000 pakiranja iskorištena — resetira se 1. u mjesecu. Za veće volumene: kontaktirajte nas.
too_many_jobs429Dosegnut limit istovremenih poslova. Provjerite tekuće poslove i pokušajte ponovno.
not_found404Nema takvog posla za ovaj radni prostor.

Pitanja, veća ograničenja ili konektor koji vam treba (Zapier, Excel, MCP)? hello@hansatic.com