Pakkimise API

Saada kaubad, saada tagasi optimeeritud ja füüsiliselt korrektne koormaplaan — paigutused, laadimismeetrid, lineaarjalad ja arveldatavad palleti positsioonid. Sama mootor, mis on rakenduses, pidevalt valideeritud päris dispetšerite paigutuste alusel. Liivakasti ligipääs iga plaaniga; tootmisrežiim Enterprise-plaanil.

Kiire algus

  1. Logi sisse → klõpsa oma nimele → API → genereeri võti.
  2. Saada pakkimise töö (see töötab liivakastis — tasuta iga plaaniga):
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-..."
}

Küsi status_url (sama autentimispeaga) kuni status on "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/..."
  }
}

Pöördumispunktid

POST /api/v1/pack

Valideerib ja paneb järjekorda pakkimise töö. Tagastab 202 koos job_id-ga. Toetab Idempotency-Key päist — korduspäringud sama võtmega tagastavad algse töö asemel uue töö loomise.

GET /api/v1/jobs/{id}

Töö olek ja, kui töö on lõpetatud, täielik tulemus. Tulemused säilitatakse 30 päeva; tootmisplaani tööd jäävad sinu tööruumi jäädavalt.

GET /api/v1/openapi.json

Masinloetav OpenAPI 3.1 leping — impordi see Postmani, koodigeneraatoritesse või suuna oma AI-kodeerimistööriist sellele. Sõidukikoodid on pärit reaalajas mootorist, seega on see alati ajakohane. Ava spetsifikatsioon ↗

Vastuse väljad

result objekt lõpetatud töös:

VäliTüüpKirjeldus
placed_count / unplaced_countintegerMitu eset mahus / ei mahtunud.
units"metric" | "imperial"Ühikud, milles on väljendatud kõik allolevad numbrid (kordab päringut).
metrics.ldm_mnumberLaadimismeetrid — kaubabloki ulatus (maksimaalne lõpp − minimaalne algus).
metrics.linear_ftnumberSama ulatus lineaarjalgades (USA LTL).
metrics.span_mmintegerUlatus millimeetrites, alati meetermõõdustikus.
metrics.pallet_positions_eurinteger | nullArveldatavad EUR-palletipositsioonid. null, kui paigutus on liiga suur mõõtmiseks.
metrics.total_weight_kgnumberPaigutatud kaal, alati kg.
metrics.overlapsintegerÜksteist läbistavad paarid — alati 0 kehtiva paigutuse korral.
items[].placedbooleanKas ese mahutati paigutusse.
items[].x / y / znumber | nullAsukoht päringuühikutes: x uksepoolse otsa suunas, y vasakust seina suunas, z põrandast üles. Kõik kolm on null, kui placed on false.
items[].rotation_deg / tilt_deg0 | 90Suund: pöörlemine vertikaaltelje ümber; tilt = külili asetatud.
items[].length / width / height / weightnumberEse, nagu see päringus esitatud, kordatud päringuühikutes.
plan_urlstring | nullLoodud plaan rakenduses. null liivakasti tööde korral.

Versioneerimine ja stabiilsus

Leping on versioneeritud teejuhises (/api/v1/). Versiooni v1 sees tehakse muudatusi ainult lisavormis — uued valikulised päringu väljad, uued vastuse väljad, uued sõidukikoodid ja veakoodid võivad ilmneda, ning kliendid peaksid ignoreerima välju, mida nad ei tunne. Olemasolevate väljade tähendus ega tüüp ei muutu, ega midagi ei eemaldata. Murdev muudatus tähendab uue versiooni teejuhet, kusjuures v1-d säilitatakse paralleelselt vähemalt 12 kuu jooksul ja hoiatatakse e-posti teel iga tööruumi omanikku, kellel on aktiivne võti.

Päringu väljad

VäliTüüpKirjeldus
vehiclestringSõidukikood allolevatest tabelitest. Või kasuta {customVehicleId} (sõiduk sinu tööruumi pargist).
objective"ldm" | "pallets"Minimeeri laadimismeetreid või arveldatavaid palleti positsioone. Vaikimisi "ldm".
units"metric" | "imperial"Kuidas eseme mõõtmeid ja kaalu loetakse JA tagastatakse: mm/kg (vaikimisi) või in/lb. Vastuses positsioonid järgivad samu ühikuid.
itemsarray, requiredKaubamanifest (väljad allpool).
sandboxbooleanTestrežiim: täielik tulemus, midagi ei salvestata. Saadaval iga plaaniga.
namestringPlaaninimi (tootmisrežiimis).
ldm_limit_mnumberPiira koorma esimese N laadimismeetrini (veoautod).
budget_msnumberOptimeerimise ajapiirang (tootmisrežiimis; vaikimisi 30000, maksimaalselt 300000).
callback_urlhttps URLPOST-itab tulemuse, kui töö on lõpetatud, allkirjastatult (vt Veebihaakujad).

Ese väljad

VäliTüüpKirjeldus
length / width / heightnumber, requiredEse mõõtmed, loetakse päringu ühikutes (vaikimisi mm, tollid kui "units": "imperial").
weightnumber, requiredEse kaal (vaikimisi kg, naelad kui "units": "imperial").
quantityinteger, default 1Laiendatakse üksikuteks ühikuteks.
namestring, optionalKuvatakse plaanis ja vastuses.
stackableboolean, default trueKas teised kaubad võivad selle eseme peale asetada.
max_stacknumber, optionalMaksimaalne kaal, mida ese peal talub (samas ühikus nagu kaal).
fragileboolean, default falseÕrnad esemed paigutatakse ainult ülemistele kihtidele.
tiltableboolean, default trueKas ese võib külili asetada.
destination_stopinteger, default 1Sihtpeatus mitmepeatuselise LIFO-laadimise jaoks.

Sõidukikoodid

Genereeritud reaalajas mootori spetsifikatsioonidest. Tööruumi pargi kohandatud sõidukid töötavad läbi custom_vehicle_id.

Veoautod ja haagised

KoodSõidukSisemõõdud (P×L×K)Kandevõime
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

Konteinerid

KoodKonteinerSisemõõdud (P×L×K)Kandevõime
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

Ligipääsutasemed ja piirangud

Liivakast (iga plaaniga)Tootmine (Enterprise)
Päringud25 edukat / kuu5 000 edukat pakkimist / kuu
Esemeid manifestis205,000
Üheaegsed tööd110
Optimeerimise ajapiirang10 s30 s vaikimisi, kuni 300 s
PüsivusMidagi ei salvestataIga pakkimine loob reaalse plaani sinu tööruumis

Arvesse lähevad ainult edukad pakkimised – valideerimise või töö nurjumisel kvooti ei arvestata. Mõlemad loendurid lähtestatakse 1. kuupäeval (UTC). Testkeskkonna tulemused on täielikud ja piiramatud – piirangud kehtivad sisendile, mitte väljundile. Vajad rohkem kui 5 000 pakkimist kuus? Võta meiega ühendust, et arutada mahulisi ja OEM-hinnapakkumisi.

Veebihaakujad

Saada callback_url, et saada tulemus POST-i teel, kui töö on lõpetatud. Iga veebihaak kannab endaga kaasas X-Hansatic-Signature: HMAC-SHA256 allkirja toorest kehaosast sinu võtme veebihaakude salajasega (kuvatakse üks kord võtme loomisel). Kontrolli seda:

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

Edastus tehakse ühe katsega 5s ajapiiranguga — status_url jääb alati tõe allikaks.

Vead

Kõik vead on { "error": { "code", "message", ... } } kujul — masinloetav kood, inimloetav sõnum ja field, kui konkreetne sisend on vigane.

KoodHTTPTähendus
invalid_key401Puuduv, vigane või tühistatud API võti.
invalid_json400Päringukeha pole kehtiv JSON.
invalid_vehicle400Tundmatu sõidukikood või {customVehicleId}.
invalid_items400Ühel eseme väljal puudub väärtus, see pole number või on väljaspool lubatud vahemikku.
suspicious_dimensions400Kõik mõõdud alla 100 mm — tõenäoliselt tollid saadetud millimeetritena. Kasuta "units": "imperial".
invalid_units400units peab olema "metric" või "imperial".
invalid_objective400objective peab olema "ldm" või "pallets".
invalid_callback400callback_url peab olema https.
too_many_items400Manifest ületab sinu ligipääsutaseme eseme limiidi.
upgrade_required402Tootmisrežiim nõuab Enterprise-plaani. Kasuta liivakasti või uuenda plaani.
sandbox_limit_reached402Kuuane liivakasti limiit on täis — limiit taastub 1. kuupäeval.
quota_exceeded402Kuuane tootmiskvoot (5 000 pakkimist) on täis – lähtestub 1. kuupäeval. Suurema mahu korral palun võta meiega ühendust.
too_many_jobs429Üheaegsete tööde limiit on täis. Küsi käimasolevate tööde olekut ja proovi uuesti.
not_found404Sellist tööd sellele tööruumile ei leitud.

Küsimusi, suuremaid limiite või vajalikku ühendajat (Zapier, Excel, MCP)? hello@hansatic.com