Packing API

Pošaljite teret, dobijte optimizovan i fizički validan plan utovara — pozicije, utovarni metri, linearne stope i obračunate pozicije paleta. Isti algoritam kao u aplikaciji, kontinuirano proveravan prema stvarnim dispečerskim rasporedima. Pristup sandbox-u na svakom paketu; produkcioni pristup na Enterprise paketu.

Brzi početak

  1. Prijavite se → kliknite na svoje ime → API → generišite ključ.
  2. Pošaljite zahtev za pakovanje (ovaj se izvršava u sandbox-u — 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-..."
}

Pitajte status_url (sa istim zaglavljem za autentifikaciju) sve 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/..."
  }
}

Endpoint-i

POST /api/v1/pack

Validira i stavlja u red zahtev za pakovanje. Vraća 202 sa job_id. Podržava zaglavlje Idempotency-Key — ponovni zahtevi sa istim ključem vraćaju originalni posao umesto ponovnog pakovanja.

GET /api/v1/jobs/{id}

Status posla i, kada je završen, kompletan rezultat. Rezultati se čuvaju 30 dana; produkcioni planovi trajno ostaju u vašem radnom prostoru.

GET /api/v1/openapi.json

Mašinski čitljiv OpenAPI 3.1 ugovor — uvezite ga u Postman, generatore koda ili ga prosledite alatu za AI kodiranje. Kodovi vozila se ubacuju iz aktivnog sistema, tako da je uvek ažuran. Otvorite specifikaciju ↗

Polja odgovora

Objekat result na završenom poslu:

PoljeTipOpis
placed_count / unplaced_countintegerKoliko predmeta staje / ne staje.
units"metric" | "imperial"Jedinice u kojima su izražene sve vrednosti ispod (ponavlja zahtev).
metrics.ldm_mnumberUtovarni metri — dužina teretnog bloka (maksimalni kraj − minimalni početak).
metrics.linear_ftnumberIsta dužina u linearnim stopama (američki LTL).
metrics.span_mmintegerDužina u mm, uvek metrički.
metrics.pallet_positions_eurinteger | nullObračunate EUR pozicije paleta. null ako je raspored prevelik za merenje.
metrics.total_weight_kgnumberUkupna težina utovarenih predmeta, uvek u kg.
metrics.overlapsintegerParovi koji se preklapaju — uvek 0 za validan raspored.
items[].placedbooleanDa li je predmet smešten u raspored.
items[].x / y / znumber | nullPozicija u jedinicama zahteva: x od vrata, y od leve strane, z od poda. Sve tri vrednosti su null ako je placed false.
items[].rotation_deg / tilt_deg0 | 90Orijentacija: rotacija oko vertikalne ose; tilt = položeno na bok.
items[].length / width / height / weightnumberPredmet kako je poslat, ponovljen u jedinicama zahteva.
plan_urlstring | nullKreirani plan u aplikaciji. null za poslove u sandbox-u.

Verzioniranje i stabilnost

Ugovor je verzionisan u putanji (/api/v1/). Unutar v1, promene su samo dodatne — novi opcioni polja zahteva, nova polja odgovora, novi kodovi vozila i kodovi grešaka mogu se pojaviti, a klijenti treba da ignorišu polja koja ne prepoznaju. Postojeća polja nikada ne menjaju značenje ili tip, i ništa se ne uklanja. Breaking change znači novu verziju putanje, pri čemu se v1 održava paralelno najmanje 12 meseci uz obaveštenje o zastarelosti putem mejla svakom radnom prostoru sa aktivnim ključem.

Polja zahteva

PoljeTipOpis
vehiclestringKod vozila iz tabela ispod. Ili prosledite {customVehicleId} (vozilo iz vaše flote radnog prostora).
objective"ldm" | "pallets"Minimiziraj utovarnih metara ili obračunate pozicije paleta. Podrazumevana vrednost je "ldm".
units"metric" | "imperial"Kako se tumače i vraćaju dimenzije i težine predmeta: mm/kg (podrazumevano) ili in/lb. Pozicije u odgovoru prate iste jedinice.
itemsarray, requiredManifest tereta (polja ispod).
sandboxbooleanTest režim: kompletan rezultat, ništa se ne čuva. Dostupno na svakom paketu.
namestringNaziv plana (produkcioni režim).
ldm_limit_mnumberOgraniči utovar na prvih N utovarnih metara (kamioni).
budget_msnumberBudžet vremena za optimizaciju (produkcija; podrazumevano 30000, maksimalno 300000).
callback_urlhttps URLPOST-uje se rezultat kada posao završi, potpisan (vidi Webhook-ove).

Polja predmeta

PoljeTipOpis
length / width / heightnumber, requiredDimenzije predmeta, tumačene u jedinicama zahteva (mm podrazumevano, inči sa "units": "imperial").
weightnumber, requiredTežina predmeta (kg podrazumevano, lb sa "units": "imperial").
quantityinteger, default 1Razvija se u pojedinačne jedinice.
namestring, optionalPrikazuje se u planu i odgovoru.
stackableboolean, default trueDa li drugi teret može biti postavljen na ovaj predmet.
max_stacknumber, optionalMaksimalna težina koja može biti postavljena na ovaj predmet (iste jedinice kao težina).
fragileboolean, default falseKrhki predmeti se postavljaju samo u gornje slojeve.
tiltableboolean, default trueDa li se predmet može položiti na bok.
destination_stopinteger, default 1Odredišna stanica za utovar sa više stanica (LIFO).

Kodovi vozila

Generisani iz specifikacija aktivnog sistema. Prilagođena vozila iz vaše flote radnog prostora rade preko custom_vehicle_id.

Kamioni i prikolice

KodVoziloUnutrašnjost (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šnjost (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

Nivoi pristupa i ograničenja

Sandbox (svaki paket)Produkcija (Enterprise)
Pozivi25 uspešnih / mesečno5.000 uspešnih pakovanja / mesec
Predmeta po manifestu205,000
Istovremeni poslovi110
Budžet optimizacije10 s30 s podrazumevano, do 300 s
ČuvanjeNišta se ne čuvaSvaki paket kreira stvarni plan u vašem radnom prostoru

Broje se samo uspešna pakovanja — neuspešne validacije i neuspešni poslovi nikada se ne obračunavaju prema kvoti. Oba brojača se resetuju 1. u mesecu (UTC). Rezultati u sandbox okruženju su potpuni i neograničeni — granice su filter, a ne izlaz. Potrebno vam je više od 5.000 pakovanja mesečno? Razgovarajte sa nama o cenama za veće količine i OEM licencama.

Webhook-ovi

Prosledite callback_url da biste primili rezultat PUT zahtevom kada posao bude završen. Svaki poziv sadrži X-Hansatic-Signature: HMAC-SHA256 potpisa sirovog tela sa tajnim ključem za webhook-ove vašeg ključa (prikazan jednom prilikom kreiranja ključa). Verifikujte 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));
}

Isporuka je jedan pokušaj sa vremenskim ograničenjem od 5s — status_url uvek ostaje izvor istine.

Greške

Sve greške su { "error": { "code", "message", ... } } — mašinski čitljiv kod, čitljiva poruka za čoveka i field kada je određeni ulazni podatak neispravan.

KodHTTPZnačenje
invalid_key401Nedostaje, neispravan ili opozvan API ključ.
invalid_json400Telo nije validan JSON.
invalid_vehicle400Nepoznat kod vozila / {customVehicleId}.
invalid_items400Polje predmeta nedostaje, nije brojčano ili je van opsega.
suspicious_dimensions400Sve dimenzije ispod 100mm — verovatno inči poslati kao mm. Prosledite "units": "imperial".
invalid_units400units mora biti "metric" ili "imperial".
invalid_objective400objective mora biti "ldm" ili "pallets".
invalid_callback400callback_url mora biti https.
too_many_items400Manifest prelazi ograničenje broja predmeta za vaš nivo pristupa.
upgrade_required402Produkcioni režim zahteva Enterprise paket. Koristite sandbox ili nadogradite paket.
sandbox_limit_reached402Mesečni limit sandbox-a iskorišćen — resetuje se prvog u mesecu.
quota_exceeded402Mesečna kvota od 5.000 pakovanja iskorišćena — resetuje se 1. u mesecu. Za veće količine: kontaktirajte nas.
too_many_jobs429Dostignut limit istovremenih poslova. Pitajte status tekućih poslova i pokušajte ponovo.
not_found404Ne postoji takav posao za ovaj radni prostor.

Pitanja, veći limiti ili konektor koji vam treba (Zapier, Excel, MCP)? hello@hansatic.com