Endpoint e autenticação
As requisições desta cadeia usam o mesmo endpoint. O que você passa nos cabeçalhos depende da sua configuração — escolha sua aba.
URL:
https://api.zonos.com/graphql
Cabeçalhos:
Você envia seus próprios pedidos sob sua Verified Account. Autentique-se como você — sem account key.
credentialToken: {{YOUR_API_TOKEN}}
Onde encontrar: Zonos Dashboard → Settings → Integrations → seção Account Key. Copie o token na linha API key; esse é seu credentialToken.
Exemplo de requisição
Uma requisição CreateDeclarationShipment completa para copiar e adaptar — a mutation, variáveis e resposta — para um pacote Japan Post enviado DDP aos EUA. Cada input é detalhado na seção passo a passo abaixo.
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 } } }}Passo a passo
A coluna Status em cada tabela abaixo usa estes termos:
- Required — a requisição falha sem ele.
- Required for label — opcional no schema GraphQL, mas necessário para produzir uma etiqueta Japan Post válida para os EUA.
- Conditional — obrigatório conforme outro campo (indicado inline).
- Recommended — opcional, mas determina impostos e tributos precisos.
- Optional — não necessário.
1. partyCreateWorkflow
Cria as partes envolvidas no envio — no mínimo um ORIGIN (de onde o envio parte) e um DESTINATION (comprador / destinatário).
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
type | Required | ORIGIN, DESTINATION, RETURN, etc. |
location.countryCode | Required | ISO-2 country code. |
location.line1, locality, administrativeAreaCode, postalCode | Required for label | Campos de endereço necessários para etiqueta válida. |
person.firstName, lastName, phone | Required for label | Dados de contato necessários para etiqueta válida. |
person.companyName, email | Optional |
Exemplo de payload:
[
{ "type": "DESTINATION", "location": { "countryCode": "US" }, "person": {} },
{ "type": "ORIGIN", "location": { "countryCode": "JP" }, "person": {} }
]
A resposta retorna os IDs Party criados e os campos de endereço resolvidos.
2. itemCreateWorkflow
Cria os itens de linha que compõem o envio. São os SKUs que aparecerão na fatura comercial e determinam o cálculo de landed cost.
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
currencyCode | Required | Moeda do preço unitário. |
quantity | Required | Número de unidades deste item. |
amount | Conditional | Preço unitário (não total). Obrigatório salvo se totalAmount for informado. |
totalAmount | Optional | Alternativa a amount; amount é derivado de totalAmount / quantity. |
hsCode | Recommended | Código tarifário Harmonized System. Determina tarifas de imposto. |
countryOfOrigin | Recommended | Código ISO-2 onde o item foi fabricado. Determina imposto / FTA. |
name, description | Recommended | Nome e descrição do produto para o cliente. |
customsDescription | Optional | Substituição da descrição aduaneira. |
sku, productId | Optional | Seus identificadores internos. |
measurements | Optional | Peso / dimensões por unidade. |
O código HS, país de origem e valor são os três campos que mais influenciam o resultado de imposto/tributo na etapa 5.
3. cartonsCreateWorkflow
Cria os pacotes físicos — caixas, sacos plásticos ou cartas que conterão os itens.
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
dimensionalUnit | Required | INCH or CENTIMETER. |
weight, weightUnit | Required for label | Japan Post exige peso do pacote. |
length, width, height | Optional | Dimensões externas. |
type | Optional | Estilo de embalagem (caixa, saco, carta). Padrão: PACKAGE. |
Cada carton vira um pacote na etiqueta da transportadora na etapa 6. Vários cartons → envio multipiece com um número de rastreamento por carton.
4. shipmentRatingCreateWorkflow
Registra a cotação de frete que o comerciante cobra do comprador.
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
amount | Required | O que o comprador paga pelo frete. Passe 0 se gratuito. |
currencyCode | Required | Moeda de amount. |
serviceLevelCode | Required | Código de serviço da transportadora (ex.: japan_post.air.parcel). |
displayName | Optional | Nome amigável para recibo / fatura. |
Esta é a tarifa cotada ao comprador no checkout. Alimenta o cálculo de landed cost como subtotal de "shipping" para que impostos e tributos sejam calculados sobre o valor CIF correto.
5. landedCostCalculateWorkflow
Executa o cálculo de impostos, tributos e taxas para o país de destino. Usa itens, partes e custo de frete das etapas anteriores.
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
endUse | Required | NOT_FOR_RESALE ou FOR_RESALE. Alguns destinos aplicam tarifas diferentes para uso comercial vs pessoal. |
tariffRate | Required | Padrão ZONOS_PREFERRED se omitido. Informa à Zonos qual fonte/metodologia tarifária aplicar. |
calculationMethod | Recommended | DDP (comprador pré-paga) ou DDU (comprador paga na entrega). Use DDP para pré-pago. Determina se LandedCost.amountSubtotals inclui imposto/tributo. |
currencyCode | Optional | Moeda em que os subtotais de landed cost são retornados. |
arrivalDate | Optional | Taxas FX e tarifários são fixados nesta data se informada. |
A resposta inclui amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — números exibidos ao comprador no checkout e impressos na fatura comercial.
6. shipmentCreateWorkflow
Etapa final — cria a entidade Shipment, gera a etiqueta da transportadora e (opcionalmente) fatura comercial / packing slip.
Para Japan Post Verified Accounts, é aqui que a Zonos chama a Japan Post Label API (código 52) em seu nome, injeta seus Later Pay Numbers, cria o Declaration ID e o vincula ao número de rastreamento retornado pelo Japan Post.
Campos principais:
| Campo↕ | Status↕ | Observações↕ |
|---|---|---|
serviceLevel | Required for label | Serviço Japan Post para envio (ex.: japan_post.air.ems_merchandise). Deve ser nível japan_post.*. |
generateLabel | Optional | Padrão true; deve ser true para retornar etiqueta. |
contentsType | Recommended | SALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Determina tratamento aduaneiro. |
nonDelivery | Optional | O que a transportadora faz se a entrega falhar: RETURN, ABANDON, FORWARD. |
references | Optional | Números de referência do comerciante impressos na etiqueta e fatura comercial. Veja abaixo. |
declaredValue / isDeclaredValue | Optional | Valor segurado do envio. |
shipmentConsolidationId | Optional | Usado quando este envio faz parte de um despacho em lote. |
Sub-input references
Estes campos são impressos na etiqueta da transportadora e/ou fatura comercial. Use-os para exibir números de PO, licenças e observações que o destinatário ou alfândega precisam ver.
| Campo↕ | Status↕ | Observações↕ | Tamanho↕ |
|---|---|---|---|
invoiceNumber | Optional | Número da fatura do comerciante. | — |
purchaseOrderNumber | Optional | Número de PO do comerciante. | — |
licenseNumber | Optional | Número de licença de exportação/importação. | — |
certificateNumber | Optional | Número de certificado aduaneiro. | — |
paymentConditions | Optional | Termos de pagamento em texto livre na fatura comercial. | Limite de 200 caracteres — valores maiores estouram na fatura impressa. |
customsRemarks | Optional | Observações aduaneiras em texto livre. | — |
taxCode | Optional | Código fiscal personalizado impresso na etiqueta. | — |
Resposta
Os campos relevantes no Shipment retornado são:
{
id
trackingDetails {
number
}
shipmentCartons {
label {
url
labelImage
}
}
}
trackingDetails.number é o número de rastreamento Japan Post.
O objeto label pode retornar a etiqueta de duas formas — solicite a que se adaptar ao seu fluxo (ou ambas):
| Campo↕ | Retorna↕ | Use quando↕ |
|---|---|---|
url | Link hospedado para o arquivo de etiqueta (PDF), pronto para download ou impressão. | Você quer repassar um link — abrir, enviar por e-mail ou buscar o arquivo depois sem mantê-lo no payload. |
labelImage | Imagem da etiqueta codificada em base64 (PNG/PDF/ZPL) inline na resposta. | Você quer os bytes da etiqueta diretamente na resposta para anexar ao fulfillment ou salvar no WMS. |
Selecione apenas os campos necessários. Solicitar url mantém a resposta pequena; solicitar labelImage retorna a etiqueta completa inline, sem segunda ida e volta. O exemplo acima solicita url.
Tratamento de erros
- Erros de validação (campos obrigatórios ausentes, códigos de país inválidos, etc.) retornam no array GraphQL
errorspadrão e abortam o restante da cadeia. - Erros Japan Post (falha na geração de etiqueta, endereço inválido, etc.) aparecem como erros GraphQL em
shipmentCreateWorkflow. Se precisar tentar novamente, contate o suporte — o caminho recomendado é reenviar a mutation completa com input corrigido.
Permissões
Cada etapa é protegida independentemente. Sua API key deve ter escopo de escrita para cada entidade da cadeia (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). A função padrão de comerciante em Verified Account concede todos.
Próximos passos
- Despacho em lote (consolidação) — agrupe os pacotes do dia em um dispatch slip Japan Post de pagamento diferido.
Criar um envio único
O fluxo GraphQL
CreateDeclarationShipmentleva um envio Japan Post de inputs brutos a uma etiqueta imprimível em uma única ida e volta.CreateDeclarationShipmentencadeia seis mutations*Workflowem uma única requisição GraphQL. Cada etapa usa os dados das anteriores, e todas são enviadas juntas para criar um envio completo em uma única ida e volta:As mutations
Workflowsão projetadas para ser encadeadas: você não precisa passar IDs de uma etapa para a próxima nem enviar uma requisição separada por etapa. Envie o documento inteiro e receba oShipmentfinal.Quando o
serviceLevelna etapa final é um nível de serviço Japan Post (japan_post.*), a Zonos chama a Japan Post Label API (código 52) em seu nome usando os Later Pay Numbers da sua Verified Account, gera a etiqueta e o número de rastreamento, cria o Declaration ID e os vincula — tudo na etapa finalshipmentCreateWorkflow.