Pak-API

Stuur vrag in, kry 'n geoptimaliseerde, fisies geldige laaiplan terug — plasings, laaimeters, lineêre voete en gefaktureerde palletposisies. Dieselfde enjin agter die app, deurlopend gevalideer teen werklike dispatseruitlegte. Sandbox-toegang op elke pakket; produksietoegang op Enterprise.

Vinnige begin

  1. Meld aan → klik op jou naam → API → genereer 'n sleutel.
  2. Stuur 'n pakopdrag in (hierdie een loop in sandbox — gratis op elke pakket):
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-..."
}

Vra die status_url op (dieselfde autentiseringskop) totdat status "done" is:

{
  "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/..."
  }
}

Eindpunte

POST /api/v1/pack

Valideer en plaas 'n pakopdrag in die waglys. Gee 202 terug met 'n job_id. Ondersteun 'n Idempotency-Key-kop — herhalings met dieselfde sleutel gee die oorspronklike opdrag terug in plaas daarvan om twee keer te pak.

GET /api/v1/jobs/{id}

Opdragstatus en, wanneer voltooi, die volledige resultaat. Resultate word vir 30 dae behou; produksieplanne bly permanent in jou werkruimte.

GET /api/v1/openapi.json

Die masjienleesbare OpenAPI 3.1-kontrak — voer dit in Postman, kodegenerators in, of wys jou KI-koderingstool daarna. Voertuigkodes word vanuit die lewende enjin ingevoeg, dus is dit altyd aktueel. Bekyk die spesifikasie ↗

Antwoordvelde

Die result-objek by 'n voltooide opdrag:

VeldTipeBeskrywing
placed_count / unplaced_countintegerHoeveel items pas / het nie gepas nie.
units"metric" | "imperial"Die eenhede waarin alle onderstaande getalle uitgedruk word (weerklank van die versoek).
metrics.ldm_mnumberLaaimeters — die vragblok se omvang (maks. einde − min. begin).
metrics.linear_ftnumberDieselfde omvang in lineêre voete (VS LTL).
metrics.span_mmintegerDie omvang in mm, altyd metries.
metrics.pallet_positions_eurinteger | nullGefaktureerde EUR-palletposisies. null as die uitleg te groot is om te meet.
metrics.total_weight_kgnumberGeplaasde gewig, altyd in kg.
metrics.overlapsintegerDeurdringende pare — altyd 0 vir 'n geldige uitleg.
items[].placedbooleanOf die item in die uitleg geplaas is.
items[].x / y / znumber | nullPosisie in versoekenhede: x vanaf die deurkant, y vanaf die linkermuur, z vanaf die vloer. Al drie is null as placed vals is.
items[].rotation_deg / tilt_deg0 | 90Oriëntasie: rotasie om die vertikale as; tilt = op sy kant gelê.
items[].length / width / height / weightnumberDie item soos ingedien, weergegee in versoekenhede.
plan_urlstring | nullDie aangemaakte plan in die app. null vir sandbox-opdragte.

Weergawes & stabiliteit

Die kontrak word in die pad (/api/v1/) geïwersioneer. Binne v1 is veranderinge slegs additief — nuwe opsionele versoekvelde, nuwe antwoordvelde, nuwe voertuigkodes en foutkodes mag verskyn, en kliënte moet velde ignoreer wat hulle nie herken nie. Bestaande velde verander nooit van betekenis of tipe nie, en niks word verwyder nie. 'n Onderbrekende verandering beteken 'n nuwe weergawepad, met v1 wat minstens 12 maande parallel onderhou word en 'n afkondigingskennisgewing per e-pos aan elke werkruimte met 'n aktiewe sleutel gestuur word.

Versoekvelde

VeldTipeBeskrywing
vehiclestring 'n Voertuigkode uit die onderstaande tabelle. Of gee custom_vehicle_id ( 'n voertuig uit jou werksruimtevloot) deur.
objective"ldm" | "pallets"Minimeer laaimeters, of minimeer gefaktureerde palletposisies. Verstek "ldm".
units"metric" | "imperial"Hoe itemafmetings en -gewigte gelees EN teruggestuur word: mm/kg (verstek) of duim/pond. Posisies in die antwoord volg dieselfde eenhede.
itemsarray, requiredDie vragmanifes (velde hieronder).
sandboxbooleanToetsmodus: volledige resultaat, niks word gestoor nie. Beskikbaar op elke pakket.
namestringPlannaam (produksiemodus).
ldm_limit_mnumberBeperk die vrag tot die eerste N laaimeters (vragmotors).
budget_msnumberOptimaliseringstydbegroting (produksie; verstek 30000, maks. 300000).
callback_urlhttps URLWord gepos na die resultaat wanneer die opdrag voltooi is, geteken (sien Webhooks).

Itemvelde

VeldTipeBeskrywing
length / width / heightnumber, requiredItemafmetings, gelees in die versoek se eenhede (mm by verstek, duim met "units": "imperial").
weightnumber, requiredItemgewig (kg by verstek, pond met "units": "imperial").
quantityinteger, default 1Word in individuele eenhede uitgebrei.
namestring, optionalWord in die plan en die antwoord vertoon.
stackableboolean, default trueMag ander vrag bo-op hierdie item geplaas word.
max_stacknumber, optionalMaksimum gewig wat hierdie item bo-op kan dra (dieselfde eenhede as gewig).
fragileboolean, default falseBreekbare items word slegs op boonste lae geplaas.
tiltableboolean, default trueMag die item op sy kant gelê word.
destination_stopinteger, default 1Afleweringsstop vir multi-stop LIFO-laai.

Voertuigkodes

Gegenereer vanuit die lewende enjinspesifikasies. Pasgemaakte voertuie uit jou werksruimtevloot werk via custom_vehicle_id.

Vragmotors & sleepwaens

KodeVoertuigBinne-afmetings (L×B×H)Laaivermoë
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

Houers

KodeHouerBinne-afmetings (L×B×H)Laaivermoë
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

Toegangsvlakke & perke

Sandbox (elke pakket)Produksie (Enterprise)
Oproepe25 suksesvol / maand5 000 suksesvolle pakkies / maand
Items per manifes205,000
Gelyktydige opdragte110
Optimaliseringsbegroting10 s30 s verstek, tot 300 s
BewaringNiks gestoorElke pakopdrag skep 'n werklike plan in jou werkruimte

Slegs suksesvolle pakkies tel — mislukte validasies en mislukte take word nooit teen 'n kwota aangerek nie. Albei tellers herstel op die 1ste (UTC). Sandbox-resultate is volledig en onbeperk — die limiete is die poort, nie die uitset nie. Behoefte aan meer as 5 000 pakkies per maand? Praat met ons oor volume- en OEM-pryse.

Webhooks

Gee callback_url deur om die resultaat via POST te ontvang wanneer die opdrag voltooi is. Elke terugroep bevat X-Hansatic-Signature: 'n HMAC-SHA256 van die rou lyf met jou sleutel se webhook-geheim (eenmalig by sleutel skepping vertoon). Verifieer dit:

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

Aflewering is een poging met 'n 5s-tydperk — die status_url bly altyd die bron van waarheid.

Foute

Alle foute is { "error": { "code", "message", ... } } — masjienleesbare kode, mensleesbare boodskap, en field wanneer 'n spesifieke invoer foutief is.

KodeHTTPBetekenis
invalid_key401Ontbrekende, misvormde of herroepte API-sleutel.
invalid_json400Liggaam is nie geldige JSON nie.
invalid_vehicle400Onbekende voertuigkode / custom_vehicle_id.
invalid_items400 'n Itemveld ontbreek, is nie-numeries, of buite bereik.
suspicious_dimensions400Alle afmetings onder 100 mm — waarskynlik duim as mm gestuur. Gee "units": "imperial" deur.
invalid_units400units moet "metric" of "imperial" wees.
invalid_objective400objective moet "ldm" of "pallets" wees.
invalid_callback400callback_url moet https wees.
too_many_items400Manifes oorskry die itemperk vir jou toegangsvlak.
upgrade_required402Produksiemodus vereis die Enterprise-pakket. Gebruik sandbox, of gradeer op.
sandbox_limit_reached402Maandelikse sandbox-toelae opgebruik — herstel op die 1ste.
quota_exceeded402Maandelikse produksiekwota van 5 000 pakkies gebruik — herstel op die 1ste. Groter volume: kontak ons.
too_many_jobs429Gelyktydige opdragperk bereik. Vra lopende opdragte op en probeer weer.
not_found404Geen sodanige opdrag vir hierdie werkruimte nie.

Vrae, hoër perke, of 'n aansluiting wat jy nodig het (Zapier, Excel, MCP)? hello@hansatic.com