Ачааны API

Ачаагаа илгээж, оновчтой, бодит баталгаатай ачааны төлөвлөгөөг буцааж авна — байршил, ачааны метр, шугаман фут, тооцоологдсон паллетийн байрлал. Энэ нь аппликейшны ар талд ажилладаг ижил хөдөлгүүр бөгөөд бодит ачаа тээвэрлэгчдийн байрлалаар баталгааждаг. Туршилтын горим бүх төлөвлөгөөнд байгаа бөгөөд үйлдвэрлэлийн горим Enterprise төлөвлөгөөнд байдаг.

Хурдан эхлэлт

  1. Нэвтрэх → нэр дээрээ дарна уу → API → түлхүүр үүсгэнэ үү.
  2. Ачаа төлөвлөлтийн ажлыг илгээх (энэ нь туршилтын горимд ажиллана — бүх төлөвлөгөөнд үнэгүй):
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-..."
}

status_url-г шалгах (status "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/..."
  }
}

Эндпойнтууд

POST /api/v1/pack

Ачаа төлөвлөлтийн ажлыг баталгаажуулж, дараалалд оруулна. 202 кодтой job_id-г буцаана. Idempotency-Key толгой ашиглах боломжтой — ижил түлхүүртэй давтан дуудлага нь анхны ажлыг буцаана, хоёр дахь удаа ачаа төлөвлөхгүй.

GET /api/v1/jobs/{id}

Ажлын төлөв, дууссан үед бүрэн үр дүнг агуулна. Үр дүн 30 хоног хадгалагдана; үйлдвэрлэлийн төлөвлөгөөний үр дүн танд байнгын байршуулна.

GET /api/v1/openapi.json

Машины уншиж болох OpenAPI 3.1 гэрээ — Postman, код үүсгэгч эсвэл AI кодчиллын хэрэгсэлд импортлох боломжтой. Тээврийн хэрэгслийн код нь амьд хөдөлгүүрээс авсан тул үргэлж шинэчлэгдсэн байна. Тодорхойлолтыг нээх ↗

Хариуны талбарууд

Дууссан ажлын result объект:

ТалбарТөрөлТайлбар
placed_count / unplaced_countintegerОрсон / ороогүй барааны тоо.
units"metric" | "imperial"Доорх бүх тооны нэгж (хүсэлтээр илгээсэн нэгж).
metrics.ldm_mnumberАчааны метр — ачааны блокийн урт (хамгийн их төгсгөл − хамгийн бага эхлэл).
metrics.linear_ftnumberИжил урт шугаман футээр (АНУ-ын LTL).
metrics.span_mmintegerУрт мм-ээр, үргэлж метрийн нэгж.
metrics.pallet_positions_eurinteger | nullТооцоологдсон EUR паллетийн байрлал. Хэт том байрлал үед null байна.
metrics.total_weight_kgnumberОрсон жин, үргэлж кг.
metrics.overlapsintegerДавамгайлсан хослол — зөв байрлал үед үргэлж 0.
items[].placedbooleanБараа байрлалд орсон эсэх.
items[].x / y / znumber | nullХүсэлтийн нэгжээр байрлал: x — хаалгаас эхлэн, y — зүүн ханаас, z — шалнаас. Орсонгүй үед гурвуулаа null байна.
items[].rotation_deg / tilt_deg0 | 90Чиглэл: босоо тэнхлэгээр эргүүлэлт; tilt — хажуу тийш хэвтээсэн.
items[].length / width / height / weightnumberИлгээсэн барааны хэмжээ, хүсэлтийн нэгжээр давтагдсан.
plan_urlstring | nullАпп дээр үүсгэсэн төлөвлөгөө. Туршилтын ажлын үед null байна.

Верс ба тогтвортой байдал

Гэрээг зам дахь (/api/v1/) хувилбараар ялгадаг. v1 дотор өөрчлөлт нь нэмэлт байдалтай байна — шинэ сонгож болох хүсэлтийн талбар, шинэ хариуны талбар, шинэ тээврийн хэрэгслийн код, алдааны код гарч болох бөгөөд клиентүүд танихгүй талбарыг үл тоомсорлох ёстой. Оршин буй талбарууд утга, төрөлөө өөрчлөхгүй бөгөөд юу ч хасагдахгүй. Үндсэн өөрчлөлт нь шинэ хувилбарын замтай байх бөгөөд v1-ийг дор хаяж 12 сарын хугацаанд зэрэгцэн ажиллуулж, идэвхтэй түлхүүр бүхий бүх байршуулганд имэйлээр мэдэгдэл илгээдэг.

Хүсэлтийн талбарууд

ТалбарТөрөлТайлбар
vehiclestringДоорх хүснэгтээс тээврийн хэрэгслийн код. Эсвэл {customVehicleId} (таны байршуулгын тээврийн хэрэгсэл) илгээнэ үү.
objective"ldm" | "pallets"Ачааны метрийг багасгах эсвэл тооцоологдсон паллетийн байрлалыг багасгах. Анхдагч утга нь "ldm".
units"metric" | "imperial"Барааны хэмжээ, жинг хүсэлт болон хариултад хэрхэн унших вэ: мм/кг (анхдагч) эсвэл инч/фунт. Хариултын байрлал нь ижил нэгжээр илэрхийлэгдэнэ.
itemsarray, requiredАчааны жагсаалт (доорх талбарууд).
sandboxbooleanТуршилтын горим: бүрэн үр дүн, юу ч хадгалагдахгүй. Бүх төлөвлөгөөнд байдаг.
namestringТөлөвлөгөөний нэр (үйлдвэрлэлийн горим).
ldm_limit_mnumberАчааг эхний N ачааны метр хүртэл хязгаарлах (ачааны машин).
budget_msnumberОновчлолтын хугацааны хязгаар (үйлдвэрлэлийн горим; анхдагч утга 30000, дээд хязгаар 300000).
callback_urlhttps URLАжил дууссаны дараа үр дүнг {callbackUrl}-руу POST илгээх, гарын үсэгтэй (Webhook үзнэ үү).

Барааны талбарууд

ТалбарТөрөлТайлбар
length / width / heightnumber, requiredБарааны хэмжээ, хүсэлтийн нэгжээр уншина (анхдагч мм, "units": "imperial" үед инч).
weightnumber, requiredБарааны жин (анхдагч кг, "units": "imperial" үед фунт).
quantityinteger, default 1Тус тусад нь нэгжүүдэд задлах.
namestring, optionalТөлөвлөгөө, хариултад харуулагдана.
stackableboolean, default trueЭнэ барааны дээр бусад ачаа байрлах боломжтой.
max_stacknumber, optionalЭнэ барааны дээр байрлах хамгийн их жин (жинтэй ижил нэгж).
fragileboolean, default falseХэврэг барааг зөвхөн дээд давхарт байрлуулна.
tiltableboolean, default trueБарааг хажуу тийш хэвтээж болох эсэх.
destination_stopinteger, default 1Олон зогсоолын LIFO ачааллын зогсоол.

Тээврийн хэрэгслийн код

Амьд хөдөлгүүрийн тодорхойлолтоос үүсгэсэн. Таны байршуулгын тээврийн хэрэгслийг custom_vehicle_id-ээр ашиглана.

Ачааны машин, чиргүүл

КодТээврийн хэрэгсэлДотор тал (У×Ө×Өндөр)Ачааны чадвар
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

Контейнерүүд

КодКонтейнерДотор тал (У×Ө×Өндөр)Ачааны чадвар
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

Хандалтын түвшин ба хязгаарлалт

Туршилтын горим (бүх төлөвлөгөө)Үйлдвэрлэлийн горим (Enterprise)
ДуудлагаСар бүр 25 амжилттайСар бүр 5,000 амжилттай багц
Жагсаалт дахь барааны тоо205,000
Зэрэг ажиллах ажлын тоо110
Оновчлолтын хугацааны хязгаар10 сАнхдагч 30 с, дээд хязгаар 300 с
ХадгалалтЮу ч хадгалагдахгүйАчаа төлөвлөх үед танд бодит төлөвлөгөө үүснэ

Зөвхөн амжилттай багц тоологдоно — баталгаажуулалт болон ажлын алдаа нь хязгаарыг тооцохгүй. Хоёр тоолуур нь UTC-ээр сарын 1-нд шинэчлэгдэнэ. Тест орчинд үр дүн бүрэн, хязгаарлалтгүй байх бөгөөд хязгаар нь зөвхөн хэрэглээний түвшин, гаралтын чанарт нөлөөлөхгүй. Сар бүр 5,000-гаас илүү багц хэрэгтэй юу? Том хэмжээ болон OEM үнийн санал авахын тулд бидэнтэй холбогдоно уу.

Webhook-ууд

Ажил дууссаны дараа үр дүнг POST-оор хүлээн авахын тулд callback_url илгээнэ үү. Бүх callback-д X-Hansatic-Signature байна: таны түлхүүрийн webhook нууц үгийн (түлхүүр үүсгэх үед ганц удаа харуулсан) HMAC-SHA256-ээр гарын үсэгжүүлсэн түүхий биеийн утга. Үүнийг баталгаажуулна уу:

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

Илгээлт нь 5с хугацаатай нэг удаагийн оролдлого байна — status_url үргэлж үнэн эх сурвалж хэвээр байна.

Алдаанууд

Бүх алдаа { "error": { "code", "message", ... } } хэлбэртэй байна — машин уншиж болох код, хүний хэлээр бичигдсэн мессеж, алдаатай оролтын талбарыг заасан field.

КодHTTPУтга
invalid_key401API түлхүүр байхгүй, буруу хэлбэртэй эсвэл хүчингүй болсон.
invalid_json400Бие нь хүчинтэй JSON биш байна.
invalid_vehicle400Танихгүй тээврийн хэрэгслийн код / {customVehicleId}.
invalid_items400Барааны талбар байхгүй, тоон бус эсвэл хүрээний гадна байна.
suspicious_dimensions400Бүх хэмжээ 100мм-ээс бага байна — магадгүй инчийг мм гэж илгээсэн байна. "units": "imperial" илгээнэ үү.
invalid_units400units нь "metric" эсвэл "imperial" байх ёстой.
invalid_objective400objective нь "ldm" эсвэл "pallets" байх ёстой.
invalid_callback400callback_url нь https байх ёстой.
too_many_items400Жагсаалт тань хандалтын түвшний барааны тооны хязгаарыг хэтрүүллээ.
upgrade_required402Үйлдвэрлэлийн горимд Enterprise төлөвлөгөө шаардлагатай. Туршилтын горим эсвэл төлөвлөгөөнд дэвших шаардлагатай.
sandbox_limit_reached402Сарын туршилтын хязгаар дууссан — дараагийн сарын 1-нд шинэчлэгдэнэ.
quota_exceeded402Сарын 5,000 багцын хязгаар дууссан — сарын 1-нд шинэчлэгдэнэ. Илүү их хэмжээний хэрэглээний тухай бидэнтэй холбогдоно уу.
too_many_jobs429Зэрэг ажиллах ажлын хязгаар хүрсэн. Ажиллаж буй ажлуудыг шалгаад дахин оролдоно уу.
not_found404Энэ байршуулганд ийм ажил байхгүй.

Асуулт, илүү өндөр хязгаар эсвэл танд хэрэгтэй холболт (Zapier, Excel, MCP) байна уу? hello@hansatic.com