端点和认证
此链中的请求都使用相同的端点。你在头中传递的内容取决于你的设置 — 选择你的选项卡。
URL:
https://api.zonos.com/graphql
Headers:
你在自己的 Verified Account 下发送自己的订单。以自己的身份进行身份验证 — 不需要账户密钥。
credentialToken: {{YOUR_API_TOKEN}}
查找位置: Zonos Dashboard → Settings → Integrations → Account Key 部分。复制 API key 行上的令牌;这就是你的 credentialToken。
示例请求
一个完整的 CreateDeclarationShipment 请求,你可以复制和调整 — 变更、其变量和响应 — 用于发送给美国的单个日本邮政包裹 DDP。下面逐步部分中分解了每个输入。
mutation CreateDeclarationShipment($partyInput: [PartyCreateWorkflowInput!]!$itemInput: [ItemCreateWorkflowInput!]!$cartonInput: [CartonCreateWorkflowInput!]!$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!$landedCostInput: LandedCostWorkFlowInput!$shipmentInput: ShipmentCreateWorkflowInput!) { partyCreateWorkflow(input: $partyInput) { id type location { line1 locality postalCode countryCode } } itemCreateWorkflow(input: $itemInput) { id name sku amount currencyCode hsCode } cartonsCreateWorkflow(input: $cartonInput) { id length width height dimensionalUnit weight weightUnit } shipmentRatingCreateWorkflow(input: $shipmentRatingInput) { id amount } landedCostCalculateWorkflow(input: $landedCostInput) { id method currencyCode amountSubtotals { duties taxes fees shipping landedCostTotal } } shipmentCreateWorkflow(input: $shipmentInput) { id trackingDetails { number } shipmentCartons { label { url } } }}逐步说明
下面每个表格中的 Status 列使用这些术语:
- Required — 没有它请求会失败。
- Required for label — 在 GraphQL 架构中是可选的,但需要生成有效的日本邮政美国标签。
- Conditional — 根据另一个字段(注明内联)是否需要。
- Recommended — 可选,但提高关税和税金的准确性。
- Optional — 不需要。
1. partyCreateWorkflow
创建发货单中涉及的参与方 — 至少一个 ORIGIN(发货单发送的地方)和一个 DESTINATION(买家/收货人)。
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
type | Required | ORIGIN, DESTINATION, RETURN 等。 |
location.countryCode | Required | ISO-2 国家代码。 |
location.line1, locality, administrativeAreaCode, postalCode | Required for label | 生成有效标签所需的地址字段。 |
person.firstName, lastName, phone | Required for label | 生成有效标签所需的联系人详情。 |
person.companyName, email | Optional |
示例负载:
[
{ "type": "DESTINATION", "location": { "countryCode": "US" }, "person": {} },
{ "type": "ORIGIN", "location": { "countryCode": "JP" }, "person": {} }
]
响应返回创建的 Party ID 和解析的地址字段。
2. itemCreateWorkflow
创建组成发货单的产品行项目。这些是将出现在商业发票上并驱动落地成本计算的 SKU。
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
currencyCode | Required | 单价的货币。 |
quantity | Required | 此项目的单位数。 |
amount | Conditional | 单价(不是总价)。除非提供了 totalAmount,否则需要。 |
totalAmount | Optional | amount 的替代方案;amount 从 totalAmount / quantity 派生。 |
hsCode | Recommended | 协调制度关税代码。驱动关税率。 |
countryOfOrigin | Recommended | 制造产品的 ISO-2 代码。驱动关税/自由贸易协定。 |
name, description | Recommended | 面向客户的产品名称和描述。 |
customsDescription | Optional | 海关描述覆盖。 |
sku, productId | Optional | 你的内部标识符。 |
measurements | Optional | 每单位重量/尺寸。 |
HS 代码、原产国和金额是影响第 5 步关税/税金结果最多的三个字段。
3. cartonsCreateWorkflow
创建物理包装 — 将容纳产品的纸箱、聚袋或信件。
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
dimensionalUnit | Required | INCH 或 CENTIMETER。 |
weight, weightUnit | Required for label | 日本邮政需要包装重量。 |
length, width, height | Optional | 外部尺寸。 |
type | Optional | 包装风格(纸箱、聚袋、信件)。默认为 PACKAGE。 |
每个纸箱成为第 6 步中运单上的一个包裹。多个纸箱 → 多件发货单,每个纸箱有一个跟踪号。
4. shipmentRatingCreateWorkflow
记录商家向买家收取的运费报价。
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
amount | Required | 买家为运费支付的费用。免费时传递 0。 |
currencyCode | Required | amount 的货币。 |
serviceLevelCode | Required | 运承人服务代码(例如 japan_post.air.parcel)。 |
displayName | Optional | 收据/发票的漂亮名称。 |
这是买家在结账时报价的费率。它作为"运费"小计进入落地成本计算,以便针对正确的 CIF 值计算关税和税金。
5. landedCostCalculateWorkflow
运行目的地国家的关税、税金和费用计算。使用前面步骤中的产品、参与方和运费成本。
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
endUse | Required | NOT_FOR_RESALE 或 FOR_RESALE。某些目的地对商业与个人终端用途应用不同的费率。 |
tariffRate | Required | 如果省略,默认为 ZONOS_PREFERRED。告诉 Zonos 应用哪个关税来源/方法。 |
calculationMethod | Recommended | DDP(买家预付)或 DDU(买家在门口支付)。对预付使用 DDP。驱动 LandedCost.amountSubtotals 是否包括关税/税金。 |
currencyCode | Optional | 返回落地成本小计的货币。 |
arrivalDate | Optional | 如果提供,外汇汇率和关税表将固定在此日期。 |
响应包括 amountSubtotals(duties、taxes、fees、shipping、landedCostTotal) — 这些是你在结账时向买家显示的数字,并打印在商业发票上。
6. shipmentCreateWorkflow
最终步骤 — 创建**Shipment** 实体、生成运单标签和(可选)商业发票/装箱单。
对于日本邮政 Verified Account,这也是 Zonos 代表你调用日本邮政标签 API(代码 52)、注入你的 Later Pay Numbers、创建申报 ID 并将申报 ID 链接到日本邮政返回的跟踪号的地方。
关键字段:
| Field↕ | Status↕ | Notes↕ |
|---|---|---|
serviceLevel | Required for label | 要发货的日本邮政服务(例如 japan_post.air.ems_merchandise)。必须是 japan_post.* 服务等级。 |
generateLabel | Optional | 默认为 true;必须为 true 以返回标签。 |
contentsType | Recommended | SALE_OF_GOODS、GIFT、DOCUMENTS、SAMPLE 等。驱动海关处理。 |
nonDelivery | Optional | 如果交付失败,运承人应该做什么:RETURN、ABANDON、FORWARD。 |
references | Optional | 商家提供的参考号打印在标签和商业发票上。见下面。 |
declaredValue / isDeclaredValue | Optional | 发货单的保险价值。 |
shipmentConsolidationId | Optional | 当此发货单是批量调度的一部分时使用。 |
references 子输入
这些字段打印在运单标签和/或商业发票上。使用它们来显示收货人或海关部门需要看到的 PO 号、许可号和自由文本注释。
| Field↕ | Status↕ | Notes↕ | Length↕ |
|---|---|---|---|
invoiceNumber | Optional | 商家发票号。 | — |
purchaseOrderNumber | Optional | 商家 PO 号。 | — |
licenseNumber | Optional | 出口/进口许可号。 | — |
certificateNumber | Optional | 海关证书号。 | — |
paymentConditions | Optional | 商业发票上显示的自由文本付款条款。 | 限制 200 个字符 — 较长的值会在打印发票上溢出。 |
customsRemarks | Optional | 自由文本海关备注。 | — |
taxCode | Optional | 打印在标签上的自定义税法代码。 | — |
响应
返回的 Shipment 上有趣的字段是:
{
id
trackingDetails {
number
}
shipmentCartons {
label {
url
labelImage
}
}
}
trackingDetails.number 是日本邮政跟踪号。
label 对象可以通过两种方式返回标签 — 请求符合你的工作流的任何一个(或两个):
| Field↕ | Returns↕ | Use when↕ |
|---|---|---|
url | 指向渲染标签文件(PDF)的托管链接,可随时下载或打印。 | 你想交付一个链接 — 打开它、通过电子邮件发送或稍后在不将其保存在负载中的情况下获取文件。 |
labelImage | base64 编码的标签图像(PNG/PDF/ZPL)内联在响应中。 | 你想要响应中的标签字节来附加到履行工作流或保存到你的 WMS。 |
仅选择你需要的字段。请求 url 会保持响应较小;请求 labelImage 会返回完整的标签内联,所以你不需要第二次往返来获取它。上面的示例请求 url。
错误处理
- 验证错误(缺少必需字段、无效国家代码等)在标准 GraphQL
errors数组中返回并中止链的其余部分。 - 日本邮政错误(标签生成失败、地址无效等)在
shipmentCreateWorkflow上作为 GraphQL 错误出现。如果需要重试,请联系支持 — 推荐的路径是使用更正的输入重新提交完整的变更。
权限
每个步骤都独立保护。你的 API 密钥必须为链中的每个实体持有写入作用域(ITEM_WRITE、CARTON_WRITE、SHIPMENT_RATING_WRITE、LANDED_COST_WRITE、SHIPMENT_WRITE)。Verified Account 上的标准商家角色授予所有这些。
创建单个发货单
CreateDeclarationShipmentGraphQL 工作流在一次往返中将日本邮政发货单从原始输入转换为可打印的标签。CreateDeclarationShipment将六个*Workflow变更链接到一个 GraphQL 请求中。每个步骤都建立在前面步骤提供的数据之上,所有这些都一起提交,以便完整的发货单可以在一次往返中创建:Workflow变更被设计为链式的:你不需要从一个步骤将 ID 映射到下一个步骤,也不需要为每个步骤发送单独的请求。提交整个文档,获得最终的Shipment返回。当最后一个步骤的
serviceLevel是日本邮政服务等级(japan_post.*)时,Zonos 代表你使用你的 Verified Account 的 Later Pay Numbers 调用日本邮政标签 API(代码 52),生成标签和跟踪号,创建申报 ID,并在最后的shipmentCreateWorkflow步骤中链接它们。