DOCS

Opret en enkelt forsendelse

CreateDeclarationShipment GraphQL-workflowet tager en Japan Post-forsendelse fra rå input til en printbar label i ét round-trip.

CreateDeclarationShipment kæder seks *Workflow-mutationer sammen i én enkelt GraphQL-anmodning. Hvert trin bygger på data fra de foregående trin, og de sendes alle sammen, så en komplet forsendelse kan oprettes i ét round-trip:

partyCreateWorkflow            → describe origin + destination parties
itemCreateWorkflow             → describe the line items
cartonsCreateWorkflow          → describe the physical packaging
shipmentRatingCreateWorkflow   → record the carrier rate quote
landedCostCalculateWorkflow    → calculate duties / taxes / fees
shipmentCreateWorkflow         → create the shipment + label

Workflow-mutationerne er designet til at blive kædet: du behøver ikke at sende ID'er fra ét trin til det næste, og du behøver ikke sende en separat anmodning pr. trin. Send hele dokumentet, få den endelige Shipment tilbage.

Når serviceLevel i det sidste trin er et Japan Post-serviceniveau (japan_post.*), kalder Zonos Japan Post Label API (kode 52) på dine vegne med din Verified Accounts Later Pay Numbers, genererer label og trackingnummer, opretter Declaration ID og kæder dem sammen — alt sammen i det sidste shipmentCreateWorkflow-trin.

Hvorfor én mutation? Hvert trin afhænger af det foregående (landed cost kræver varer + parter; labelen kræver alt). At samle dem i ét GraphQL-dokument holder data konsistente og undgår fem ekstra round-trips.

Sender du til EU?

Workflowet er det samme for understøttede EU-destinationer. Se Send til EU for de IOSS- og momsfelter, der skal angives på landedCostCalculateWorkflow.

Endpoint og godkendelse 

Anmodningerne i denne kæde bruger alle samme endpoint. Hvad du sender i headers, afhænger af din opsætning — vælg din fane.

URL:

https://api.zonos.com/graphql

Headers:

Du sender dine egne ordrer under din egen Verified Account. Godkend som dig selv — ingen account key nødvendig.

credentialToken: {{YOUR_API_TOKEN}}

Hvor du finder den: Zonos Dashboard → Settings → Integrations → sektionen Account Key. Kopiér tokenet på rækken API key; det er din credentialToken.

Eksempelanmodning 

En komplet CreateDeclarationShipment-anmodning, du kan kopiere og tilpasse — mutationen, dens variabler og svaret — for én Japan Post-pakke sendt DDP til USA. Hvert input er beskrevet trin for trin nedenfor.

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}

Trin for trin 

Status-kolonnen i hver tabel nedenfor bruger disse termer:

  • Påkrævet — anmodningen fejler uden det.
  • Påkrævet for label — valgfrit i GraphQL-skemaet, men nødvendigt for en gyldig Japan Post-label til USA.
  • Betinget — påkrævet afhængigt af et andet felt (noteret inline).
  • Anbefalet — valgfrit, men driver præcis told og skat.
  • Valgfri — ikke nødvendigt.

1. partyCreateWorkflow

Opretter parterne i forsendelsen — mindst en ORIGIN (hvor forsendelsen sendes fra) og en DESTINATION (køber / modtager).

Felt↕Status↕Bemærkninger↕
typePåkrævetORIGIN og DESTINATION er de to, dette workflow har brug for. Andre (CONSIGNEE, EXPORTER, IMPORTER_OF_RECORD, PAYOR osv.) findes, men bruges ikke her.
location.countryCodePåkrævetISO-2-landekode.
location.line1, locality, administrativeAreaCode, postalCodePåkrævet for labelAdressefelter nødvendige for en gyldig label.
person.firstName, lastName, phonePåkrævet for labelKontaktoplysninger nødvendige for en gyldig label.
person.companyName, emailValgfri

Eksempel-payload:

[
  { "type": "DESTINATION", "location": { "countryCode": "US" }, "person": {} },
  { "type": "ORIGIN", "location": { "countryCode": "JP" }, "person": {} }
]

Svaret returnerer de oprettede Party-ID'er og de opløste adressefelter.

2. itemCreateWorkflow

Opretter linjeposterne, der udgør forsendelsen. Dette er SKU'erne, der vises på handelsfakturaen og driver landed-cost-beregningen.

Felt↕Status↕Bemærkninger↕
currencyCodePåkrævetValuta for enhedsprisen.
quantityPåkrævetAntal enheder af denne vare.
amountBetingetEnhedspris (ikke total). Påkrævet medmindre totalAmount er angivet.
totalAmountValgfriAlternativ til amount; amount afledes fra totalAmount / quantity.
hsCodeAnbefaletHarmonized System-toldkode. Driver toldsatser.
countryOfOriginAnbefaletISO-2-kode for hvor varen er fremstillet. Driver told / FTA.
name, descriptionAnbefaletKundevendt produktnavn + beskrivelse.
customsDescriptionValgfriTilsidesættelse af toldbeskrivelse.
skuBetingetPåkrævet på forsendelser til USA fra den 22. oktober 2026, medmindre du bruger en kanalintegration. Skal matche SKU'en i dit Zonos-katalog. Se nedenfor.
productIdValgfriDit interne produkt-ID.
measurementsValgfriVægt / dimensioner pr. enhed.

HS-kode, oprindelsesland og beløb er de tre felter, der mest påvirker told/skat-resultatet i trin 5.

Fra den 22. oktober 2026: sådan matcher Zonos dine varer

Fra den 22. oktober 2026 indgiver Zonos hver amerikansk postforsendelse som en toldangivelse ved hjælp af hver vares katalogpost (HS-kode, oprindelsesland og PGA-oplysninger). Zonos finder den post på en af to måder:

  • Med en kanalintegration, der synkroniserer ordrer og katalogvarer: tilføj Japan Post-sporingsnummeret til ordren i din kanal. Zonos synkroniserer det tilbage og bruger ordrens katalogvarer. Det anbefales at angive sku, men det er ikke påkrævet. Det fungerer som backup, hvis sporingsnummeret mangler på ordren eller endnu ikke er synkroniseret (ordrer synkroniseres hver time).
  • Uden en kanalintegration (katalog importeret via CSV eller Catalog API): angiv sku på hver vare. Den skal matche varens SKU i dit Zonos-katalog nøjagtigt. Uden den kan Zonos ikke matche varen med dens PGA-data.

Sender du til EU? Du skal også bruge EU-produktidentifikatorer.

3. cartonsCreateWorkflow

Opretter de fysiske pakker — kasser, polyposer eller breve, der indeholder varerne.

Felt↕Status↕Bemærkninger↕
dimensionalUnitPåkrævetINCH eller CENTIMETER.
weight, weightUnitPåkrævet for labelJapan Post kræver pakkevægt.
length, width, heightValgfriYdre dimensioner.
typeValgfriEmballagestil (kasse, polypose, brev). Standard er PACKAGE.

Hver karton bliver én pakke på carrier-labelen i trin 6. Flere kartoner → flerstyksforsendelse med ét trackingnummer pr. karton.

4. shipmentRatingCreateWorkflow

Registrerer pristilbuddet, forhandleren opkræver køberen for forsendelse.

Felt↕Status↕Bemærkninger↕
amountPåkrævetHvad køberen betaler for forsendelse. Send 0 hvis gratis.
currencyCodePåkrævetValuta for amount.
serviceLevelCodePåkrævetCarrier-servicekode (f.eks. japan_post.air.parcel). Se Japan Post-serviceniveauer for den fulde liste.
displayNameValgfriVisningsnavn til kvittering / faktura.

Dette er den pris, køberen fik ved checkout. Den indgår i landed-cost-beregningen som „shipping"-subtotal, så told og skat beregnes mod den korrekte CIF-værdi.

5. landedCostCalculateWorkflow

Kører beregning af told, skat og gebyrer for destinationslandet. Bruger varer, parter og forsendelsesomkostninger fra de foregående trin.

Felt↕Status↕Bemærkninger↕
endUsePåkrævetNOT_FOR_RESALE eller FOR_RESALE. Nogle destinationer anvender forskellige satser for kommerciel vs. privat slutanvendelse.
tariffRatePåkrævetStandard er ZONOS_PREFERRED, hvis udeladt. Fortæller Zonos, hvilken toldkilde/metodologi der skal anvendes.
calculationMethodAnbefaletDDP (køber forudbetaler) eller DDU (køber betaler ved døren). Brug DDP til forudbetaling. Styrer om LandedCost.amountSubtotals inkluderer told/skat.
currencyCodeValgfriValuta, subtotaler for landed cost returneres i.
arrivalDateValgfriValutakurser og toldplaner fastlåses til denne dato, hvis angivet.

Svaret inkluderer amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — disse er tallene, du viser køberen ved checkout og som printes på handelsfakturaen.

6. shipmentCreateWorkflow

Det afsluttende trin — opretter Shipment-entiteten, genererer carrier-labelen og (valgfrit) handelsfaktura / pakkeliste.

For Japan Post Verified Accounts er det også her, Zonos kalder Japan Post Label API (kode 52) på dine vegne, indsætter dine Later Pay Numbers, opretter Declaration ID og kæder Declaration ID til trackingnummeret returneret af Japan Post.

Vigtige felter:

Felt↕Status↕Bemærkninger↕
serviceLevelPåkrævet for labelJapan Post-servicen, der skal sendes med (f.eks. japan_post.air.ems_merchandise). Skal være et japan_post.*-serviceniveau.
generateLabelValgfriStandard er true; skal være true for at returnere en label.
contentsTypeAnbefaletStyrer toldbehandling. Én af SALE_OF_GOODS, ECOMMERCE_GOODS, COMMERCIAL_GOODS, COMMERCIAL_SAMPLE, RETURNED_GOODS, GIFT, DOCUMENTS, OTHER.
nonDeliveryValgfriHvad Japan Post skal gøre, hvis pakken ikke kan leveres. Se nedenfor.
referencesValgfriForhandlerleverede referencenumre printet på label og handelsfaktura. Se nedenfor.
declaredValue / isDeclaredValueValgfriForsikringsværdi for forsendelsen.
shipmentConsolidationIdValgfriBruges når denne forsendelse er del af en batch-afsendelse.

Om contentsType: de to mest almindelige værdier for Verified Account-trafik er ECOMMERCE_GOODS (solgt til en forbruger, BtoC) og COMMERCIAL_GOODS (solgt mellem virksomheder, BtoB). Disse sætter den pkgType, Zonos sender i Japan Post-labelkaldet, så valget ændrer, hvad der printes på tolddeklarationen — det er ikke kun en label.

nonDelivery sub-input

Fortæller Japan Post, hvad der skal ske med pakken, hvis den ikke kan leveres — afvist af modtageren, afvist ved grænsen eller ikke leverbar som adresseret.

option accepterer præcis disse fire værdier. Der findes ingen RETURN-værdi — brug RETURN_AFTER_RETENTION eller RETURN_IMMEDIATELY til at vælge, hvornår pakken kommer tilbage.

option↕Dashboard-ækvivalent↕Hvad Japan Post gør↕
RETURN_AFTER_RETENTIONReturnHolder pakken hos destinationspostkontoret i dets tilbageholdelsesperiode og returnerer den derefter til afsenderen.
RETURN_IMMEDIATELYReturnReturnerer pakken til afsenderen med det samme, uden tilbageholdelsesperiode.
FORWARDRedirectionOmdirigerer pakken til en anden adresse. Ekstra porto gælder.
ABANDONRenounceBortskaffer pakken på destinationen. Intet returneres, og der opkræves ingen returporto.

API'et eksponerer begge return-varianter separat; Dashboardets Return-mulighed dækker begge.

transportMethod accepterer AIR eller MOST_ECONOMICAL og angiver, hvordan en returneret pakke transporteres tilbage. Det gælder kun for de to RETURN_*-muligheder — Dashboardet viser kun det tilsvarende felt Return method, når Return er valgt.

{
  "nonDelivery": {
    "option": "RETURN_AFTER_RETENTION",
    "transportMethod": "MOST_ECONOMICAL"
  }
}

Vælgeren If undeliverable i Dashboardets dialog Create label skriver til det samme felt, så en label oprettet i Dashboardet og en label oprettet via API'et opfører sig identisk.

references sub-input

Disse felter printes på carrier-labelen og/eller handelsfakturaen. Brug dem til PO-numre, licensnumre og fritekstbemærkninger, modtageren eller toldmyndigheden skal se.

Felt↕Status↕Bemærkninger↕Længde↕
invoiceNumberValgfriForhandlerfakturanummer.—
purchaseOrderNumberValgfriForhandler-PO-nummer.—
licenseNumberValgfriEksport/import-licensnummer.—
certificateNumberValgfriToldcertifikatnummer.—
paymentConditionsValgfriFritekst betalingsbetingelser vist på handelsfakturaen.Begræns til 200 tegn — længere værdier løber over på den printede faktura.
customsRemarksValgfriFritekst toldbemærkninger.—
taxCodeValgfriBrugerdefineret skattekode printet på labelen. For EU-forsendelser med dit eget IOSS-nummer skal du angive dit IOSS-nummer her. Se Send til EU.—

Svar

De interessante felter på den returnerede Shipment er:

{
  id
  trackingDetails {
    number
  }
  shipmentCartons {
    label {
      url
      labelImage
    }
  }
}

trackingDetails.number er Japan Post-trackingnummeret.

label-objektet kan returnere labelen på to måder — anmod om det, der passer til dit workflow (eller begge):

Felt↕Returnerer↕Brug når↕
urlEt hostet link til den renderede labelfil (PDF), klar til download eller print.Du vil give et link — åbn det, send det på mail eller hent filen senere uden at holde den i payload.
labelImageBase64-kodet labelbillede (PNG/PDF/ZPL) inline i svaret.Du vil have labelbytes direkte i svaret til at vedhæfte til et fulfillment-workflow eller gemme i dit WMS.

Vælg kun de felter, du har brug for. Anmodning om url holder svaret lille; anmodning om labelImage returnerer hele labelen inline, så du ikke behøver et andet round-trip for at hente den. Eksemplet ovenfor anmoder om url.

Japan Post-serviceniveauer 

Send en af disse koder som serviceLevelCode i shipmentRatingCreateWorkflow.

Serviceniveaukoder bruger punktummer, ikke understregninger. Du kan se understregningsformen (japan_post_air_parcel) i fejlmeddelelser og interne referencer, men den er ikke gyldigt input.

Luftservices

Kode↕Japan Post-service↕Posttype↕
japan_post.air.ems_documentsEMS (dokumenter)1-0
japan_post.air.ems_merchandiseEMS (varer)1-1
japan_post.air.parcelInternationel pakke1-5
japan_post.air.packetInternational Air Packet1-8
japan_post.air.small_packetSmall packet1-9
japan_post.air.printed_matter_registeredTryksager, anbefalet1-A
japan_post.air.printed_matterTryksager1-B
japan_post.air.letter_registeredBrev, anbefalet1-C
japan_post.air.letterBrev1-D

Overfladeservices

Kode↕Japan Post-service↕Posttype↕
japan_post.surface.parcelInternationel pakke2-5
japan_post.surface.small_packetSmall packet2-9
japan_post.surface.printed_matterTryksager2-B
japan_post.surface.letterBrev2-D

Valg mellem lignende services

Small packet vs. International Air Packet. Begge er begrænset til 2 kg. japan_post.air.packet er Japan Posts trackede small-packet-service. japan_post.air.small_packet er den utrackede pendant. Hvis du har brug for tracking på en let pakke, brug japan_post.air.packet.

Anbefalede varianter. For breve og tryksager tilføjes tracking af den anbefalede (書留) version af servicen. japan_post.air.printed_matter og japan_post.air.letter inkluderer det ikke i sig selv.

Udgåede koder

japan_post.air.epacket_light var International e-Packet Light. Japan Post omdøbte servicen til International Air Packet den 1. juni 2026 og udvidede den til alle lande og regioner. Selve servicen er uændret.

Den gamle kode fungerer stadig, så eksisterende integrationer bliver ved med at virke, men brug japan_post.air.packet til nyt arbejde.

Transportmetode-koder

japan_post.air, japan_post.surface, japan_post.economy_air og japan_post.custom fungerer også, men de angiver en transportmetode eller et fallback frem for et specifikt postprodukt. Brug en af servicekoderne ovenfor til almindelige forsendelser.

Valider koden, du sender

En ukendt serviceLevelCode udløser ikke en fejl. Anmodningen returnerer HTTP 200 uden et errors-array, serviceLevel kommer tilbage som null, og shipping falder ud af landed cost-totalen — så svaret ser korrekt ud, mens beløbene er forkerte.

Sørg altid for at kontrollere, at shipmentRatingCreateWorkflow.serviceLevel ikke er null, før du stoler på totalerne.

For at hente den aktuelle liste når som helst:

{
  serviceLevels(carrier: "carrier_00004c9b-9431-4518-bfbc-b9f8476335b1") {
    code
    name
  }
}

Denne query tager carrierens ID. Hvis du sender carrier-koden japan_post, returneres en tom liste uden fejl.

Fejlhåndtering 

  • Valideringsfejl (manglende påkrævede felter, ugyldige landekoder osv.) returneres i det standard GraphQL errors-array og afbryder resten af kæden.
  • Japan Post-fejl (labelgenerering fejlede, ugyldig adresse osv.) vises som GraphQL-fejl på shipmentCreateWorkflow. Hvis et nyt forsøg er nødvendigt, kontakt support — den anbefalede vej er at sende hele mutationen igen med rettet input.

VALIDATION_INVALID_TYPE_VARIABLE

{
  "errors": [
    {
      "message": "invalid type for variable: 'shipmentInput'",
      "extensions": {
        "name": "shipmentInput",
        "code": "VALIDATION_INVALID_TYPE_VARIABLE"
      }
    }
  ]
}

Denne fejl navngiver hele variablen, ikke det felt, der faktisk er forkert. Det betyder næsten altid, at en enum-værdi inde i den variabel ikke er et medlem af sin enum — oftest nonDelivery.option, contentsType eller serviceLevel.

Det er ikke et JSON-typeproblem. At sætte eller fjerne anførselstegn omkring dine booleans og tal ændrer ikke noget, fordi payloaden aldrig når så langt — enum'et afvises først.

For at finde det forkerte felt skal du tjekke hvert enum-felt i variablen mod dets accepterede værdier:

Felt↕Accepterede værdier↕
nonDelivery.optionRETURN_AFTER_RETENTION, RETURN_IMMEDIATELY, FORWARD, ABANDON — ingen RETURN
nonDelivery.transportMethodAIR, MOST_ECONOMICAL
contentsTypeSALE_OF_GOODS, ECOMMERCE_GOODS, COMMERCIAL_GOODS, COMMERCIAL_SAMPLE, RETURNED_GOODS, GIFT, DOCUMENTS, OTHER
serviceLevelEn japan_post.*-servicekode

De fulde enum-medlemmer for ethvert input er angivet på dets type-side i API-referencen.

Tilladelser 

Hvert trin er uafhængigt sikret. Din API-nøgle skal have write-scope for hver entitet i kæden (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). Standardforhandlerrollen på en Verified Account giver alle disse.

Næste skridt 

Book en demo

Var denne side nyttig?