Pakkaus-API

Lähetä lasti, saat takaisin optimoidun, fyysisesti pätevän lastaussuunnitelman — sijoitukset, kuormametrit, lineaarimetrit ja laskutettavat lava-asemat. Sama moottori kuin sovelluksessa, validoitu jatkuvasti tosielämän lähettäjien suunnitelmien perusteella. Sandbox-käyttö jokaisella suunnitelmalla; tuotantokäyttö Enterprise-suunnitelmalla.

Pika-aloitus

  1. Kirjaudu sisään → klikkaa nimeäsi → API → luo avain.
  2. Lähetä pakkauspyyntö (tämä suoritetaan sandbox-tilassa — ilmainen jokaisella suunnitelmalla):
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-..."
}

Tarkista status_url (sama autentikointiotsake) kunnes 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/..."
  }
}

Rajapintakutsut

POST /api/v1/pack

Validoi ja lisää pakkauspyyntö jonoon. Palauttaa 202 ja job_id. Tukee Idempotency-Key-otsaketta — saman avaimen uudelleenlähetykset palauttavat alkuperäisen pyynnön sen sijaan, että lastaus suoritettaisiin kahdesti.

GET /api/v1/jobs/{id}

Työn tila ja, kun valmis, koko tulos. Tulokset säilytetään 30 päivää; tuotantosuunnitelmien tulokset tallennetaan työtilaasi pysyvästi.

GET /api/v1/openapi.json

Koneellisesti luettava OpenAPI 3.1 -määrittely — tuo se Postmaniin, koodigeneraattoreihin tai ohjaa AI-koodityökalusi sen avulla. Ajoneuvokoodit haetaan reaaliaikaisesta moottorista, joten määrittely on aina ajantasainen. Avaa määrittely ↗

Vastauksen kentät

Valmiin työn result-objekti:

KenttäTyyppiKuvaus
placed_count / unplaced_countintegerKuinka monta tavaraa mahtui / ei mahtunut.
units"metric" | "imperial"Yksiköt, joissa kaikki alla olevat numerot ilmaistaan (toistaa pyynnön).
metrics.ldm_mnumberKuormametrit — lastin ulottuvuus (maksimi loppu − minimi alku).
metrics.linear_ftnumberSama ulottuvuus lineaarimetreinä (USA:n LTL).
metrics.span_mmintegerUlottuvuus millimetreinä, aina metrisenä.
metrics.pallet_positions_eurinteger | nullLaskutettavat EUR-lava-asemat. null, jos asettelu on liian suuri mitattavaksi.
metrics.total_weight_kgnumberSijoitettu paino, aina kilogrammoina.
metrics.overlapsintegerPäällekkäiset parit — aina 0 pätevässä asettelussa.
items[].placedbooleanMahtuiko tavara asetteluun.
items[].x / y / znumber | nullSijainti pyynnön yksiköissä: x ovesta päin, y vasemmasta seinästä, z lattiasta. Kaikki kolme ovat null, jos placed on false.
items[].rotation_deg / tilt_deg0 | 90Suunta: kierto pystyakselin ympäri; tilt = kyljelleen asetettu.
items[].length / width / height / weightnumberTavaran mitat pyynnössä, toistettu pyynnön yksiköissä.
plan_urlstring | nullLuotu suunnitelma sovelluksessa. null sandbox-tilan töissä.

Versiointi ja vakaus

Sopimus on versioitu polussa (/api/v1/). Versiossa v1 muutokset ovat vain lisäyksiä — uusia valinnaisia pyyntökenttiä, uusia vastauskenttiä, uusia ajoneuvokoodeja ja virhekoodeja voi ilmestyä, ja asiakkaiden tulee ohittaa kentät, joita ne eivät tunnista. Olemassa olevien kenttien merkitys tai tyyppi ei koskaan muutu, eikä mitään poisteta. Rikkova muutos tarkoittaa uutta versiopolkua, ja v1:tä ylläpidetään rinnakkain vähintään 12 kuukauden ajan, ja poistosta ilmoitetaan sähköpostitse jokaiselle työtilalle, jolla on aktiivinen avain.

Pyynnön kentät

KenttäTyyppiKuvaus
vehiclestringAjoneuvokoodi alla olevista taulukoista. Vaihtoehtoisesti voit käyttää {customVehicleId}-tunnusta (ajoneuvo työtilasi kalustosta).
objective"ldm" | "pallets"Minimoi kuormametrit tai laskutettavat lava-asemat. Oletusarvo "ldm".
units"metric" | "imperial"Miten tavaran mitat ja painot tulkitaan JA palautetaan: mm/kg (oletus) tai in/lb. Vastauksen sijainnit noudattavat samoja yksiköitä.
itemsarray, requiredLastiluettelo (alla olevat kentät).
sandboxbooleanTestitila: täysi tulos, mitään ei tallenneta. Saatavilla jokaisella suunnitelmalla.
namestringSuunnitelman nimi (tuotantotila).
ldm_limit_mnumberRajoita kuorma ensimmäisiin N kuormametriin (kuorma-autot).
budget_msnumberOptimoinnin aikaraja (tuotanto; oletus 30000, maksimi 300000).
callback_urlhttps URLPOSTataan tulos, kun työ on valmis, allekirjoitettuna (katso Webhookit).

Tavaran kentät

KenttäTyyppiKuvaus
length / width / heightnumber, requiredTavaran mitat, tulkitaan pyynnön yksiköissä (mm oletuksena, tuumissa, jos "units": "imperial").
weightnumber, requiredTavaran paino (kg oletuksena, pauna, jos "units": "imperial").
quantityinteger, default 1Laajenee yksittäisiksi kappaleiksi.
namestring, optionalNäkyy suunnitelmassa ja vastauksessa.
stackableboolean, default trueVoiko tämän tavaran päälle lastata muuta.
max_stacknumber, optionalMaksimipaino, jonka tavara kestää päällään (samat yksiköt kuin paino).
fragileboolean, default falseHaurastavara sijoitetaan vain ylimpiin kerroksiin.
tiltableboolean, default trueVoiko tavaran asettaa kyljelleen.
destination_stopinteger, default 1Toimitusasema moniasemakuormauksessa (LIFO).

Ajoneuvokoodit

Luotu reaaliaikaisen moottorin määrittelyistä. Työtilasi kaluston mukautetut ajoneuvot toimivat custom_vehicle_id-tunnuksen avulla.

Kuorma-autot ja perävaunut

KoodiAjoneuvoSisämitat (P×L×K)Kuormakapasiteetti
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

Kontit

KoodiKonttiSisämitat (P×L×K)Kuormakapasiteetti
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

Käyttöoikeustasot ja rajat

Sandbox (jokaisella suunnitelmalla)Tuotanto (Enterprise)
Kutsut25 onnistunutta / kuukausi5 000 onnistunutta kuormaa / kuukausi
Tavaroita luettelossa205,000
Samanaikaiset työt110
Optimoinnin aikaraja10 s30 s oletus, enintään 300 s
TallennusMitään ei tallennetaJokainen pakkaus luo oikean suunnitelman työtilaasi

Vain onnistuneet kuormat lasketaan — epäonnistuneet validoinnit ja työt eivät vaikuta kiintiöön. Molemmat laskurit nollaantuvat 1. päivänä (UTC). Sandbox-tulokset ovat täysin toimivia ja rajoittamattomia — rajat koskevat vain kutsukertoja, ei tuloksia. Tarvitsetko yli 5 000 kuormaa kuukaudessa? Kysy meiltä volyymi- ja OEM-hinnoista.

Webhookit

Anna callback_url saadaksesi tuloksen POSTina, kun työ on valmis. Jokainen kutsu sisältää X-Hansatic-Signature:n, joka on HMAC-SHA256 allekirjoitus raakaruumiista avaimesi webhook-salaisuudella (näytetään kerran avaimen luonnin yhteydessä). Vahvista se:

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

Toimitus on yksi yritys 5s aikakatkaisulla — status_url säilyy aina totuuden lähteenä.

Virheet

Kaikki virheet ovat { "error": { "code", "message", ... } }-muotoisia — koneellisesti luettava koodi, ihmisluettava viesti ja field, jos tietty syöttökenttä on virheellinen.

KoodiHTTPMerkitys
invalid_key401Puuttuva, virheellinen tai peruutettu API-avain.
invalid_json400Runko ei ole kelvollinen JSON.
invalid_vehicle400Tuntematon ajoneuvokoodi / {customVehicleId}.
invalid_items400Tavaran kenttä puuttuu, ei ole numeerinen tai on alueen ulkopuolella.
suspicious_dimensions400Kaikki mitat alle 100 mm — todennäköisesti tuumat lähetetty millimetreinä. Käytä "units": "imperial".
invalid_units400units-tunnuksen on oltava "metric" tai "imperial".
invalid_objective400objective-tunnuksen on oltava "ldm" tai "pallets".
invalid_callback400callback_url:n on oltava https.
too_many_items400Luettelo ylittää tavararajan käyttöoikeustasollesi.
upgrade_required402Tuotantotila vaatii Enterprise-suunnitelman. Käytä sandbox-tilaa tai päivitä.
sandbox_limit_reached402Kuukausittainen sandbox-käyttöraja täynnä — nollautuu 1. päivänä.
quota_exceeded402Kuukausittainen tuotantokiintiö (5 000 kuormaa) käytetty — nollaantuu 1. päivänä. Suuremmat volyymit: ota yhteyttä.
too_many_jobs429Samanaikaisten töiden raja saavutettu. Tarkista käynnissä olevat työt ja yritä uudelleen.
not_found404Tätä työtä ei ole tässä työtilassa.

Kysymyksiä, korkeammat rajat tai tarvitsemasi liitin (Zapier, Excel, MCP)? hello@hansatic.com