通用的 REST + JSON 接口:任何系统(领星、马帮、店小秘、易仓等 ERP / OMS,或你们自己的系统)都能直接调用。报价、出单、取面单、查状态、取消,价格和规则与客户中心完全一致,费用从同一个账户余额扣。
Base URL:https://atrship.com/api/v1
curl -X POST https://atrship.com/api/v1/rates \
-H "Authorization: Bearer atr_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"shipTo": { "name": "Jane Roe", "phone": "5125550100", "address1": "500 Congress Ave",
"city": "Austin", "state": "TX", "postalCode": "78701", "country": "US" },
"package": { "length": 10, "width": 8, "height": 4, "weight": 1.5, "unit": "in/lb" }
}'{
"success": true, "code": "OK", "message": "ok",
"data": [
{ "channel": "SB-1234", "name": "UniUni Express", "carrier": "uniuni", "available": true, "price": 3.82, "currency": "USD", "zone": "zone3" },
{ "channel": "SB-2345", "name": "USPS Ground Advantage", "carrier": "usps", "available": true, "price": 5.64, "currency": "USD", "zone": "zone3" }
]
}curl -X POST https://atrship.com/api/v1/orders \
-H "Authorization: Bearer atr_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"referenceNo": "SO-1001",
"channel": "SB-1234",
"shipTo": { "name": "Jane Roe", "phone": "5125550100", "address1": "500 Congress Ave",
"city": "Austin", "state": "TX", "postalCode": "78701", "country": "US" },
"package": { "length": 10, "width": 8, "height": 4, "weight": 1.5, "unit": "in/lb" },
"items": [ { "sku": "TS-BLK-M", "name": "Cotton T-shirt", "quantity": 1, "unitValue": 12 } ]
}'{
"success": true, "code": "OK", "message": "ok",
"data": {
"created": true,
"order": {
"orderNo": "ATR261001A1B2C3D4", "referenceNo": "SO-1001", "status": "labeled",
"channel": "SB-1234", "channelName": "UniUni Express", "carrier": "uniuni",
"trackingNo": "UUS0123456789", "trackingUrl": "https://…", "price": 3.82, "currency": "USD",
"labelReady": true, "labelUrl": "https://atrship.com/api/v1/orders/ATR261001A1B2C3D4/label", "test": true
}
}
}面单一般几秒内出好;如果返回的 status 是 processing、labelReady 是 false,过几秒再查 /orders/{no}。同一个 referenceNo 重复提交(例如网络超时重试)会直接返回已有的单(created: false),不会重复出单扣费。
# PDF curl -H "Authorization: Bearer atr_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -o label.pdf https://atrship.com/api/v1/orders/SO-1001/label # base64 (JSON) curl -H "Authorization: Bearer atr_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "https://atrship.com/api/v1/orders/SO-1001/label?format=base64"
Authorization: Bearer atr_live_… (也可以用 X-Api-Key: atr_live_…){ "success": false, "code": "INSUFFICIENT_BALANCE", "message": "余额不足:当前余额 1.20,本单需要 3.82,请先充值" }| GET | /channels | 账户可用的渠道(ERP“同步物流方式”用) |
| POST | /rates | 运费试算:所有渠道或指定 channel,价格从低到高 |
| POST | /orders | 出单,返回单号、运单号、面单地址 |
| GET | /orders/{no} | 查单(no 可以是 orderNo 或 referenceNo) |
| GET | /orders?referenceNo=… | 按你们的订单号查单 |
| GET | /orders/{no}/label | 下载面单 PDF;?format=base64 返回 JSON |
| POST | /orders/{no}/cancel | 取消(规则同客户中心) |
| GET | /balance | 账户余额 |
name(或 firstName + lastName)、phone、address1、address2、city、state(美国填州二字码)、postalCode、country(二字码,默认 US)、company、email。shipFrom 不传时用账户的默认寄件地址。
length、width、height、weight,unit 为 in/lb(默认)、cm/kg 或 cm/g;signature:none(默认)、direct、indirect、adult。
sku、name(英文品名)、quantity、unitValue(单件申报价值 USD)。国际件还要 hsCode、originCountry、material。美国件不传 items 时按一件普通货物处理;传了 SKU 会按账户设置加印在面单上。
referenceNo(必填,你们的订单号,最长 50 位)、channel(必填)、expectedPrice(可选:报价时的价格,价格变了会返回 PRICE_CHANGED)、remark、addressConfirmed(地址核对提示有问题时确认无误继续出单)。
processing | 已下单,面单生成中 |
labeled | 面单已出,可打印 |
cancelling | 取消处理中(服务商人工作废,完成后退款) |
cancelled | 已取消,费用已按规则退回 |
exception | 出单异常(error 字段有原因) |
| code | HTTP | 说明 |
|---|---|---|
UNAUTHORIZED | 401 | 缺少密钥,或密钥无效 / 已作废 |
API_DISABLED | 403 | 账户的 API 还没开通 |
IP_NOT_ALLOWED | 403 | 请求 IP 不在这个密钥的白名单里 |
RATE_LIMITED | 429 | 调用太频繁(每个密钥每分钟 60 次),看 Retry-After |
INVALID_JSON | 400 | 请求内容不是 JSON 对象 |
VALIDATION_ERROR | 400 | 字段缺失或格式不对,message 里列出全部问题 |
CHANNEL_UNAVAILABLE | 400 | 渠道没开通,或这个地址 / 包裹不能用该渠道 |
NO_CHANNEL | 400 | 没有可用渠道(例如国际件没开通国际渠道) |
TERMS_NOT_ACCEPTED | 403 | 还没在客户中心同意服务条款 |
ADDRESS_CHECK | 422 | 收件地址可能有问题;确认无误后加 addressConfirmed: true 重新提交 |
PRICE_CHANGED | 409 | 价格和 expectedPrice 不一致,details.price 是当前价格 |
INSUFFICIENT_BALANCE | 402 | 余额不足,请先充值 |
ORDER_FAILED | 400 | 下单失败(服务商拒单,或订单信息不符合要求,message 里有原因),没有扣费 |
NOT_FOUND | 404 | 订单不存在(测试密钥只能看到测试单) |
LABEL_NOT_READY | 404 | 面单还在生成,稍后再取 |
LABEL_VOID | 410 | 面单已取消作废 |
CANCEL_NOT_ALLOWED | 409 | 当前状态或超过取消时限,不能取消 |
PROVIDER_ERROR | 502 | 取消时服务商暂时无法处理,稍后重试或联系客服 |
INTERNAL | 500 | 服务器内部错误,稍后重试 |