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
- Pieteikties → noklikšķiniet uz savas lietotājvārda → API → ģenerējiet atslēgu.
- 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:
| Lauks | Tips | Apraksts |
|---|---|---|
| placed_count / unplaced_count | integer | Cik vienību ietilpst / neietilpst. |
| units | "metric" | "imperial" | Mērvienības, kurās izteikti visi skaitļi zemāk (atkārto pieprasījumu). |
| metrics.ldm_m | number | Iekraušanas metri — kravas bloka izmērs (maksimālais beigu punkts − minimālais sākuma punkts). |
| metrics.linear_ft | number | Tas pats izmērs lineārajos pēdās (ASV LTL). |
| metrics.span_mm | integer | Izmērs milimetros, vienmēr metrisks. |
| metrics.pallet_positions_eur | integer | null | Norēķinātās EUR paletes pozīcijas. Null, ja izkārtojums ir pārāk liels mērīšanai. |
| metrics.total_weight_kg | number | Ieliktais svars, vienmēr kg. |
| metrics.overlaps | integer | Savstarpēji pārklājošies pāri — vienmēr 0 derīgam izkārtojumam. |
| items[].placed | boolean | Vai vienība iekļauta izkārtojumā. |
| items[].x / y / z | number | null | Pozī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_deg | 0 | 90 | Orientācija: pagrieziens ap vertikālo asi; tilt = novietots uz sāniem. |
| items[].length / width / height / weight | number | Vienība, kā iesniegta, atkārtota pieprasījuma mērvienībās. |
| plan_url | string | null | Izveidotais 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
| Lauks | Tips | Apraksts |
|---|---|---|
| vehicle | string | Transportlī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. |
| items | array, required | Kravas manifests (zemāk esošie lauki). |
| sandbox | boolean | Testa režīms: pilns rezultāts, nekas netiek saglabāts. Pieejams katrā plānā. |
| name | string | Plāna nosaukums (produkcijas režīmā). |
| ldm_limit_m | number | Ierobežot kravu līdz pirmajiem N iekraušanas metriem (kravas automašīnas). |
| budget_ms | number | Optimizācijas laika budžets (produkcijā; noklusējums 30000, maksimums 300000). |
| callback_url | https URL | Rezultāts tiks nosūtīts ar POST, kad uzdevums būs pabeigts, parakstīts (skat. Webhook). |
Vienību lauki
| Lauks | Tips | Apraksts |
|---|---|---|
| length / width / height | number, required | Vienības izmēri, uztverti pieprasījuma mērvienībās (noklusējums mm, collas, ja "units": "imperial"). |
| weight | number, required | Vienības svars (noklusējums kg, mārciņas, ja "units": "imperial"). |
| quantity | integer, default 1 | Pārvēršas atsevišķās vienībās. |
| name | string, optional | Parādīts plānā un atbildē. |
| stackable | boolean, default true | Uz šīs vienības var likt citu kravu. |
| max_stack | number, optional | Maksimālais svars, ko šī vienība var nest virsū (tās pašās mērvienībās kā svars). |
| fragile | boolean, default false | Trauslas vienības tiek novietotas tikai augšējos slāņos. |
| tiltable | boolean, default true | Vai vienību var novietot uz sāniem. |
| destination_stop | integer, default 1 | Piegā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
| Kods | Transportlīdzeklis | Iekšējie izmēri (G×P×A) | Kravnesība |
|---|---|---|---|
| CURTAINSIDER_136 | 13.6m Curtainsider | 13.62 × 2.48 × 2.70 m | 24 t |
| BOX_136 | 13.6m Box Trailer | 13.62 × 2.46 × 2.68 m | 24 t |
| MEGA_136 | 13.6m Mega Trailer | 13.62 × 2.48 × 3.00 m | 22.5 t |
| MEGA_CURTAIN_136 | 13.6m Mega Curtainsider | 13.62 × 2.48 × 3.00 m | 22 t |
| FLATBED_136 | 13.6m Flatbed | 13.62 × 2.48 × 3.00 m | 25 t |
| REEFER_136 | 13.6m Reefer | 13.32 × 2.44 × 2.54 m | 22 t |
| CURTAINSIDER_75 | 7.5m City Curtainsider | 7.50 × 2.48 × 2.70 m | 12 t |
| SWAPBODY_715 | 7.15m Swap Body | 7.15 × 2.48 × 2.70 m | 12 t |
| SWAPBODY_745 | 7.45m Swap Body | 7.45 × 2.48 × 2.70 m | 12 t |
| DRY_VAN_53 | 53ft Dry Van | 16.15 × 2.59 × 2.74 m | 20 t |
| FLATBED_53 | 53ft Flatbed | 16.15 × 2.59 × 3.66 m | 22 t |
| REEFER_53 | 53ft Reefer | 15.85 × 2.46 × 2.59 m | 18.5 t |
| CURTAINSIDER_125_CN | 12.5m Curtainsider (CN) | 12.50 × 2.50 × 2.80 m | 27 t |
| FLATBED_40_IN | 40ft Flatbed (IN) | 12.19 × 2.50 × 3.50 m | 26 t |
| BOX_138_BR | 13.8m Box Van (BR) | 13.80 × 2.50 × 2.90 m | 28 t |
| CURTAINSIDER_12_ZA | 12m Curtainsider (ZA) | 12.00 × 2.48 × 2.70 m | 28 t |
Konteineri
| Kods | Konteiners | Iekšējie izmēri (G×P×A) | Kravnesība |
|---|---|---|---|
| 20DC | 20' Dry Container | 5.89 × 2.35 × 2.39 m | 21.727 t |
| 20HC | 20' High Cube | 5.89 × 2.35 × 2.70 m | 21.58 t |
| 40DC | 40' Dry Container | 12.03 × 2.35 × 2.39 m | 26.63 t |
| 40HC | 40' High Cube | 12.03 × 2.35 × 2.70 m | 26.58 t |
| 45HC | 45' High Cube | 13.56 × 2.35 × 2.70 m | 25.68 t |
| 20OT | 20' Open Top | 5.89 × 2.35 × 2.39 m | 21.64 t |
| 40OT | 40' Open Top | 12.03 × 2.35 × 2.39 m | 26.58 t |
| 20RF | 20' Reefer | 5.44 × 2.29 × 2.27 m | 21 t |
| 40RF | 40' Reefer | 11.58 × 2.29 × 2.21 m | 25.6 t |
| 40RFHC | 40' Reefer High Cube | 11.58 × 2.29 × 2.54 m | 25.88 t |
| 53DC | 53' Domestic | 16.15 × 2.59 × 2.90 m | 26 t |
Piekļuves līmeņi un ierobežojumi
| Testa režīms (katrā plānā) | Produkcija (Enterprise) | |
|---|---|---|
| Izsaukumi | 25 veiksmīgi / mēnesī | 5000 veiksmīgi pakošanas plāni / mēnesī |
| Vienības manifestā | 20 | 5,000 |
| Vienlaicīgi uzdevumi | 1 | 10 |
| Optimizācijas budžets | 10 s | 30 s noklusējums, līdz 300 s |
| Saglabāšana | Nekas netiek saglabāts | Katrs 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.
| Kods | HTTP | Nozīme |
|---|---|---|
| invalid_key | 401 | Trūkst, nepareizi formatēta vai atsaukta API atslēga. |
| invalid_json | 400 | Ķermenis nav derīgs JSON. |
| invalid_vehicle | 400 | Nezināms transportlīdzekļa kods / {customVehicleId}. |
| invalid_items | 400 | Vienības laukam trūkst, tas nav skaitlisks vai ir ārpus robežām. |
| suspicious_dimensions | 400 | Visi izmēri zem 100 mm — iespējams, collas nosūtītas kā mm. Norādiet "units": "imperial". |
| invalid_units | 400 | units jābūt "metric" vai "imperial". |
| invalid_objective | 400 | objective jābūt "ldm" vai "pallets". |
| invalid_callback | 400 | callback_url jābūt https. |
| too_many_items | 400 | Manifests pārsniedz vienību ierobežojumu jūsu piekļuves līmenim. |
| upgrade_required | 402 | Produkcijas režīms pieprasa Enterprise plānu. Izmantojiet testa režīmu vai veiciet pāriešanu. |
| sandbox_limit_reached | 402 | Mēneša testa režīma limits iztērēts — atjaunojas 1. datumā. |
| quota_exceeded | 402 | Mēneša kvota (5000 pakošanas plāni) izlietota — atiestatās 1. datumā. Ja nepieciešams lielāks apjoms: sazinieties ar mums. |
| too_many_jobs | 429 | Sasniegts vienlaicīgo uzdevumu limits. Pārbaudiet esošos uzdevumus un mēģiniet vēlreiz. |
| not_found | 404 | Šāds uzdevums šai darba telpai neeksistē. |
Jautājumi, augstāki ierobežojumi vai nepieciešams savienojums (Zapier, Excel, MCP)? hello@hansatic.com