Endpoint und Authentifizierung
Die Anfragen in dieser Kette nutzen alle denselben Endpoint. Was Sie in den Headern übergeben, hängt von Ihrem Setup ab — wählen Sie Ihren Tab.
URL:
https://api.zonos.com/graphql
Header:
Sie versenden Ihre eigenen Bestellungen unter Ihrem eigenen Verified Account. Authentifizieren Sie sich als sich selbst — kein Account Key erforderlich.
credentialToken: {{YOUR_API_TOKEN}}
Wo Sie ihn finden: Zonos Dashboard → Settings → Integrations → Abschnitt Account Key. Kopieren Sie den Token in der Zeile API key; das ist Ihr credentialToken.
Beispielanfrage
Eine vollständige CreateDeclarationShipment-Anfrage zum Kopieren und Anpassen — die Mutation, ihre Variablen und die Antwort — für ein einzelnes Japan Post-Paket, das per DDP in die USA versendet wird. Jede Eingabe wird im Abschnitt Schritt für Schritt unten erläutert.
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 } } }}Schritt für Schritt
Die Spalte Status in jeder Tabelle unten verwendet diese Begriffe:
- Erforderlich — die Anfrage schlägt ohne dieses Feld fehl.
- Erforderlich für Etikett — im GraphQL-Schema optional, aber erforderlich für ein gültiges Japan Post-US-Etikett.
- Bedingt — abhängig von einem anderen Feld erforderlich (im Text vermerkt).
- Empfohlen — optional, beeinflusst aber die Genauigkeit von Zöllen und Steuern.
- Optional — nicht erforderlich.
1. partyCreateWorkflow
Erstellt die an der Sendung beteiligten Parteien — mindestens eine ORIGIN (Versandursprung) und eine DESTINATION (Käufer / Empfänger).
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
type | Erforderlich | ORIGIN, DESTINATION, RETURN usw. |
location.countryCode | Erforderlich | ISO-2-Ländercode. |
location.line1, locality, administrativeAreaCode, postalCode | Erforderlich für Etikett | Adressfelder für ein gültiges Etikett erforderlich. |
person.firstName, lastName, phone | Erforderlich für Etikett | Kontaktdaten für ein gültiges Etikett erforderlich. |
person.companyName, email | Optional |
Beispiel-Payload:
[
{ "type": "DESTINATION", "location": { "countryCode": "US" }, "person": {} },
{ "type": "ORIGIN", "location": { "countryCode": "JP" }, "person": {} }
]
Die Antwort gibt die erstellten Party-IDs und aufgelösten Adressfelder zurück.
2. itemCreateWorkflow
Erstellt die Positionen, aus denen die Sendung besteht. Das sind die SKUs, die auf der Handelsrechnung erscheinen und die Landed-Cost-Berechnung steuern.
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
currencyCode | Erforderlich | Währung des Stückpreises. |
quantity | Erforderlich | Anzahl der Einheiten dieser Position. |
amount | Bedingt | Stückpreis (nicht Gesamtbetrag). Erforderlich, sofern totalAmount nicht angegeben ist. |
totalAmount | Optional | Alternative zu amount; amount wird aus totalAmount / quantity abgeleitet. |
hsCode | Empfohlen | Harmonized-System-Zolltarifnummer. Bestimmt die Zollsätze. |
countryOfOrigin | Empfohlen | ISO-2-Code des Herstellungslandes. Bestimmt Zoll / FTA. |
name, description | Empfohlen | Kundenorientierte Produktbezeichnung und Beschreibung. |
customsDescription | Optional | Überschreibung der Zollbeschreibung. |
sku, productId | Optional | Ihre internen Kennungen. |
measurements | Optional | Gewicht / Abmessungen pro Einheit. |
Der HS-Code, das Herstellungsland und der Betrag sind die drei Felder, die das Zoll-/Steuerergebnis in Schritt 5 am stärksten beeinflussen.
3. cartonsCreateWorkflow
Erstellt die physischen Pakete — die Kartons, Polybeutel oder Briefe, die die Positionen enthalten.
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
dimensionalUnit | Erforderlich | INCH oder CENTIMETER. |
weight, weightUnit | Erforderlich für Etikett | Japan Post erfordert das Paketgewicht. |
length, width, height | Optional | Außenmaße. |
type | Optional | Verpackungsart (Karton, Polybeutel, Brief). Standard: PACKAGE. |
Jeder Karton wird in Schritt 6 zu einem Paket auf dem Carrier-Etikett. Mehrere Kartons → Mehrstück-Sendung mit einer Sendungsnummer pro Karton.
4. shipmentRatingCreateWorkflow
Erfasst das Tarifangebot, das der Händler dem Käufer für den Versand berechnet.
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
amount | Erforderlich | Was der Käufer für den Versand zahlt. Übergeben Sie 0 bei Gratisversand. |
currencyCode | Erforderlich | Währung von amount. |
serviceLevelCode | Erforderlich | Carrier-Servicecode (z. B. japan_post.air.parcel). |
displayName | Optional | Anzeigename für Quittung / Rechnung. |
Das ist der Tarif, der dem Käufer beim Checkout angeboten wurde. Er fließt als Teilposten „Versand“ in die Landed-Cost-Berechnung ein, damit Zölle und Steuern gegen den korrekten CIF-Wert berechnet werden.
5. landedCostCalculateWorkflow
Führt die Berechnung von Zöllen, Steuern und Gebühren für das Zielland durch. Nutzt die Positionen, Parteien und Versandkosten aus den vorherigen Schritten.
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
endUse | Erforderlich | NOT_FOR_RESALE oder FOR_RESALE. Einige Zielländer wenden unterschiedliche Sätze für gewerbliche und private Endnutzung an. |
tariffRate | Erforderlich | Standardmäßig ZONOS_PREFERRED, wenn weggelassen. Teilt Zonos mit, welche Zolltarifquelle/-methodik angewendet wird. |
calculationMethod | Empfohlen | DDP (Käufer zahlt im Voraus) oder DDU (Käufer zahlt bei Zustellung). Verwenden Sie DDP für Vorauszahlung. Steuert, ob LandedCost.amountSubtotals Zoll/Steuer enthält. |
currencyCode | Optional | Währung, in der die Landed-Cost-Teilbeträge zurückgegeben werden. |
arrivalDate | Optional | Wechselkurse und Zolltarife werden an dieses Datum gebunden, sofern angegeben. |
Die Antwort enthält amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — das sind die Werte, die Sie dem Käufer beim Checkout anzeigen und die auf der Handelsrechnung gedruckt werden.
6. shipmentCreateWorkflow
Der abschließende Schritt — erstellt die Shipment-Entität, generiert das Carrier-Etikett und (optional) die Handelsrechnung / den Packzettel.
Für Japan Post Verified Accounts ruft Zonos hier auch in Ihrem Namen die Japan Post Label API (Code 52) auf, bindet Ihre Later Pay Numbers ein, erstellt die Declaration ID und verknüpft die Declaration ID mit der von Japan Post zurückgegebenen Sendungsnummer.
Wichtige Felder:
| Feld↕ | Status↕ | Hinweise↕ |
|---|---|---|
serviceLevel | Erforderlich für Etikett | Die Japan Post-Serviceebene für den Versand (z. B. japan_post.air.ems_merchandise). Muss eine japan_post.*-Serviceebene sein. |
generateLabel | Optional | Standardmäßig true; muss true sein, um ein Etikett zurückzugeben. |
contentsType | Empfohlen | SALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE usw. Steuert die Zollbehandlung. |
nonDelivery | Optional | Was der Carrier bei fehlgeschlagener Zustellung tun soll: RETURN, ABANDON, FORWARD. |
references | Optional | Vom Händler bereitgestellte Referenznummern auf Etikett und Handelsrechnung. Siehe unten. |
declaredValue / isDeclaredValue | Optional | Versicherungswert der Sendung. |
shipmentConsolidationId | Optional | Wird verwendet, wenn diese Sendung Teil eines Batch-Versands ist. |
references-Untereingabe
Diese Felder werden auf dem Carrier-Etikett und/oder der Handelsrechnung gedruckt. Nutzen Sie sie, um Bestellnummern, Lizenznummern und Freitextbemerkungen anzuzeigen, die der Empfänger oder die Zollbehörde sehen muss.
| Feld↕ | Status↕ | Hinweise↕ | Länge↕ |
|---|---|---|---|
invoiceNumber | Optional | Händler-Rechnungsnummer. | — |
purchaseOrderNumber | Optional | Händler-Bestellnummer. | — |
licenseNumber | Optional | Export-/Importlizenznummer. | — |
certificateNumber | Optional | Zollzertifikatsnummer. | — |
paymentConditions | Optional | Freitext-Zahlungsbedingungen auf der Handelsrechnung. | Auf 200 Zeichen begrenzen — längere Werte überlaufen auf der gedruckten Rechnung. |
customsRemarks | Optional | Freitext-Zollbemerkungen. | — |
taxCode | Optional | Individueller Steuercode auf dem Etikett. | — |
Antwort
Die relevanten Felder der zurückgegebenen Shipment sind:
{
id
trackingDetails {
number
}
shipmentCartons {
label {
url
labelImage
}
}
}
trackingDetails.number ist die Japan Post-Sendungsnummer.
Das label-Objekt kann das Etikett auf zwei Arten zurückgeben — fordern Sie an, was zu Ihrem Workflow passt (oder beides):
| Feld↕ | Gibt zurück↕ | Verwenden, wenn↕ |
|---|---|---|
url | Einen gehosteten Link zur gerenderten Etikettendatei (PDF), bereit zum Download oder Druck. | Sie einen Link weitergeben möchten — öffnen, per E-Mail senden oder die Datei später abrufen, ohne sie in der Payload zu halten. |
labelImage | Das Base64-kodierte Etikettenbild (PNG/PDF/ZPL) inline in der Antwort. | Sie die Etikettenbytes direkt in der Antwort benötigen, um sie an einen Fulfillment-Workflow anzuhängen oder in Ihrem WMS zu speichern. |
Fordern Sie nur die Felder an, die Sie benötigen. url hält die Antwort klein; labelImage gibt das vollständige Etikett inline zurück, sodass kein zweiter Round-Trip zum Abruf nötig ist. Das Beispiel oben fordert url an.
Fehlerbehandlung
- Validierungsfehler (fehlende Pflichtfelder, ungültige Ländercodes usw.) werden im standardmäßigen GraphQL-
errors-Array zurückgegeben und brechen den Rest der Kette ab. - Japan Post-Fehler (Fehler bei der Etikettenerstellung, ungültige Adresse usw.) werden als GraphQL-Fehler bei
shipmentCreateWorkflowausgegeben. Wenn ein erneuter Versuch nötig ist, wenden Sie sich an den Support — der empfohlene Weg ist, die vollständige Mutation mit korrigierten Eingaben erneut einzureichen.
Berechtigungen
Jeder Schritt ist unabhängig abgesichert. Ihr API-Schlüssel muss den Schreibbereich für jede Entität in der Kette haben (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). Die Standard-Händlerrolle auf einem Verified Account gewährt alle diese Berechtigungen.
Nächste Schritte
- Batch-Versand (Konsolidierung) — bündeln Sie die Pakete eines Tages in einen Japan Post-Nachzahlungsversandschein.
Einzel-Sendung erstellen
Der GraphQL-Workflow
CreateDeclarationShipmentführt eine Japan Post-Sendung von den Rohdaten bis zum druckbaren Etikett in einem Round-Trip.CreateDeclarationShipmentverknüpft sechs*Workflow-Mutationen zu einer einzigen GraphQL-Anfrage. Jeder Schritt baut auf den Daten der vorherigen Schritte auf, und alle werden gemeinsam übermittelt, sodass eine vollständige Sendung in einem Round-Trip erstellt werden kann:Die
Workflow-Mutationen sind für die Verkettung konzipiert: Sie müssen keine IDs von einem Schritt in den nächsten durchreichen und müssen keinen separaten Request pro Schritt senden. Reichen Sie das gesamte Dokument ein und erhalten Sie die finaleShipmentzurück.Wenn der
serviceLevelim letzten Schritt eine Japan Post-Serviceebene ist (japan_post.*), ruft Zonos in Ihrem Namen die Japan Post Label API (Code 52) mit den Later Pay Numbers Ihres Verified Accounts auf, generiert das Etikett und die Sendungsnummer, erstellt die Declaration ID und verknüpft sie — alles innerhalb des abschließenden SchrittsshipmentCreateWorkflow.