DOCS

Créer un seul envoi

Créer un seul envoi

Le flux de travail CreateDeclarationShipment GraphQL fait passer un envoi Japan Post des entrées brutes à une étiquette imprimable en un seul aller-retour.

CreateDeclarationShipment enchaîne six mutations *Workflow en une seule requête GraphQL. Chaque étape s'appuie sur les données fournies par les étapes précédentes, et toutes sont soumises ensemble afin qu'un envoi complet puisse être créé en un seul aller-retour :

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

Les mutations Workflow sont conçues pour être chaînées : vous n'avez pas besoin de transmettre les identifiants d'une étape à l'autre, et vous n'avez pas besoin d'envoyer une requête distincte par étape. Soumettez l'intégralité du document, récupérez le Shipment final.

Lorsque le serviceLevel de la dernière étape est un niveau de service Japan Post (japan_post.*), Zonos appelle l'API Japan Post Label (code 52) en votre nom à l'aide des numéros de paiement ultérieurs de votre compte vérifié, génère l'étiquette et le numéro de suivi, crée l'ID de déclaration et les relie, le tout dans cette dernière étape shipmentCreateWorkflow.

Pourquoi une mutation ? Chaque étape dépend de la précédente (le coût au débarquement nécessite les objets + les parties ; le label a besoin de tout). Les regrouper dans un seul document GraphQL maintient les données cohérentes et évite cinq allers-retours supplémentaires.

Point de terminaison et authentification 

Les requêtes de cette chaîne utilisent toutes le même point de terminaison. Ce que vous transmettez dans les en-têtes dépend de votre configuration : choisissez votre onglet.

URL :

https://api.zonos.com/graphql

En-têtes :

Vous expédiez vos propres commandes sous votre propre compte vérifié. Authentifiez-vous comme vous-même — aucune clé de compte n'est nécessaire.

credentialToken: {{YOUR_API_TOKEN}}

Où le trouver : Dashboard Zonos → ParamètresIntégrations → section Clé de compte. Copiez le jeton sur la ligne Clé API ; c'est votre credentialToken.

Exemple de requête 

Une requête CreateDeclarationShipment complète que vous pouvez copier et adapter (la mutation, ses variables et la réponse) pour un seul colis Japan Post expédié en DDP aux États-Unis. Chaque entrée est détaillée dans la section étape par étape ci-dessous.

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}

Étape par étape 

La colonne Status de chaque tableau ci-dessous utilise ces termes :

  • Obligatoire — la requête échoue sans cela.
  • Obligatoire pour l'étiquette — facultatif dans le schéma GraphQL, mais nécessaire pour produire une étiquette Japan Post U.S. valide.
  • Conditionnel — obligatoire en fonction d'un autre champ (noté en ligne).
  • Recommandé — facultatif, mais génère des droits et taxes précis.
  • Facultatif — pas nécessaire.

1. partyCreateWorkflow

Crée les parties impliquées dans l'envoi : au minimum un ORIGIN (d'où l'envoi est expédié) et un DESTINATION (l'acheteur/le destinataire).

ChampStatutRemarques
typeObligatoireORIGIN, DESTINATION, RETURN, etc.
location.countryCodeObligatoireCode pays ISO-2.
location.line1, locality, administrativeAreaCode, postalCodeObligatoire pour l'étiquetteChamps d'adresse nécessaires pour une étiquette valide.
person.firstName, lastName, phoneObligatoire pour l'étiquetteCoordonnées nécessaires pour une étiquette valide.
person.companyName, emailFacultatif

Exemple de charge utile :

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

La réponse renvoie les ID Party créés et les champs d'adresse résolus.

2. itemCreateWorkflow

Crée les articles qui composent l'envoi. Ce sont les SKU qui apparaîtront sur la facture commerciale et qui déterminent le calcul du coût au débarquement.

ChampStatutRemarques
currencyCodeObligatoireDevise du prix unitaire.
quantityObligatoireNombre d'unités de cet article.
amountConditionnelPrix unitaire (pas le total). Requis sauf si totalAmount est fourni.
totalAmountFacultatifAlternative à amount ; amount est dérivé de totalAmount / quantity.
hsCodeRecommandéCode tarifaire du Système harmonisé. Détermine les taux de droits.
countryOfOriginRecommandéCode ISO-2 du pays de fabrication. Détermine les droits / ALE.
name, descriptionRecommandéNom et description du produit destinés au client.
customsDescriptionFacultatifRemplacement de la description douanière.
sku, productIdFacultatifVos identifiants internes.
measurementsFacultatifPoids / dimensions par unité.

Le code SH, le pays d'origine et le montant sont les trois champs qui influencent le plus le résultat des droits/taxes à l'étape 5.

3. cartonsCreateWorkflow

Crée les colis physiques — les boîtes, sacs en polyéthylène ou lettres qui contiendront les articles.

ChampStatutRemarques
dimensionalUnitObligatoireINCH ou CENTIMETER.
weight, weightUnitObligatoire pour l'étiquetteJapan Post exige le poids du colis.
length, width, heightFacultatifDimensions extérieures.
typeFacultatifStyle d'emballage (boîte, sac, lettre). Par défaut PACKAGE.

Chaque carton devient un colis sur l'étiquette du transporteur à l'étape 6. Plusieurs cartons → envoi multi-pièces avec un numéro de suivi par carton.

4. shipmentRatingCreateWorkflow

Enregistre le devis tarifaire que le commerçant facture à l'acheteur pour l'expédition.

ChampStatutRemarques
amountObligatoireCe que l'acheteur paie pour l'expédition. Transmettez 0 si gratuit.
currencyCodeObligatoireDevise de amount.
serviceLevelCodeObligatoireCode de service du transporteur (e.g. japan_post.air.parcel).
displayNameFacultatifNom affiché pour le reçu / la facture.

Il s'agit du tarif proposé à l'acheteur au paiement. Il alimente le calcul du coût au débarquement comme sous-total « shipping » afin que les droits et taxes soient calculés sur la valeur CAF correcte.

5. landedCostCalculateWorkflow

Exécute le calcul des droits, taxes et frais pour le pays de destination. Utilise les articles, les parties et les frais d'expédition des étapes précédentes.

ChampStatutRemarques
endUseObligatoireNOT_FOR_RESALE ou FOR_RESALE. Certaines destinations appliquent des taux différents pour un usage commercial ou personnel.
tariffRateObligatoirePar défaut ZONOS_PREFERRED si omis. Indique à Zonos quelle source/méthodologie tarifaire appliquer.
calculationMethodRecommandéDDP (l'acheteur paie d'avance) ou DDU (l'acheteur paie à la livraison). Utilisez DDP pour le prépaiement. Détermine si LandedCost.amountSubtotals inclut les droits/taxes.
currencyCodeFacultatifDevise dans laquelle les sous-totaux du coût au débarquement sont renvoyés.
arrivalDateFacultatifLes taux de change et les barèmes tarifaires sont fixés à cette date si elle est fournie.

La réponse inclut amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — ce sont les montants affichés à l'acheteur au paiement et imprimés sur la facture commerciale.

6. shipmentCreateWorkflow

L'étape terminale — crée l'entité Shipment, génère l'étiquette du transporteur et (facultativement) la facture commerciale / le bordereau d'emballage.

Pour les comptes vérifiés Japan Post, c'est aussi là que Zonos appelle l'API Japan Post Label (code 52) en votre nom, injecte vos numéros de paiement ultérieur, crée l'ID de déclaration et le lie au numéro de suivi renvoyé par Japan Post.

Champs clés :

ChampStatutRemarques
serviceLevelObligatoire pour l'étiquetteLe service Japan Post à utiliser (e.g. japan_post.air.ems_merchandise). Doit être un niveau de service japan_post.*.
generateLabelFacultatifPar défaut true ; doit être true pour renvoyer une étiquette.
contentsTypeRecommandéSALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Détermine le traitement douanier.
nonDeliveryFacultatifCe que le transporteur doit faire en cas d'échec de livraison : RETURN, ABANDON, FORWARD.
referencesFacultatifNuméros de référence fournis par le commerçant, imprimés sur l'étiquette et la facture commerciale. Voir ci-dessous.
declaredValue / isDeclaredValueFacultatifValeur d'assurance de l'envoi.
shipmentConsolidationIdFacultatifUtilisé lorsque cet envoi fait partie d'un envoi par lots.

Sous-entrée references

Ces champs s'impriment sur l'étiquette du transporteur et/ou la facture commerciale. Utilisez-les pour faire apparaître les numéros de bon de commande, de licence et les remarques en texte libre dont le destinataire ou l'autorité douanière a besoin.

ChampStatutRemarquesLongueur
invoiceNumberFacultatifNuméro de facture du commerçant.
purchaseOrderNumberFacultatifNuméro de bon de commande du commerçant.
licenseNumberFacultatifNuméro de licence d'exportation/importation.
certificateNumberFacultatifNuméro de certificat douanier.
paymentConditionsFacultatifConditions de paiement en texte libre affichées sur la facture commerciale.Limité à 200 caractères — les valeurs plus longues débordent sur la facture imprimée.
customsRemarksFacultatifRemarques douanières en texte libre.
taxCodeFacultatifCode fiscal personnalisé imprimé sur l'étiquette.

Réponse

Les champs utiles sur le Shipment renvoyé sont :

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

trackingDetails.number est le numéro de suivi de Japan Post.

L'objet label peut renvoyer l'étiquette de deux manières — demandez celle qui correspond à votre flux de travail (ou les deux) :

ChampRetoursUtiliser quand
urlUn lien hébergé vers le fichier d'étiquette rendu (PDF), prêt à télécharger ou à imprimer.Vous souhaitez transmettre un lien : ouvrez-le, envoyez-le par courrier électronique ou récupérez le fichier plus tard sans le conserver dans la charge utile.
labelImageL'image d'étiquette codée en base64 (PNG/PDF/ZPL) intégrée dans la réponse.Vous souhaitez que les octets d'étiquette directement dans la réponse soient joints à un flux de travail d'exécution ou enregistrés sur votre WMS.

Sélectionnez uniquement les champs dont vous avez besoin. Demander url maintient la réponse petite ; demander labelImage renvoie l'étiquette complète en ligne, vous n'avez donc pas besoin d'un deuxième aller-retour pour la récupérer. L'exemple ci-dessus demande url.

Gestion des erreurs 

  • Les erreurs de validation (champs obligatoires manquants, codes de pays invalides, etc.) reviennent dans le tableau GraphQL errors standard et abandonnent le reste de la chaîne.
  • Les erreurs Japan Post (échec de génération d'étiquette, adresse invalide, etc.) apparaissent sous forme d'erreurs GraphQL sur shipmentCreateWorkflow. Si une nouvelle tentative est nécessaire, contactez le support — le chemin recommandé consiste à soumettre à nouveau la mutation complète avec la saisie corrigée.

Autorisations 

Chaque étape est sécurisée indépendamment. Votre clé API doit contenir la portée d'écriture pour chaque entité de la chaîne (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). Le rôle de commerçant standard sur un compte vérifié accorde tout cela.

Étapes suivantes 

Cette page a-t-elle été utile?