装箱 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

验证并排队装箱任务。返回 202job_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相同长度的线性英尺(美国零担运输)。
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 为距地面高度。当 placed 为 false 时,三者均为 null。
items[].rotation_deg / tilt_deg0 | 90方向:绕垂直轴旋转;tilt 表示平放。
items[].length / width / height / weightnumber提交的货物尺寸,以请求单位返回。
plan_urlstring | null应用程序中生成的计划链接。沙盒任务为 null。

版本控制与稳定性

接口版本通过路径 (/api/v1/) 进行管理。在 v1 版本内,仅允许添加性变更 — 新增可选请求字段、响应字段、车辆代码及错误代码,客户端应忽略不识别的字段。现有字段的含义和类型永不变更,且不会被移除。重大变更将通过新版本路径发布,v1 版本将至少维护 12 个月,并在停用前通过电子邮件通知所有拥有有效密钥的工作空间。

请求字段

字段类型说明
vehiclestring下方表格中的车辆代码,或传入 custom_vehicle_id(您工作空间车队中的车辆)。
objective"ldm" | "pallets"优化目标:最小化装载米或最小化计费托盘位置。默认为 "ldm"。
units"metric" | "imperial"货物尺寸和重量的单位,同时适用于请求和响应:mm/kg(默认)或 in/lb。响应中的位置信息使用相同单位。
itemsarray, required货物清单(详见下方字段)。
sandboxboolean测试模式:返回完整结果,不保存任何数据。每个套餐均可使用。
namestring计划名称(生产模式)。
ldm_limit_mnumber限制装载长度为前 N 个装载米(适用于卡车)。
budget_msnumber优化时间预算(生产环境;默认 30000,最大 300000)。
callback_urlhttps URL任务完成时通过 POST 发送结果,并附带签名(详见 Webhooks)。

货物字段

字段类型说明
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 秒
持久化不保存任何数据每次装箱任务均在您的工作空间中生成实际计划

仅成功打包计入配额——验证失败或作业失败不计费。两项计数器于每月 1 日(UTC)重置。沙盒环境结果完整且不受限制——限制仅作为门槛,而非输出限制。 每月需求超过 5,000 次打包?请联系我们了解批量及 OEM 定价。

Webhooks

传入 callback_url 以在任务完成时通过 POST 接收结果。每次回调均包含 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_key401缺少、格式错误或已撤销的 API 密钥。
invalid_json400请求体不是有效的 JSON。
invalid_vehicle400未知的车辆代码或 custom_vehicle_id。
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