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ètres → Inté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.
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 } } }}É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).
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
type | Obligatoire | ORIGIN, DESTINATION, RETURN, etc. |
location.countryCode | Obligatoire | Code pays ISO-2. |
location.line1, locality, administrativeAreaCode, postalCode | Obligatoire pour l'étiquette | Champs d'adresse nécessaires pour une étiquette valide. |
person.firstName, lastName, phone | Obligatoire pour l'étiquette | Coordonnées nécessaires pour une étiquette valide. |
person.companyName, email | Facultatif |
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.
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
currencyCode | Obligatoire | Devise du prix unitaire. |
quantity | Obligatoire | Nombre d'unités de cet article. |
amount | Conditionnel | Prix unitaire (pas le total). Requis sauf si totalAmount est fourni. |
totalAmount | Facultatif | Alternative à amount ; amount est dérivé de totalAmount / quantity. |
hsCode | Recommandé | Code tarifaire du Système harmonisé. Détermine les taux de droits. |
countryOfOrigin | Recommandé | Code ISO-2 du pays de fabrication. Détermine les droits / ALE. |
name, description | Recommandé | Nom et description du produit destinés au client. |
customsDescription | Facultatif | Remplacement de la description douanière. |
sku, productId | Facultatif | Vos identifiants internes. |
measurements | Facultatif | Poids / 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.
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
dimensionalUnit | Obligatoire | INCH ou CENTIMETER. |
weight, weightUnit | Obligatoire pour l'étiquette | Japan Post exige le poids du colis. |
length, width, height | Facultatif | Dimensions extérieures. |
type | Facultatif | Style 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.
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
amount | Obligatoire | Ce que l'acheteur paie pour l'expédition. Transmettez 0 si gratuit. |
currencyCode | Obligatoire | Devise de amount. |
serviceLevelCode | Obligatoire | Code de service du transporteur (e.g. japan_post.air.parcel). |
displayName | Facultatif | Nom 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.
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
endUse | Obligatoire | NOT_FOR_RESALE ou FOR_RESALE. Certaines destinations appliquent des taux différents pour un usage commercial ou personnel. |
tariffRate | Obligatoire | Par défaut ZONOS_PREFERRED si omis. Indique à Zonos quelle source/méthodologie tarifaire appliquer. |
calculationMethod | Recommandé | 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. |
currencyCode | Facultatif | Devise dans laquelle les sous-totaux du coût au débarquement sont renvoyés. |
arrivalDate | Facultatif | Les 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 :
| Champ↕ | Statut↕ | Remarques↕ |
|---|---|---|
serviceLevel | Obligatoire pour l'étiquette | Le service Japan Post à utiliser (e.g. japan_post.air.ems_merchandise). Doit être un niveau de service japan_post.*. |
generateLabel | Facultatif | Par défaut true ; doit être true pour renvoyer une étiquette. |
contentsType | Recommandé | SALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Détermine le traitement douanier. |
nonDelivery | Facultatif | Ce que le transporteur doit faire en cas d'échec de livraison : RETURN, ABANDON, FORWARD. |
references | Facultatif | Numéros de référence fournis par le commerçant, imprimés sur l'étiquette et la facture commerciale. Voir ci-dessous. |
declaredValue / isDeclaredValue | Facultatif | Valeur d'assurance de l'envoi. |
shipmentConsolidationId | Facultatif | Utilisé 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.
| Champ↕ | Statut↕ | Remarques↕ | Longueur↕ |
|---|---|---|---|
invoiceNumber | Facultatif | Numéro de facture du commerçant. | — |
purchaseOrderNumber | Facultatif | Numéro de bon de commande du commerçant. | — |
licenseNumber | Facultatif | Numéro de licence d'exportation/importation. | — |
certificateNumber | Facultatif | Numéro de certificat douanier. | — |
paymentConditions | Facultatif | Conditions 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. |
customsRemarks | Facultatif | Remarques douanières en texte libre. | — |
taxCode | Facultatif | Code 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) :
| Champ↕ | Retours↕ | Utiliser quand↕ |
|---|---|---|
url | Un 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. |
labelImage | L'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
errorsstandard 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
- Envoi par lots (consolidation) — regroupez les colis de la journée dans un seul bordereau d'expédition à paiement différé Japan Post.
Créer un seul envoi
Le flux de travail
CreateDeclarationShipmentGraphQL fait passer un envoi Japan Post des entrées brutes à une étiquette imprimable en un seul aller-retour.CreateDeclarationShipmentenchaîne six mutations*Workflowen 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 :Les mutations
Workflowsont 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 leShipmentfinal.Lorsque le
serviceLevelde 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 étapeshipmentCreateWorkflow.