Packing API

Dërgo mallra, merri një plan ngarkimi të optimizuar dhe fizikisht të vlefshëm — pozicionime, metra ngarkimi, këmbë lineare dhe pozicione paletash të faturuara. E njëjta makinë që qëndron pas aplikacionit, e verifikuar vazhdimisht ndaj planeve reale të dispeçerëve. Qasje në sandbox në çdo plan; qasje në prodhim në Enterprise.

Fillimi i shpejtë

  1. Hyni → klikoni emrin tuaj → API → gjeneroni një çelës.
  2. Dërgoni një punë paketimi (kjo ekzekutohet në sandbox — falas në çdo plan):
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-..."
}

Pyeteni status_url (me të njëjtin header autentikimi) derisa status të jetë "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/..."
  }
}

Pikat fundore

POST /api/v1/pack

Verifikon dhe radhitet një punë paketimi. Kthen 202 me një job_id. Mbështet header-in Idempotency-Key — përsëritjet me të njëjtin çelës kthejnë punën origjinale në vend që të paketojnë dy herë.

GET /api/v1/jobs/{id}

Statusi i punës dhe, kur përfundon, rezultati i plotë. Rezultatet ruhen për 30 ditë; planet në prodhim jetojnë përgjithmonë në hapësirën tuaj të punës.

GET /api/v1/openapi.json

Kontrata e lexueshme nga makina OpenAPI 3.1 — importojeni në Postman, gjeneratorë kodi, ose drejtoni mjetin tuaj të kodimit me AI te të. Kodet e automjeteve injektohen nga makina aktive, kështu që është gjithmonë e përditësuar. Shihni specifikimin ↗

Fusha të përgjigjes

Objekti result për një punë të përfunduar:

FushaLlojiPërshkrim
placed_count / unplaced_countintegerSa artikuj u futën / nuk u futën.
units"metric" | "imperial"Njësitë në të cilat shprehen të gjitha numrat më poshtë (pasqyrojnë kërkesën).
metrics.ldm_mnumberMetra ngarkimi — shtrirja e bllokut të ngarkesës (maks. fund − min. fillim).
metrics.linear_ftnumberE njëjta shtrirje në këmbë lineare (LTL SHBA).
metrics.span_mmintegerShtrirja në mm, gjithmonë metrike.
metrics.pallet_positions_eurinteger | nullPozicione paletash EUR të faturuara. null kur plani është shumë i madh për t’u matur.
metrics.total_weight_kgnumberPesha e ngarkuar, gjithmonë në kg.
metrics.overlapsintegerÇiftet që përshkojnë njëra-tjetrën — gjithmonë 0 për një plan të vlefshëm.
items[].placedbooleanNëse artikulli u fut në plan.
items[].x / y / znumber | nullPozicioni në njësitë e kërkesës: x nga fundi i derës, y nga muri i majtë, z nga dyshemeja. Të tre janë null kur placed është false.
items[].rotation_deg / tilt_deg0 | 90Orientimi: rrotullim rreth boshtit vertikal; tilt = i shtrirë anash.
items[].length / width / height / weightnumberArtikulli siç u dërgua, i pasqyruar në njësitë e kërkesës.
plan_urlstring | nullPlani i krijuar në aplikacion. null për punët në sandbox.

Versionim & stabilitet

Kontrata versionohet në rrugën (/api/v1/). Brenda v1, ndryshimet janë vetëm shtuese — fusha të reja opsionale në kërkesë, fusha të reja në përgjigje, kode të reja automjetesh dhe kode gabimi mund të shfaqen, dhe klientët duhet të injorojnë fushat që nuk i njohin. Fushat ekzistuese nuk ndryshojnë kurrë kuptim ose lloj, dhe asgjë nuk hiqet. Një ndryshim thyesor nënkupton një rrugë versioni të re, me v1 të mbajtur paralelisht për të paktën 12 muaj dhe njoftim për heqje me email për çdo hapësirë pune me një çelës aktiv.

Fusha të kërkesës

FushaLlojiPërshkrim
vehiclestringNjë kod automjeti nga tabelat më poshtë. Ose kaloni {customVehicleId} (një automjet nga flota juaj në hapësirën e punës).
objective"ldm" | "pallets"Minimizo metrat e ngarkimit, ose minimizo pozicionet e paletave të faturuara. Parazgjedhja "ldm".
units"metric" | "imperial"Si lexohen dhe kthehen dimensionet dhe peshat e artikujve: mm/kg (parazgjedhje) ose in/lb. Pozicionet në përgjigje ndjekin të njëjtat njësitë.
itemsarray, requiredManifesti i ngarkesës (fushat më poshtë).
sandboxbooleanMënyrë testimi: rezultat i plotë, asgjë nuk ruhet. Disponibël në çdo plan.
namestringEmri i planit (mënyrë prodhim).
ldm_limit_mnumberKufizo ngarkesën në N metra të parë ngarkimi (kamionë).
budget_msnumberBuxheti kohor i optimizimit (prodhim; parazgjedhje 30000, maksimum 300000).
callback_urlhttps URLPOSTohet rezultati kur puna përfundon, i nënshkruar (shihni Webhooks).

Fusha të artikujve

FushaLlojiPërshkrim
length / width / heightnumber, requiredDimensionet e artikullit, të lexuara në njësitë e kërkesës (mm si parazgjedhje, inç me "units": "imperial").
weightnumber, requiredPesha e artikullit (kg si parazgjedhje, lb me "units": "imperial").
quantityinteger, default 1Zgjerohet në njësi individuale.
namestring, optionalShfaqet në plan dhe në përgjigje.
stackableboolean, default trueMund të vendosen mallra të tjerë mbi këtë artikull.
max_stacknumber, optionalPesha maksimale që ky artikull mund të mbajë mbi vete (njësi të njëjta me peshën).
fragileboolean, default falseArtikujt e brishtë vendosen vetëm në shtresat e sipërme.
tiltableboolean, default trueNëse artikulli mund të shtrihet anash.
destination_stopinteger, default 1Ndalesa e dorëzimit për ngarkim LIFO me shumë ndalesa.

Kodet e automjeteve

Të gjeneruara nga specifikimet e makinës aktive. Automjetet personalizuar nga flota juaj në hapësirën e punës funksionojnë përmes custom_vehicle_id.

Kamionë & rimorkio

KodAutomjetBrendësi (G×Gj×L)Ngarkesë
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

Kontejnerë

KodKontejnerBrendësi (G×Gj×L)Ngarkesë
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

Nivele qasjeje & kufizime

Sandbox (çdo plan)Prodhim (Enterprise)
Thirrje25 të suksesshme / muaj5,000 paketim të suksesshëm / muaj
Artikuj për manifest205,000
Puna njëkohësisht110
Buxheti i optimizimit10 s30 s parazgjedhje, deri në 300 s
RuajtjeAsgjë nuk ruhetÇdo paketim krijon një plan real në hapësirën tuaj të punës

Numërohen vetëm paketimet e suksesshme — validimet e dështuara dhe punët e dështuara nuk llogariten në kuotë. Të dyja numëruesit rivendosen më 1-tën (UTC). Rezultatet në sandbox janë të plota dhe pa kufizime — kufijtë janë porta, jo rezultati. Ju duhen më shumë se 5,000 paketime në muaj? Kontaktoni për çmime volumetrike dhe OEM.

Webhooks

Kaloni callback_url për të marrë rezultatin përmes POST kur puna përfundon. Çdo callback mbart X-Hansatic-Signature: një HMAC-SHA256 i trupit të papërpunuar me sekretin e webhook-ut të çelësit tuaj (shfaqet një herë gjatë krijimit të çelësit). Verifikojeni:

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

Dërgimi bëhet në një përpjekje me kohëzgjatje 5s — status_url mbetet gjithmonë burimi i së vërtetës.

Gabime

Të gjitha gabimet janë { "error": { "code", "message", ... } } — kod i lexueshëm nga makina, mesazh i lexueshëm nga njeriu, dhe field kur një hyrje specifike është fajtor.

KodHTTPKuptim
invalid_key401Çelësi API mungon, është i gabuar ose i revokuar.
invalid_json400Trupi nuk është JSON i vlefshëm.
invalid_vehicle400Kodi i panjohur i automjetit / {customVehicleId}.
invalid_items400Një fushë artikulli mungon, nuk është numerike ose është jashtë intervalit.
suspicious_dimensions400Të gjitha dimensionet nën 100mm — ka të ngjarë që inçet të jenë dërguar si mm. Kaloni "units": "imperial".
invalid_units400units duhet të jetë "metric" ose "imperial".
invalid_objective400objective duhet të jetë "ldm" ose "pallets".
invalid_callback400callback_url duhet të jetë https.
too_many_items400Manifesti e kalon kufirin e artikujve për nivelin tuaj të qasjes.
upgrade_required402Mënyra prodhim kërkon planin Enterprise. Përdorni sandbox, ose përmirësoni.
sandbox_limit_reached402Kufiri mujor i sandbox është shfrytëzuar — rikthehet më 1-të.
quota_exceeded402Kuota mujore e prodhimit prej 5,000 paketimesh është shfrytëzuar — rivendoset më 1-tën. Për vëllime më të mëdha: kontaktoni.
too_many_jobs429Kufiri i punëve njëkohësisht është arritur. Pyeteni punët në ekzekutim dhe riprovoni.
not_found404Nuk ekziston një punë e tillë për këtë hapësirë pune.

Pyetje, kufij më të lartë, ose një lidhës që ju nevojitet (Zapier, Excel, MCP)? hello@hansatic.com