DOCS

Crear un envío individual

Crear un envío individual

El flujo GraphQL CreateDeclarationShipment lleva un envío de Japan Post desde los datos de entrada hasta una etiqueta imprimible en una sola solicitud.

CreateDeclarationShipment encadena seis mutaciones *Workflow en una única solicitud GraphQL. Cada paso se basa en los datos que proporcionaron los pasos anteriores, y todos se envían juntos para que se pueda crear un envío completo en una sola solicitud:

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

Las mutaciones Workflow están diseñadas para encadenarse: no necesita pasar IDs de un paso al siguiente, ni enviar una solicitud separada por paso. Envíe el documento completo y reciba el Shipment final.

Cuando el serviceLevel del paso final es un nivel de servicio de Japan Post (japan_post.*), Zonos llama a la Japan Post Label API (código 52) en su nombre usando los Later Pay Numbers de su Verified Account, genera la etiqueta y el número de seguimiento, crea el Declaration ID y los vincula — todo dentro de ese paso final shipmentCreateWorkflow.

¿Por qué una sola mutación? Cada paso depende del anterior (Landed Cost necesita los artículos y las partes; la etiqueta necesita todo). Agruparlos en un único documento GraphQL mantiene los datos consistentes y evita cinco solicitudes adicionales.

Endpoint y autenticación 

Las solicitudes de esta cadena utilizan el mismo endpoint. Lo que pase en los encabezados depende de su configuración — elija su pestaña.

URL:

https://api.zonos.com/graphql

Encabezados:

Usted envía sus propios pedidos bajo su propia Verified Account. Autentíquese como usted mismo — no se necesita account key.

credentialToken: {{YOUR_API_TOKEN}}

Dónde encontrarlo: Zonos Dashboard → SettingsIntegrations → la sección Account Key. Copie el token de la fila API key; ese es su credentialToken.

Ejemplo de solicitud 

Una solicitud completa de CreateDeclarationShipment que puede copiar y adaptar — la mutación, sus variables y la respuesta — para un paquete individual de Japan Post enviado DDP a EE. UU. Cada entrada se detalla en la sección paso a paso a continuación.

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}

Paso a paso 

La columna Estado de cada tabla a continuación utiliza estos términos:

  • Obligatorio — la solicitud falla sin este campo.
  • Obligatorio para la etiqueta — opcional en el esquema GraphQL, pero necesario para producir una etiqueta válida de Japan Post con destino a EE. UU.
  • Condicional — obligatorio según otro campo (se indica en línea).
  • Recomendado — opcional, pero determina aranceles e impuestos precisos.
  • Opcional — no es necesario.

1. partyCreateWorkflow

Crea las partes involucradas en el envío — como mínimo un ORIGIN (desde dónde se envía) y un DESTINATION (el comprador / consignatario).

CampoEstadoNotas
typeObligatorioORIGIN, DESTINATION, RETURN, etc.
location.countryCodeObligatorioCódigo de país ISO-2.
location.line1, locality, administrativeAreaCode, postalCodeObligatorio para la etiquetaCampos de dirección necesarios para una etiqueta válida.
person.firstName, lastName, phoneObligatorio para la etiquetaDatos de contacto necesarios para una etiqueta válida.
person.companyName, emailOpcional

Ejemplo de carga útil:

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

La respuesta devuelve los IDs de Party creados y los campos de dirección resueltos.

2. itemCreateWorkflow

Crea los artículos de línea que componen el envío. Son los SKU que aparecerán en la factura comercial y que determinan el cálculo de Landed Cost.

CampoEstadoNotas
currencyCodeObligatorioMoneda del precio unitario.
quantityObligatorioNúmero de unidades de este artículo.
amountCondicionalPrecio unitario (no total). Obligatorio a menos que se proporcione totalAmount.
totalAmountOpcionalAlternativa a amount; amount se deriva de totalAmount / quantity.
hsCodeRecomendadoCódigo arancelario del Sistema Armonizado. Determina las tasas de aranceles.
countryOfOriginRecomendadoCódigo ISO-2 del país de fabricación. Determina aranceles / TLC.
name, descriptionRecomendadoNombre y descripción del producto orientados al cliente.
customsDescriptionOpcionalDescripción aduanera alternativa.
sku, productIdOpcionalSus identificadores internos.
measurementsOpcionalPeso / dimensiones por unidad.

El código HS, el país de origen y el importe son los tres campos que más influyen en el resultado de aranceles/impuestos en el paso 5.

3. cartonsCreateWorkflow

Crea los paquetes físicos — las cajas, bolsas de polietileno o sobres que contendrán los artículos.

CampoEstadoNotas
dimensionalUnitObligatorioINCH o CENTIMETER.
weight, weightUnitObligatorio para la etiquetaJapan Post requiere el peso del paquete.
length, width, heightOpcionalDimensiones exteriores.
typeOpcionalTipo de embalaje (caja, bolsa de polietileno, sobre). Valor predeterminado: PACKAGE.

Cada cartón se convierte en un paquete en la etiqueta del transportista en el paso 6. Varios cartones → envío multipieza con un número de seguimiento por cartón.

4. shipmentRatingCreateWorkflow

Registra la cotización de tarifa que el comerciante cobra al comprador por el envío.

CampoEstadoNotas
amountObligatorioLo que paga el comprador por el envío. Pase 0 si es gratuito.
currencyCodeObligatorioMoneda de amount.
serviceLevelCodeObligatorioCódigo de servicio del transportista (p. ej., japan_post.air.parcel).
displayNameOpcionalNombre descriptivo para el recibo / factura.

Esta es la tarifa que se cotizó al comprador en Checkout. Se incorpora al cálculo de Landed Cost como subtotal de "shipping" para que los aranceles e impuestos se calculen contra el valor CIF correcto.

5. landedCostCalculateWorkflow

Ejecuta el cálculo de aranceles, impuestos y tasas para el país de destino. Utiliza los artículos, las partes y el costo de envío de los pasos anteriores.

CampoEstadoNotas
endUseObligatorioNOT_FOR_RESALE o FOR_RESALE. Algunos destinos aplican tasas distintas según el uso comercial o personal.
tariffRateObligatorioValor predeterminado ZONOS_PREFERRED si se omite. Indica a Zonos qué fuente/metodología arancelaria aplicar.
calculationMethodRecomendadoDDP (el comprador prepaga) o DDU (el comprador paga en la entrega). Use DDP para prepago. Determina si LandedCost.amountSubtotals incluye aranceles/impuestos.
currencyCodeOpcionalMoneda en la que se devuelven los subtotales de Landed Cost.
arrivalDateOpcionalLas tasas de cambio y los aranceles se fijan a esta fecha si se proporciona.

La respuesta incluye amountSubtotals (duties, taxes, fees, shipping, landedCostTotal) — son las cifras que muestra al comprador en Checkout y que se imprimen en la factura comercial.

6. shipmentCreateWorkflow

El paso final — crea la entidad Shipment, genera la etiqueta del transportista y (opcionalmente) la factura comercial / packing slip.

Para Japan Post Verified Accounts, aquí es donde Zonos llama a la Japan Post Label API (código 52) en su nombre, inserta sus Later Pay Numbers, crea el Declaration ID y vincula el Declaration ID al número de seguimiento devuelto por Japan Post.

Campos clave:

CampoEstadoNotas
serviceLevelObligatorio para la etiquetaEl servicio de Japan Post con el que enviar (p. ej., japan_post.air.ems_merchandise). Debe ser un nivel de servicio japan_post.*.
generateLabelOpcionalValor predeterminado true; debe ser true para devolver una etiqueta.
contentsTypeRecomendadoSALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Determina el tratamiento aduanero.
nonDeliveryOpcionalQué debe hacer el transportista si falla la entrega: RETURN, ABANDON, FORWARD.
referencesOpcionalNúmeros de referencia proporcionados por el comerciante impresos en la etiqueta y la factura comercial. Consulte a continuación.
declaredValue / isDeclaredValueOpcionalValor del seguro del envío.
shipmentConsolidationIdOpcionalSe utiliza cuando este envío forma parte de un despacho por lotes.

Subentrada references

Estos campos se imprimen en la etiqueta del transportista y/o en la factura comercial. Úselos para mostrar números de PO, números de licencia y observaciones de texto libre que el consignatario o la autoridad aduanera necesiten ver.

CampoEstadoNotasLongitud
invoiceNumberOpcionalNúmero de factura del comerciante.
purchaseOrderNumberOpcionalNúmero de PO del comerciante.
licenseNumberOpcionalNúmero de licencia de exportación/importación.
certificateNumberOpcionalNúmero de certificado aduanero.
paymentConditionsOpcionalCondiciones de pago en texto libre mostradas en la factura comercial.Límite de 200 caracteres — valores más largos desbordan la factura impresa.
customsRemarksOpcionalObservaciones aduaneras en texto libre.
taxCodeOpcionalCódigo fiscal personalizado impreso en la etiqueta.

Respuesta

Los campos relevantes del Shipment devuelto son:

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

trackingDetails.number es el número de seguimiento de Japan Post.

El objeto label puede devolver la etiqueta de dos formas — solicite la que se adapte a su flujo de trabajo (o ambas):

CampoDevuelveUsar cuando
urlUn enlace alojado al archivo de etiqueta renderizado (PDF), listo para descargar o imprimir.Desea entregar un enlace — abrirlo, enviarlo por correo electrónico o recuperar el archivo más tarde sin incluirlo en la carga útil.
labelImageLa imagen de la etiqueta codificada en base64 (PNG/PDF/ZPL) en línea en la respuesta.Desea los bytes de la etiqueta directamente en la respuesta para adjuntarlos a un flujo de cumplimiento o guardarlos en su WMS.

Seleccione solo los campos que necesite. Solicitar url mantiene la respuesta pequeña; solicitar labelImage devuelve la etiqueta completa en línea para que no necesite una segunda solicitud para obtenerla. El ejemplo anterior solicita url.

Manejo de errores 

  • Errores de validación (campos obligatorios faltantes, códigos de país no válidos, etc.) se devuelven en la matriz estándar de errores GraphQL errors y detienen el resto de la cadena.
  • Errores de Japan Post (fallo en la generación de la etiqueta, dirección no válida, etc.) aparecen como errores GraphQL en shipmentCreateWorkflow. Si se necesita un reintento, contacte con soporte — la ruta recomendada es volver a enviar la mutación completa con la entrada corregida.

Permisos 

Cada paso está protegido de forma independiente. Su clave de API debe tener el alcance de escritura para cada entidad de la cadena (ITEM_WRITE, CARTON_WRITE, SHIPMENT_RATING_WRITE, LANDED_COST_WRITE, SHIPMENT_WRITE). El rol estándar de comerciante en una Verified Account otorga todos estos permisos.

Próximos pasos 

¿Fue útil esta página?