ATRShip API

通用的 REST + JSON 接口:任何系统(领星、马帮、店小秘、易仓等 ERP / OMS,或你们自己的系统)都能直接调用。报价、出单、取面单、查状态、取消,价格和规则与客户中心完全一致,费用从同一个账户余额扣。

快速开始

  1. 登录客户中心 →「API 对接」,生成一个测试密钥(atr_test_…)。测试密钥出的都是模拟面单,不扣钱。
  2. 用测试密钥把报价、出单、取面单、取消都调通。
  3. 换成正式密钥(atr_live_…)就是真实出单,按报价从余额扣费。

Base URL:https://atrship.com/api/v1

1. 运费试算

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" }
  ]
}

2. 出单

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),不会重复出单扣费。

3. 下载面单

# 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_…)
  • 密钥只在生成时显示一次,我们只保存加密后的摘要;泄露了请马上在客户中心作废,再生成新的。
  • 可以给密钥设置 IP 白名单,只允许你们服务器的 IP 调用。
  • 频率限制:每个密钥每分钟 60 次,超过返回 429 和 Retry-After。
  • 只支持 HTTPS。所有返回都是 { success, code, message, data } 格式;失败时 success 为 false,code 见下面的错误码。
{ "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账户余额

字段说明

shipTo / shipFrom

name(或 firstName + lastName)、phone、address1、address2、city、state(美国填州二字码)、postalCode、country(二字码,默认 US)、company、email。shipFrom 不传时用账户的默认寄件地址。

package

length、width、height、weight,unit 为 in/lb(默认)、cm/kg 或 cm/g;signature:none(默认)、direct、indirect、adult。

items

sku、name(英文品名)、quantity、unitValue(单件申报价值 USD)。国际件还要 hsCode、originCountry、material。美国件不传 items 时按一件普通货物处理;传了 SKU 会按账户设置加印在面单上。

出单的其他字段

referenceNo(必填,你们的订单号,最长 50 位)、channel(必填)、expectedPrice(可选:报价时的价格,价格变了会返回 PRICE_CHANGED)、remark、addressConfirmed(地址核对提示有问题时确认无误继续出单)。

订单状态

processing已下单,面单生成中
labeled面单已出,可打印
cancelling取消处理中(服务商人工作废,完成后退款)
cancelled已取消,费用已按规则退回
exception出单异常(error 字段有原因)

错误码

codeHTTP说明
UNAUTHORIZED401缺少密钥,或密钥无效 / 已作废
API_DISABLED403账户的 API 还没开通
IP_NOT_ALLOWED403请求 IP 不在这个密钥的白名单里
RATE_LIMITED429调用太频繁(每个密钥每分钟 60 次),看 Retry-After
INVALID_JSON400请求内容不是 JSON 对象
VALIDATION_ERROR400字段缺失或格式不对,message 里列出全部问题
CHANNEL_UNAVAILABLE400渠道没开通,或这个地址 / 包裹不能用该渠道
NO_CHANNEL400没有可用渠道(例如国际件没开通国际渠道)
TERMS_NOT_ACCEPTED403还没在客户中心同意服务条款
ADDRESS_CHECK422收件地址可能有问题;确认无误后加 addressConfirmed: true 重新提交
PRICE_CHANGED409价格和 expectedPrice 不一致,details.price 是当前价格
INSUFFICIENT_BALANCE402余额不足,请先充值
ORDER_FAILED400下单失败(服务商拒单,或订单信息不符合要求,message 里有原因),没有扣费
NOT_FOUND404订单不存在(测试密钥只能看到测试单)
LABEL_NOT_READY404面单还在生成,稍后再取
LABEL_VOID410面单已取消作废
CANCEL_NOT_ALLOWED409当前状态或超过取消时限,不能取消
PROVIDER_ERROR502取消时服务商暂时无法处理,稍后重试或联系客服
INTERNAL500服务器内部错误,稍后重试

ERP 对接说明(领星等)

  • 物流商授权:在 ERP 里填我们的密钥(API Key / Token 一栏),接口地址填上面的 Base URL。
  • 同步物流方式:调用 /channels,channel 是渠道代码,name 是显示名称。
  • 下单获取面单:/orders 出单,referenceNo 填 ERP 的订单号或包裹号;面单用 /orders/{no}/label?format=base64。
  • 获取运单号:出单返回里就有 trackingNo;如果还是空的,过几秒调 /orders/{no}。
  • 取消 / 截单:/orders/{no}/cancel。
  • ERP 厂商需要对接资料或测试账号,请联系我们: info@innotronia.com