登录
开发者

Loader4D API

在您自己的 ERP、WMS 或运输管理系统内部调用装载优化。与浏览器中运行的相同摆放引擎,只需一个 HTTP 请求。

API 已上线

测试密钥每月可调用 25 次:真实引擎、真实方案,不消耗额度。先免费验证集成,正式上线时再选择方案。

您可以做什么

优化端点

以 JSON 发送您的装载空间和货物清单,取回带有每件货物坐标的摆放方案。轴荷和无法摆放的条目也在响应之中。

结果不会丢失

一次优化需要数秒。在同步设计中,连接中断会毁掉结果;在这里您可以凭作业编号回来取回,不必为同一次计算付两次钱。

可预测的账单

额度按区间计算,而非按件计算。引擎对小批量和大批量花费相同的搜索预算,因此按件计费会惩罚小额调用,并让您的账单无法预估。

开发时不消耗配额

测试密钥返回真实结果且不消耗额度,每月上限 25 次。可一直测试到集成完成;上线时只需更换密钥。

端点

身份验证使用携带您密钥的 bearer 请求头。密钥从不接受写在查询字符串中。

Authorization: Bearer l4d_live_...
调用 作用
POST /api/v1/pack 开启一个摆放作业;返回 202 和一个作业编号。
GET /api/v1/jobs/{id} 返回作业状态,完成后返回其结果。
GET /api/v1/usage 返回本周期配额和剩余额度。

请求示例

长度单位是厘米,重量单位是千克。没有按请求设置单位的选项;请在您这一侧完成换算。以英寸发送的请求会装载一辆长十倍的卡车。

POST /api/v1/pack
Authorization: Bearer l4d_test_...
Content-Type: application/json
Idempotency-Key: 7f3c1a9e4b6d4c2f

{
  "reference": "SO-2026-4417",
  "spaces": [
    { "id": "sp1", "name": "40HC", "type": "container",
      "length": 1200, "width": 235, "height": 269,
      "max_weight": 26000, "available": 2 }
  ],
  "items": [
    { "id": "A1", "name": "Karton", "length": 120, "width": 100, "height": 40,
      "weight": 8, "quantity": 24, "group": "Siparis-1",
      "constraints": { "no_tilt": true } },
    { "id": "B1", "name": "Varil", "shape": "cylinder",
      "diameter": 58, "length": 88, "weight": 190, "quantity": 12,
      "constraints": { "floor_only": true } }
  ],
  "strategy": { "group_items": true, "balance_load": true }
}

响应立即返回;您通过轮询作业编号获取结果。

HTTP/1.1 202 Accepted
Location: /api/v1/jobs/ba7189d3b1824da3806ca3ee973b2294

{ "id": "ba7189d3...", "status": "queued", "progress": 0,
  "reference": "SO-2026-4417", "credits": 1 }

作业完成后,每件货物都会带着坐标返回。原点是装载空间的前左下角,给出的值是货物的该角,而非其中心。

{ "id": "ba7189d3...", "status": "succeeded", "credits": 1,
  "result": {
    "summary": { "spaces_used": 1, "pieces_requested": 36,
                 "pieces_packed": 36, "weight": 2472,
                 "volume_utilization": 0.7431 },
    "spaces": [
      { "space_id": "sp1", "name": "40HC",
        "placements": [
          { "item_id": "A1", "sequence": 1,
            "x": 0, "y": 0, "z": 0,
            "length": 120, "width": 100, "height": 40, "weight": 8 }
        ],
        "axle_loads": [] }
    ],
    "unpacked": []
  } }

字段与约束的完整列表、错误码以及 OpenAPI 文档,请查看 API 参考

额度与限制

额度在作业被接受时扣除,而非完成时。否则同时到达的一百个调用会在任何一个被计数之前全部通过配额检查。

请求中的货物总件数 额度
1 – 1001
101 – 1 0005
1 001 – 10 00025
10 001 及以上100

这些限制的存在是为了让单次调用无法长时间占用服务。如果您的工作量需要更多,请拆分或与我们联系。

常见问题

可以用哪种语言集成?

任何能发出 HTTP 请求的语言。您还可以下载我们的 OpenAPI 3.0 文档,在大多数语言中生成带类型的客户端;这正是几小时完成集成与几天完成集成的差别。

下载 openapi/v1.json

如何计费?

API 属于付费方案;正式调用需要额度包,每期续订。未使用的额度不会结转。试用无需额度:测试密钥每月可调用 25 次。

退款政策

我的密钥如何受到保护?

密钥只在创建时显示一次;数据库中只保存加密摘要。密钥属于团队而非个人,因此即使搭建者离开团队,您的集成仍会继续运行。请为每个集成分配各自的密钥;这样在怀疑泄露时只需吊销那一个,其余照常运行。

隐私政策

如果我不小心把同一个请求发了两次怎么办?

请发送 Idempotency-Key 请求头,其值由您为每个逻辑请求生成。使用相同密钥和相同请求体的重试会返回原来的作业,而不会再开一个。相同密钥配不同请求体会被拒绝:悄悄返回之前的答案,会让您一直等待一份从未入队的工作。

中断的作业会从停下的地方继续吗?

不会,把这一点讲清楚才是对的。搜索是一次完整的计算,不保存中间状态;失败的作业会从头运行。作业编号带来的不是连续性,而是结果不会丢失。

我也能在界面中看到结果吗?

通过 API 开启的作业是独立的,不会加入您的项目列表;结果直接在响应中返回。API 调用消耗的是额度而不是席位,因此不会影响使用界面的团队成员的席位。