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 → Settings → Integrations → 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.
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 } } }}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).
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
type | Obligatorio | ORIGIN, DESTINATION, RETURN, etc. |
location.countryCode | Obligatorio | Código de país ISO-2. |
location.line1, locality, administrativeAreaCode, postalCode | Obligatorio para la etiqueta | Campos de dirección necesarios para una etiqueta válida. |
person.firstName, lastName, phone | Obligatorio para la etiqueta | Datos de contacto necesarios para una etiqueta válida. |
person.companyName, email | Opcional |
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.
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
currencyCode | Obligatorio | Moneda del precio unitario. |
quantity | Obligatorio | Número de unidades de este artículo. |
amount | Condicional | Precio unitario (no total). Obligatorio a menos que se proporcione totalAmount. |
totalAmount | Opcional | Alternativa a amount; amount se deriva de totalAmount / quantity. |
hsCode | Recomendado | Código arancelario del Sistema Armonizado. Determina las tasas de aranceles. |
countryOfOrigin | Recomendado | Código ISO-2 del país de fabricación. Determina aranceles / TLC. |
name, description | Recomendado | Nombre y descripción del producto orientados al cliente. |
customsDescription | Opcional | Descripción aduanera alternativa. |
sku, productId | Opcional | Sus identificadores internos. |
measurements | Opcional | Peso / 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.
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
dimensionalUnit | Obligatorio | INCH o CENTIMETER. |
weight, weightUnit | Obligatorio para la etiqueta | Japan Post requiere el peso del paquete. |
length, width, height | Opcional | Dimensiones exteriores. |
type | Opcional | Tipo 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.
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
amount | Obligatorio | Lo que paga el comprador por el envío. Pase 0 si es gratuito. |
currencyCode | Obligatorio | Moneda de amount. |
serviceLevelCode | Obligatorio | Código de servicio del transportista (p. ej., japan_post.air.parcel). |
displayName | Opcional | Nombre 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.
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
endUse | Obligatorio | NOT_FOR_RESALE o FOR_RESALE. Algunos destinos aplican tasas distintas según el uso comercial o personal. |
tariffRate | Obligatorio | Valor predeterminado ZONOS_PREFERRED si se omite. Indica a Zonos qué fuente/metodología arancelaria aplicar. |
calculationMethod | Recomendado | DDP (el comprador prepaga) o DDU (el comprador paga en la entrega). Use DDP para prepago. Determina si LandedCost.amountSubtotals incluye aranceles/impuestos. |
currencyCode | Opcional | Moneda en la que se devuelven los subtotales de Landed Cost. |
arrivalDate | Opcional | Las 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:
| Campo↕ | Estado↕ | Notas↕ |
|---|---|---|
serviceLevel | Obligatorio para la etiqueta | El servicio de Japan Post con el que enviar (p. ej., japan_post.air.ems_merchandise). Debe ser un nivel de servicio japan_post.*. |
generateLabel | Opcional | Valor predeterminado true; debe ser true para devolver una etiqueta. |
contentsType | Recomendado | SALE_OF_GOODS, GIFT, DOCUMENTS, SAMPLE, etc. Determina el tratamiento aduanero. |
nonDelivery | Opcional | Qué debe hacer el transportista si falla la entrega: RETURN, ABANDON, FORWARD. |
references | Opcional | Números de referencia proporcionados por el comerciante impresos en la etiqueta y la factura comercial. Consulte a continuación. |
declaredValue / isDeclaredValue | Opcional | Valor del seguro del envío. |
shipmentConsolidationId | Opcional | Se 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.
| Campo↕ | Estado↕ | Notas↕ | Longitud↕ |
|---|---|---|---|
invoiceNumber | Opcional | Número de factura del comerciante. | — |
purchaseOrderNumber | Opcional | Número de PO del comerciante. | — |
licenseNumber | Opcional | Número de licencia de exportación/importación. | — |
certificateNumber | Opcional | Número de certificado aduanero. | — |
paymentConditions | Opcional | Condiciones de pago en texto libre mostradas en la factura comercial. | Límite de 200 caracteres — valores más largos desbordan la factura impresa. |
customsRemarks | Opcional | Observaciones aduaneras en texto libre. | — |
taxCode | Opcional | Có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):
| Campo↕ | Devuelve↕ | Usar cuando↕ |
|---|---|---|
url | Un 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. |
labelImage | La 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
errorsy 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
- Despacho por lotes (consolidación) — agrupe los paquetes del día en un comprobante de despacho de Japan Post con pago diferido.
Crear un envío individual
El flujo GraphQL
CreateDeclarationShipmentlleva un envío de Japan Post desde los datos de entrada hasta una etiqueta imprimible en una sola solicitud.CreateDeclarationShipmentencadena seis mutaciones*Workflowen 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:Las mutaciones
Workflowestá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 elShipmentfinal.Cuando el
serviceLeveldel 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 finalshipmentCreateWorkflow.