DOCS

Tek bir sevkiyat oluşturun

CreateDeclarationShipment GraphQL iş akışı, bir Japan Post sevkiyatını ham girdilerden yazdırılabilir bir etikete tek bir gidiş-dönüş içinde getirir.

CreateDeclarationShipment, altı *Workflow mutasyonunu tek bir GraphQL isteğinde birleştirir. Her adım, önceki adımların sağladığı verilere dayanır ve hepsi birlikte gönderilir, böylece tam bir sevkiyat tek bir gidiş-dönüşte oluşturulabilir:

partyCreateWorkflow            → origin + destination taraflarını tanımla
itemCreateWorkflow             → satır öğelerini tanımla
cartonsCreateWorkflow          → fiziksel ambalajlamayı tanımla
shipmentRatingCreateWorkflow   → taşıyıcı oran teklifini kaydet
landedCostCalculateWorkflow    → gümrük vergilerini, vergileri ve ücretleri hesapla
shipmentCreateWorkflow         → sevkiyat + etiket oluştur

Workflow mutasyonları zincirleme yapılmak üzere tasarlanmıştır: bir adımdan diğerine ID'leri iletmeniz gerekmez ve adım başına ayrı bir istek göndermeniz gerekmez. Tüm belgeyi gönderin, son Shipment'i geri alın.

Son adımdaki serviceLevel bir Japan Post hizmet seviyesi olduğunda (japan_post.*), Zonos sizin adınıza Japan Post Label API'sini (kod 52) çağırır ve Doğrulanmış Hesabınızın Later Pay Numaralarını kullanarak etiketi ve takip numarasını oluşturur, Declaration ID'yi oluşturur ve bunları bağlar — tümü bu son shipmentCreateWorkflow adımının içinde.

Neden bir mutasyon? Her adım bir öncekine bağlıdır (landed cost hesaplaması öğeler + tarafları gerektirir; etiket her şeyi gerektirir). Bunları tek bir GraphQL belgesinde birleştirmek, veri tutarlılığını korur ve beş ekstra gidiş-dönüşü önler.

Endpoint ve kimlik doğrulama 

Bu zincirdeki isteklerin tümü aynı endpoint'i kullanır. Başlıklara ne koyacağınız kurulumunuza bağlıdır — sekmenizi seçin.

URL:

https://api.zonos.com/graphql

Başlıklar:

Kendi siparişlerinizi kendi Doğrulanmış Hesabınız altında gönderiyorsunuz. Kendiniz olarak kimlik doğrulaması yapın — hesap anahtarı gerekli değildir.

credentialToken: {{YOUR_API_TOKEN}}

Nereyi bulacağınız: Zonos Dashboard → SettingsIntegrationsAccount Key bölümü. API key satırındaki tokeni kopyalayın; bu sizin credentialToken'ınızdır.

Örnek istek 

Kopyalayıp uyarlayabileceğiniz tam bir CreateDeclarationShipment isteği — mutasyon, değişkenleri ve yanıtı — ABD'ye DDP ile gönderilen tek bir Japan Post paketi için. Her girdi, aşağıdaki adım adım bölümünde ayrıntılı olarak açıklanmıştır.

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}

Adım adım 

Aşağıdaki tablolarda Durum sütunu bu terimleri kullanır:

  • Gerekli — istek olmadan başarısız olur.
  • Etiket için gerekli — GraphQL şemasında isteğe bağlı, ancak geçerli bir Japan Post ABD etiketi üretmek için gerekli.
  • Koşullu — başka bir alana bağlı olarak gerekli (satır içinde belirtilmiştir).
  • Önerilen — isteğe bağlı, ancak doğru gümrük vergisi ve vergi hesaplamasını sağlar.
  • İsteğe bağlı — gerekli değildir.

1. partyCreateWorkflow

Sevkiyatla ilgili tarafları oluşturur — en azından bir ORIGIN (sevkiyatın nereden gönderileceği) ve bir DESTINATION (alıcı / teslim alan).

AlanDurumNotlar
typeGerekliBu akışın ihtiyaç duyduğu iki değer ORIGIN ve DESTINATION'dır. Diğerleri (CONSIGNEE, EXPORTER, IMPORTER_OF_RECORD, PAYOR, vb.) mevcuttur ama burada kullanılmaz.
location.countryCodeGerekliISO-2 ülke kodu.
location.line1, locality, administrativeAreaCode, postalCodeEtiket için gerekliGeçerli bir etiket için gereken adres alanları.
person.firstName, lastName, phoneEtiket için gerekliGeçerli bir etiket için gereken iletişim bilgileri.
person.companyName, emailİsteğe bağlı

Örnek yük:

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

Yanıt, oluşturulan Party ID'lerini ve çözümlenen adres alanlarını döndürür.

2. itemCreateWorkflow

Sevkiyatı oluşturan satır öğelerini oluşturur. Bunlar, ticari faturada görünecek ve iniş maliyeti hesaplamasını yönlendirecek SKU'lardır.

AlanDurumNotlar
currencyCodeGerekliBirim fiyatının para birimi.
quantityGerekliBu öğenin birim sayısı.
amountKoşulluBirim fiyatı (toplam değil). totalAmount sağlanmadıkça gerekli.
totalAmountİsteğe bağlıamount'a alternatif; amount totalAmount / quantity öğesinden türetilir.
hsCodeÖnerilenHarmonize Sistem tarife kodu. Gümrük oranlarını yönlendirir.
countryOfOriginÖnerilenISO-2 kodu, öğenin yapıldığı yer. Gümrük / FTA'yı yönlendirir.
name, descriptionÖnerilenMüşteriye yönelik ürün adı + açıklaması.
customsDescriptionİsteğe bağlıGümrük açıklaması geçersiz kılması.
sku, productIdİsteğe bağlıİç tanımlayıcılarınız.
measurementsİsteğe bağlıBirim başına ağırlık / boyutlar.

HS kodu, menşe ülkesi ve tutar, 5. adımdaki gümrük vergisi/vergi sonucunu en çok etkileyen üç alandır.

3. cartonsCreateWorkflow

Fiziksel paketleri oluşturur — öğeleri içine alacak kutular, polybag'lar veya mektuplar.

AlanDurumNotlar
dimensionalUnitGerekliINCH veya CENTIMETER.
weight, weightUnitEtiket için gerekliJapan Post paket ağırlığı gerektirir.
length, width, heightİsteğe bağlıDış boyutlar.
typeİsteğe bağlıAmbalaj stili (kutu, polybag, mektup). Varsayılan PACKAGE.

Her karton, 6. adımdaki taşıyıcı etikette bir parsel haline gelir. Birden fazla karton → her karton için ayrı bir takip numarasıyla çok parçalı bir sevkiyat.

4. shipmentRatingCreateWorkflow

Oran teklifini kaydeder — satıcının alıcıya kargo için talep ettiği tutar.

AlanDurumNotlar
amountGerekliAlıcının kargo için ödediği tutar. Ücretsiz ise 0 iletin.
currencyCodeGerekliamount'un para birimi.
serviceLevelCodeGerekliTaşıyıcı hizmet kodu (ör. japan_post.air.parcel). Tam liste için Japan Post hizmet seviyeleri sayfasına bakın.
displayNameİsteğe bağlıMakbuz / faturada güzel ad.

Bu, alıcının ödeme sırasında teklif edilen kargo ücretidir. Gümrük vergileri ve vergilerin doğru CIF değeri üzerinden hesaplanması için bu tutar, gümrük vergisi/vergi hesaplamasına "kargo" alt toplamı olarak dahil edilir.

5. landedCostCalculateWorkflow

Hedef ülke için gümrük vergisi, vergi ve ücret hesaplamasını çalıştırır. Önceki adımlardaki öğeleri, tarafları ve kargo maliyetini kullanır.

AlanDurumNotlar
endUseGerekliNOT_FOR_RESALE veya FOR_RESALE. Bazı hedefler ticari vs kişisel kullanım için farklı oranlar uygular.
tariffRateGerekliAtlanırsa ZONOS_PREFERRED varsayılanını ayarlar. Zonos'a hangi tarife kaynağı/yönteminin uygulanacağını söyler.
calculationMethodÖnerilenDDP (alıcı ön ödeme) veya DDU (alıcı kapıda ödeme). Ön ödeme için DDP kullanın. LandedCost.amountSubtotals'in gümrük vergisi/vergi içerip içermediğini belirler.
currencyCodeİsteğe bağlıİniş maliyeti alt toplamlarının döndürüleceği para birimi.
arrivalDateİsteğe bağlıSağlanırsa döviz kurları ve tarife tabloları bu tarihe sabitleştirilir.

Yanıt, amountSubtotals alanını içerir (duties, taxes, fees, shipping, landedCostTotal) — bunlar, ödeme sırasında alıcıya gösterdiğiniz ve ticari faturada basılan sayılardır.

6. shipmentCreateWorkflow

Son adım — Shipment varlığını oluşturur, taşıyıcı etiketi ve isteğe bağlı olarak ticari fatura / paketleme fişini üretir.

Japan Post Doğrulanmış Hesapları için bu adım, aynı zamanda Zonos'un sizin adınıza Japan Post Label API'sini (kod 52) çağırdığı, Later Pay Numaralarınızı enjekte ettiği, Declaration ID'yi oluşturduğu ve bu Declaration ID'yi Japan Post'un döndürdüğü takip numarasına bağladığı adımdır.

Önemli alanlar:

AlanDurumNotlar
serviceLevelEtiket için gerekliGönderim için kullanılacak Japan Post hizmeti (ör. japan_post.air.ems_merchandise). Bir japan_post.* hizmet seviyesi olmalıdır.
generateLabelİsteğe bağlıVarsayılan true; etiket döndürmek için true olmalıdır.
contentsTypeÖnerilenGümrük muamelesini yönlendirir. SALE_OF_GOODS, ECOMMERCE_GOODS, COMMERCIAL_GOODS, COMMERCIAL_SAMPLE, RETURNED_GOODS, GIFT, DOCUMENTS, OTHER değerlerinden biri.
nonDeliveryİsteğe bağlıPaket teslim edilemezse Japan Post'un ne yapacağı. Aşağıya bakın.
referencesİsteğe bağlıSatıcı tarafından sağlanan referans numaraları etikete ve ticari faturaya basılı. Aşağıya bakın.
declaredValue / isDeclaredValueİsteğe bağlıSevkiyat için sigorta değeri.
shipmentConsolidationIdİsteğe bağlıBu sevkiyat bir batch dispatch parçası olduğunda kullanılır.

contentsType için, Doğrulanmış Hesap trafiğinde en yaygın kullanılan iki değer ECOMMERCE_GOODS (bir tüketiciye satılan, BtoC) ve COMMERCIAL_GOODS (işletmeler arası satılan, BtoB) değerleridir. Bu değerler, Zonos'un Japan Post etiket çağrısında gönderdiği pkgType alanını belirler; dolayısıyla seçiminiz gümrük beyannamesinde neyin basılacağını değiştirir — bu sadece bir etiket meselesi değildir.

nonDelivery alt girdisi

Paket teslim edilemezse — alıcı tarafından kabul edilmezse, sınırda reddedilirse veya belirtilen adrese teslim edilemezse — Japan Post'un ne yapacağını belirtir.

option tam olarak şu dört değeri kabul eder. RETURN değeri yoktur — paketin ne zaman geri döneceğini seçmek için RETURN_AFTER_RETENTION veya RETURN_IMMEDIATELY kullanın.

optionDashboard karşılığıJapan Post ne yapar
RETURN_AFTER_RETENTIONReturnPaketi bekletme süresi boyunca hedef postanede tutar, ardından gönderene geri döndürür.
RETURN_IMMEDIATELYReturnPaketi bekletmeden hemen gönderene geri döndürür.
FORWARDRedirectionPaketi başka bir adrese yönlendirir. Ek posta ücreti uygulanır.
ABANDONRenouncePaketi hedefte imha eder. Hiçbir şey geri döndürülmez ve geri gönderim ücreti alınmaz.

API, her iki return türünü ayrı ayrı sunar; Dashboard'daki Return seçeneği ikisini de kapsar.

transportMethod, AIR veya MOST_ECONOMICAL değerlerini kabul eder ve geri döndürülen bir paketin nasıl taşınacağını belirler. Yalnızca iki RETURN_* seçeneği için geçerlidir — Dashboard, ilgili Return method alanını yalnızca Return seçildiğinde gösterir.

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

Dashboard'daki Create label iletişim kutusundaki If undeliverable seçici de aynı alanı yazar, böylece Dashboard'da oluşturulan bir etiket ile API üzerinden oluşturulan bir etiket aynı şekilde davranır.

references alt girdisi

Bu alanlar taşıyıcı etiketinde ve/veya ticari faturada basılı. Alıcının veya gümrük otoritesinin görmesi gereken PO numaralarını, lisans numaralarını ve serbest metin açıklamalarını yüzeye çıkarmak için bunları kullanın.

AlanDurumNotlarUzunluk
invoiceNumberİsteğe bağlıSatıcı fatura numarası.
purchaseOrderNumberİsteğe bağlıSatıcı PO numarası.
licenseNumberİsteğe bağlıİhracat/ithalat lisans numarası.
certificateNumberİsteğe bağlıGümrük sertifikası numarası.
paymentConditionsİsteğe bağlıTicari faturada gösterilen serbest metin ödeme koşulları.200 karakterle sınırlı — daha uzun değerler basılı faturada taşar.
customsRemarksİsteğe bağlıSerbest metin gümrük açıklamaları.
taxCodeİsteğe bağlıEtikette basılı özel vergi kodu.

Yanıt

Döndürülen Shipment'daki ilginç alanlar:

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

trackingDetails.number Japan Post takip numarasıdır.

label nesnesi etiketi iki şekilde döndürebilir — iş akışınıza uyan şeyi isteyin (veya her ikisini):

AlanDöndürürŞu durumlarda kullanın
urlOluşturulan etiket dosyasına (PDF) barındırılan bir bağlantı; indirmeye veya yazdırmaya hazır.Bir bağlantı aktarmak istiyorsunuz — açın, e-posta ile gönderin veya payload'u tutmadan dosyayı daha sonra alın.
labelImageBase64 kodlamalı etiket görüntüsü (PNG/PDF/ZPL) yanıtta satır içi.Etiket verilerini doğrudan yanıtta almak istiyorsunuz — bir fulfillment iş akışına eklemek veya WMS'nize kaydetmek için.

Yalnızca gerekli alanları seçin. url istemek yanıtı küçük tutar; labelImage istemek tam etiketi satır içinde döndürür, böylece almak için ikinci bir gidiş-dönüş gerekmez. Yukarıdaki örnek url alanını talep etmektedir.

Japan Post hizmet seviyeleri 

Bu kodlardan birini shipmentRatingCreateWorkflow içinde serviceLevelCode olarak iletin.

Hizmet seviyesi kodları alt çizgi değil nokta kullanır. Hata mesajlarında ve iç referanslarda alt çizgili biçimi (japan_post_air_parcel) görebilirsiniz, ancak bu geçerli bir girdi değildir.

Hava hizmetleri

KodJapan Post hizmetiPosta türü
japan_post.air.ems_documentsEMS (belgeler)1-0
japan_post.air.ems_merchandiseEMS (eşya)1-1
japan_post.air.parcelUluslararası paket1-5
japan_post.air.packetInternational Air Packet1-8
japan_post.air.small_packetKüçük paket1-9
japan_post.air.printed_matter_registeredBasılı materyal, kayıtlı1-A
japan_post.air.printed_matterBasılı materyal1-B
japan_post.air.letter_registeredMektup, kayıtlı1-C
japan_post.air.letterMektup1-D

Yüzey hizmetleri

KodJapan Post hizmetiPosta türü
japan_post.surface.parcelUluslararası paket2-5
japan_post.surface.small_packetKüçük paket2-9
japan_post.surface.printed_matterBasılı materyal2-B
japan_post.surface.letterMektup2-D

Benzer hizmetler arasında seçim yapma

Küçük paket ile International Air Packet karşılaştırması. Her ikisi de 2 kg ile sınırlıdır. japan_post.air.packet, Japan Post'un takip edilebilir küçük paket hizmetidir. japan_post.air.small_packet ise takip edilemeyen eşdeğeridir. Hafif bir pakette takip özelliğine ihtiyacınız varsa japan_post.air.packet kullanın.

Kayıtlı varyantlar. Mektuplar ve basılı materyaller için takip, hizmetin kayıtlı (書留) sürümüyle eklenir. japan_post.air.printed_matter ve japan_post.air.letter, bunu kendi başlarına içermez.

Kullanımdan kaldırılan kodlar

japan_post.air.epacket_light, International e-Packet Light hizmetiydi. Japan Post, hizmetin adını 1 Haziran 2026'da International Air Packet olarak değiştirdi ve tüm ülke ve bölgeleri kapsayacak şekilde genişletti. Hizmetin kendisi değişmedi.

Eski kod hâlâ çözümlenir, böylece mevcut entegrasyonlar çalışmaya devam eder, ancak yeni işler için japan_post.air.packet kullanın.

Taşıma modu kodları

japan_post.air, japan_post.surface, japan_post.economy_air ve japan_post.custom da çözümlenir, ancak bunlar belirli bir posta ürünü değil, bir taşıma modunu veya bir yedek seçeneği tanımlar. Normal sevkiyatlar için yukarıdaki hizmet kodlarından birini kullanın.

Gönderdiğiniz kodu doğrulayın

Tanınmayan bir serviceLevelCode hata vermez. İstek, errors dizisi olmadan HTTP 200 döndürür, serviceLevel null olarak gelir ve kargo tutarı landed cost toplamından düşer — böylece yanıt doğru görünür ama tutarlar yanlıştır.

Toplamlara güvenmeden önce her zaman shipmentRatingCreateWorkflow.serviceLevel'in null olmadığını doğrulayın.

Güncel listeyi istediğiniz zaman almak için:

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

Bu sorgu, taşıyıcı ID'sini alır. Taşıyıcı kodu japan_post'u geçirmek, hatasız boş bir liste döndürür.

Hata işleme 

  • Doğrulama hataları (eksik gerekli alanlar, geçersiz ülke kodları, vb.) standart GraphQL errors dizisinde geri gelir ve zincirin geri kalanını durdurur.
  • Japan Post hataları (etiket üretim hatası, geçersiz adres, vb.) shipmentCreateWorkflow üzerinde GraphQL hataları olarak yüzeye çıkar. Yeniden deneme gerekiyorsa, desteğe başvurun — önerilen yol, tam mutasyonu düzeltilmiş girdilerle yeniden göndermektir.

VALIDATION_INVALID_TYPE_VARIABLE

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

Bu hata değişkenin tamamını adlandırır, gerçekte hatalı olan alanı değil. Neredeyse her zaman, bu değişkenin içindeki bir enum değerinin kendi enum'unun bir üyesi olmadığı anlamına gelir — en sık nonDelivery.option, contentsType veya serviceLevel alanlarında.

Bu bir JSON tip sorunu değildir. Booleanlarınızı veya sayılarınızı tırnak içine alıp almamanız bir şey değiştirmez, çünkü payload hiçbir zaman o noktaya ulaşmaz — enum önce reddedilir.

Hatalı alanı bulmak için, değişken içindeki her enum değerli alanı kabul edilen değerlerine göre kontrol edin:

AlanKabul edilen değerler
nonDelivery.optionRETURN_AFTER_RETENTION, RETURN_IMMEDIATELY, FORWARD, ABANDONRETURN yoktur
nonDelivery.transportMethodAIR, MOST_ECONOMICAL
contentsTypeSALE_OF_GOODS, ECOMMERCE_GOODS, COMMERCIAL_GOODS, COMMERCIAL_SAMPLE, RETURNED_GOODS, GIFT, DOCUMENTS, OTHER
serviceLevelBir japan_post.* hizmet seviyesi kodu

Herhangi bir girdi için enum üyelerinin tam listesi, API referansındaki tür sayfasında yer alır.

İzinler 

Her adım bağımsız olarak güvenliği sağlanır. API anahtarınız, zincirdeki her varlık için yazma kapsamını (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE) tutmalıdır. Doğrulanmış Hesaptaki standart satıcı rolü tümünü verir.

Sonraki adımlar 

Bu sayfa faydalı mıydı?