DOCS

Criar um envio único

Criar um envio único

O fluxo GraphQL CreateDeclarationShipment leva um envio Japan Post de inputs brutos a uma etiqueta imprimível em uma única ida e volta.

CreateDeclarationShipment encadeia seis mutations *Workflow em 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:

partyCreateWorkflow            → descrever partes de origem e destino
itemCreateWorkflow             → descrever os itens de linha
cartonsCreateWorkflow          → descrever a embalagem física
shipmentRatingCreateWorkflow   → registrar a cotação de frete da transportadora
landedCostCalculateWorkflow    → calcular impostos / tributos / taxas
shipmentCreateWorkflow         → criar o envio + etiqueta

As mutations Workflow sã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 o Shipment final.

Quando o serviceLevel na 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 final shipmentCreateWorkflow.

Por que uma mutation? Cada etapa depende da anterior (landed cost precisa dos itens + partes; a etiqueta precisa de tudo). Agrupá-las em um único documento GraphQL mantém os dados consistentes e evita cinco idas e voltas extras.

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 → SettingsIntegrations → 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.

1mutation CreateDeclarationShipment(
2$partyInput: [PartyCreateWorkflowInput!]!
3$itemInput: [ItemCreateWorkflowInput!]!
4$cartonInput: [CartonCreateWorkflowInput!]!
5$shipmentRatingInput: ShipmentRatingCreateWorkflowInput!
6$landedCostInput: LandedCostWorkFlowInput!
7$shipmentInput: ShipmentCreateWorkflowInput!
8) {
9 partyCreateWorkflow(input: $partyInput) {
10 id
11 type
12 location {
13 line1
14 locality
15 postalCode
16 countryCode
17 }
18 }
19 itemCreateWorkflow(input: $itemInput) {
20 id
21 name
22 sku
23 amount
24 currencyCode
25 hsCode
26 }
27 cartonsCreateWorkflow(input: $cartonInput) {
28 id
29 length
30 width
31 height
32 dimensionalUnit
33 weight
34 weightUnit
35 }
36 shipmentRatingCreateWorkflow(input: $shipmentRatingInput) {
37 id
38 amount
39 }
40 landedCostCalculateWorkflow(input: $landedCostInput) {
41 id
42 method
43 currencyCode
44 amountSubtotals {
45 duties
46 taxes
47 fees
48 shipping
49 landedCostTotal
50 }
51 }
52 shipmentCreateWorkflow(input: $shipmentInput) {
53 id
54 trackingDetails {
55 number
56 }
57 shipmentCartons {
58 label {
59 url
60 }
61 }
62 }
63}

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).

CampoStatusObservações
typeRequiredORIGIN, DESTINATION, RETURN, etc.
location.countryCodeRequiredISO-2 country code.
location.line1, locality, administrativeAreaCode, postalCodeRequired for labelCampos de endereço necessários para etiqueta válida.
person.firstName, lastName, phoneRequired for labelDados de contato necessários para etiqueta válida.
person.companyName, emailOptional

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.

CampoStatusObservações
currencyCodeRequiredMoeda do preço unitário.
quantityRequiredNúmero de unidades deste item.
amountConditionalPreço unitário (não total). Obrigatório salvo se totalAmount for informado.
totalAmountOptionalAlternativa a amount; amount é derivado de totalAmount / quantity.
hsCodeRecommendedCódigo tarifário Harmonized System. Determina tarifas de imposto.
countryOfOriginRecommendedCódigo ISO-2 onde o item foi fabricado. Determina imposto / FTA.
name, descriptionRecommendedNome e descrição do produto para o cliente.
customsDescriptionOptionalSubstituição da descrição aduaneira.
sku, productIdOptionalSeus identificadores internos.
measurementsOptionalPeso / 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.

CampoStatusObservações
dimensionalUnitRequiredINCH or CENTIMETER.
weight, weightUnitRequired for labelJapan Post exige peso do pacote.
length, width, heightOptionalDimensões externas.
typeOptionalEstilo 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.

CampoStatusObservações
amountRequiredO que o comprador paga pelo frete. Passe 0 se gratuito.
currencyCodeRequiredMoeda de amount.
serviceLevelCodeRequiredCódigo de serviço da transportadora (ex.: japan_post.air.parcel).
displayNameOptionalNome 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.

CampoStatusObservações
endUseRequiredNOT_FOR_RESALE ou FOR_RESALE. Alguns destinos aplicam tarifas diferentes para uso comercial vs pessoal.
tariffRateRequiredPadrão ZONOS_PREFERRED se omitido. Informa à Zonos qual fonte/metodologia tarifária aplicar.
calculationMethodRecommendedDDP (comprador pré-paga) ou DDU (comprador paga na entrega). Use DDP para pré-pago. Determina se LandedCost.amountSubtotals inclui imposto/tributo.
currencyCodeOptionalMoeda em que os subtotais de landed cost são retornados.
arrivalDateOptionalTaxas 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:

CampoStatusObservações
serviceLevelRequired for labelServiço Japan Post para envio (ex.: japan_post.air.ems_merchandise). Deve ser nível japan_post.*.
generateLabelOptionalPadrão true; deve ser true para retornar etiqueta.
contentsTypeRecommendedSALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Determina tratamento aduaneiro.
nonDeliveryOptionalO que a transportadora faz se a entrega falhar: RETURN, ABANDON, FORWARD.
referencesOptionalNúmeros de referência do comerciante impressos na etiqueta e fatura comercial. Veja abaixo.
declaredValue / isDeclaredValueOptionalValor segurado do envio.
shipmentConsolidationIdOptionalUsado 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.

CampoStatusObservaçõesTamanho
invoiceNumberOptionalNúmero da fatura do comerciante.
purchaseOrderNumberOptionalNúmero de PO do comerciante.
licenseNumberOptionalNúmero de licença de exportação/importação.
certificateNumberOptionalNúmero de certificado aduaneiro.
paymentConditionsOptionalTermos de pagamento em texto livre na fatura comercial.Limite de 200 caracteres — valores maiores estouram na fatura impressa.
customsRemarksOptionalObservações aduaneiras em texto livre.
taxCodeOptionalCó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):

CampoRetornaUse quando
urlLink 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.
labelImageImagem 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 errors padrã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 

Esta página foi útil?