Iepakojuma API

Iesniedziet kravu, saņemiet optimizētu, fizikāli derīgu iekraušanas plānu — novietojumus, iekraušanas metrus, lineāros metrus un norēķinātās paletes pozīcijas. Tas pats dzinis, kas darbojas lietotnē, nepārtraukti validēts pret īstajiem dispečeru izkārtojumiem. Iespēja izmēģināt pieejama katrā plānā; produkcijas pieeja — Enterprise plānā.

Ātrā sākšana

  1. Pieteikties → noklikšķiniet uz savas lietotājvārda → API → ģenerējiet atslēgu.
  2. Iesniedziet iepakojuma uzdevumu (šis darbojas testrežīmā — bez maksas katrā plānā):
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ārbaudiet status_url (ar to pašu autentifikācijas galveni) līdz status ir "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/..."
  }
}

Galvenes

POST /api/v1/pack

Validē un ievieto iepakojuma uzdevumu rindā. Atgriež 202 ar job_id. Atbalsta Idempotency-Key galveni — atkārtoti pieprasījumi ar to pašu atslēgu atgriež sākotnējo uzdevumu, nevis veic iepakojumu vēlreiz.

GET /api/v1/jobs/{id}

Uzdevuma statuss un, pēc pabeigšanas, pilns rezultāts. Rezultāti tiek saglabāti 30 dienas; produkcijas plāni jūsu darba telpā ir pieejami pastāvīgi.

GET /api/v1/openapi.json

Mašīnlasāmais OpenAPI 3.1 līgums — importējiet to Postman, koda ģeneratoros vai norādiet savam AI koda rīkam. Transportlīdzekļu kodi tiek iegūti no tiešsaistes dzinēja, tāpēc tas vienmēr ir aktuāls. Atvērt specifikāciju ↗

Atbildes lauki

result objekts pabeigtam uzdevumam:

LauksTipsApraksts
placed_count / unplaced_countintegerCik vienību ietilpst / neietilpst.
units"metric" | "imperial"Mērvienības, kurās izteikti visi skaitļi zemāk (atkārto pieprasījumu).
metrics.ldm_mnumberIekraušanas metri — kravas bloka izmērs (maksimālais beigu punkts − minimālais sākuma punkts).
metrics.linear_ftnumberTas pats izmērs lineārajos pēdās (ASV LTL).
metrics.span_mmintegerIzmērs milimetros, vienmēr metrisks.
metrics.pallet_positions_eurinteger | nullNorēķinātās EUR paletes pozīcijas. Null, ja izkārtojums ir pārāk liels mērīšanai.
metrics.total_weight_kgnumberIeliktais svars, vienmēr kg.
metrics.overlapsintegerSavstarpēji pārklājošies pāri — vienmēr 0 derīgam izkārtojumam.
items[].placedbooleanVai vienība iekļauta izkārtojumā.
items[].x / y / znumber | nullPozīcija pieprasījuma mērvienībās: x no durvju gala, y no kreisās sienas, z no grīdas. Visas trīs vērtības ir null, ja placed ir false.
items[].rotation_deg / tilt_deg0 | 90Orientācija: pagrieziens ap vertikālo asi; tilt = novietots uz sāniem.
items[].length / width / height / weightnumberVienība, kā iesniegta, atkārtota pieprasījuma mērvienībās.
plan_urlstring | nullIzveidotais plāns lietotnē. Null testrežīma uzdevumiem.

Versiju pārvaldība un stabilitāte

Līgums ir versiju pārvaldīts ceļa nosaukumā (/api/v1/). Ietvaros v1 izmaiņas ir tikai papildinājošas — jauni neobligāti pieprasījuma lauki, jauni atbildes lauki, jauni transportlīdzekļu kodi un kļūdu kodi var parādīties, un klientiem jāignorē lauki, kurus tie neatpazīst. Esošie lauki nekad nemaina nozīmi vai tipu, un nekas netiek noņemts. Lūzuma izmaiņa nozīmē jaunu versijas ceļu, kamēr v1 tiek uzturēts paralēli vismaz 12 mēnešus, un noņemšanas paziņojums tiek nosūtīts pa e-pastu katrai darba telpai ar aktīvu atslēgu.

Pieprasījuma lauki

LauksTipsApraksts
vehiclestringTransportlīdzekļa kods no zemāk esošajām tabulām. Vai arī norādiet {customVehicleId} (transportlīdzeklis no jūsu darba telpas flotes).
objective"ldm" | "pallets"Minimizēt iekraušanas metrus vai norēķinātās paletes pozīcijas. Noklusējums "ldm".
units"metric" | "imperial"Kā tiek uztverti un atgriezti vienību izmēri un svars: mm/kg (noklusējums) vai collas/mārciņas. Pozīcijas atbildē tiek izteiktas tādās pašās mērvienībās.
itemsarray, requiredKravas manifests (zemāk esošie lauki).
sandboxbooleanTesta režīms: pilns rezultāts, nekas netiek saglabāts. Pieejams katrā plānā.
namestringPlāna nosaukums (produkcijas režīmā).
ldm_limit_mnumberIerobežot kravu līdz pirmajiem N iekraušanas metriem (kravas automašīnas).
budget_msnumberOptimizācijas laika budžets (produkcijā; noklusējums 30000, maksimums 300000).
callback_urlhttps URLRezultāts tiks nosūtīts ar POST, kad uzdevums būs pabeigts, parakstīts (skat. Webhook).

Vienību lauki

LauksTipsApraksts
length / width / heightnumber, requiredVienības izmēri, uztverti pieprasījuma mērvienībās (noklusējums mm, collas, ja "units": "imperial").
weightnumber, requiredVienības svars (noklusējums kg, mārciņas, ja "units": "imperial").
quantityinteger, default 1Pārvēršas atsevišķās vienībās.
namestring, optionalParādīts plānā un atbildē.
stackableboolean, default trueUz šīs vienības var likt citu kravu.
max_stacknumber, optionalMaksimālais svars, ko šī vienība var nest virsū (tās pašās mērvienībās kā svars).
fragileboolean, default falseTrauslas vienības tiek novietotas tikai augšējos slāņos.
tiltableboolean, default trueVai vienību var novietot uz sāniem.
destination_stopinteger, default 1Piegādes pietura vairākpieturu LIFO iekraušanai.

Transportlīdzekļu kodi

Ģenerēti no tiešsaistes dzinēja specifikācijām. Jūsu darba telpas flotes pielāgotie transportlīdzekļi darbojas, izmantojot custom_vehicle_id.

Kravas automašīnas un piekabes

KodsTransportlīdzeklisIekšējie izmēri (G×P×A)Kravnesība
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

Konteineri

KodsKonteinersIekšējie izmēri (G×P×A)Kravnesība
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

Piekļuves līmeņi un ierobežojumi

Testa režīms (katrā plānā)Produkcija (Enterprise)
Izsaukumi25 veiksmīgi / mēnesī5000 veiksmīgi pakošanas plāni / mēnesī
Vienības manifestā205,000
Vienlaicīgi uzdevumi110
Optimizācijas budžets10 s30 s noklusējums, līdz 300 s
SaglabāšanaNekas netiek saglabātsKatrs iepakojums izveido īstu plānu jūsu darba telpā

Tiek skaitīti tikai veiksmīgi izpildītie pakošanas plāni — nepareizi validēti vai neizdevušies uzdevumi nekādā veidā neietekmē kvotas. Abi skaitītāji atiestatās 1. datumā (UTC). Sandbox rezultāti ir pilnīgi un neierobežoti — ierobežojumi attiecas tikai uz piekļuvi, ne uz izejas datiem. Vajadzīgas vairāk nekā 5000 pakošanas plāni mēnesī? Sazinieties ar mums par lielapjoma un OEM cenu nosacījumiem.

Webhook

Norādiet callback_url, lai saņemtu rezultātu ar POST, kad uzdevums būs pabeigts. Katrs izsaukums satur X-Hansatic-Signature: HMAC-SHA256 no neapstrādāta ķermeņa ar jūsu atslēgas webhook slepeno kodu (parādīts vienreiz atslēgas izveides brīdī). Pārbaudiet to:

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

Piegāde notiek vienā mēģinājumā ar 5 s laika limitu — status_url vienmēr paliek patiesības avots.

Kļūdas

Visas kļūdas ir { "error": { "code", "message", ... } } formātā — mašīnlasāmais kods, cilvēkam saprotams paziņojums un field, ja vainojams konkrēts ievades lauks.

KodsHTTPNozīme
invalid_key401Trūkst, nepareizi formatēta vai atsaukta API atslēga.
invalid_json400Ķermenis nav derīgs JSON.
invalid_vehicle400Nezināms transportlīdzekļa kods / {customVehicleId}.
invalid_items400Vienības laukam trūkst, tas nav skaitlisks vai ir ārpus robežām.
suspicious_dimensions400Visi izmēri zem 100 mm — iespējams, collas nosūtītas kā mm. Norādiet "units": "imperial".
invalid_units400units jābūt "metric" vai "imperial".
invalid_objective400objective jābūt "ldm" vai "pallets".
invalid_callback400callback_url jābūt https.
too_many_items400Manifests pārsniedz vienību ierobežojumu jūsu piekļuves līmenim.
upgrade_required402Produkcijas režīms pieprasa Enterprise plānu. Izmantojiet testa režīmu vai veiciet pāriešanu.
sandbox_limit_reached402Mēneša testa režīma limits iztērēts — atjaunojas 1. datumā.
quota_exceeded402Mēneša kvota (5000 pakošanas plāni) izlietota — atiestatās 1. datumā. Ja nepieciešams lielāks apjoms: sazinieties ar mums.
too_many_jobs429Sasniegts vienlaicīgo uzdevumu limits. Pārbaudiet esošos uzdevumus un mēģiniet vēlreiz.
not_found404Šāds uzdevums šai darba telpai neeksistē.

Jautājumi, augstāki ierobežojumi vai nepieciešams savienojums (Zapier, Excel, MCP)? hello@hansatic.com