Skip to content

Get Shipping Label ZPL

API Overview

Returns the shipping label for a parcel as a ZPL (Zebra Programming Language) string. Send the response string directly to a ZPL-compatible thermal printer without requiring a PDF renderer or driver.

Request Information

  • Method: GET
  • Path: /openapi/order-shipping-label/get-shipping-label-zpl
  • Authentication: Standard OpenAPI token (MD5-based)

Request Headers

FieldDescription
Content-Typeapplication/json
x-auth-name$API_NAME
x-auth-seed$SEED (13-digit millisecond Unix timestamp)
x-auth-token$TOKEN (MD5 hash)

Request Parameters

ParameterTypeRequiredDescription
tracking_numstringYesWMG parcel tracking number

Token Generation Example

The authentication token is computed from your credentials and seed only -- request parameters are not included.

seed  = "1746700000000"   (13-digit ms timestamp)
token = md5( strtolower(api_name) + api_key + seed )

Authentication

This endpoint uses Standard OpenAPI Authentication (MD5 token).

For complete authentication instructions and code examples, see Authentication Guide.

Response Information

The response is in JSON format.

Response Format

FieldTypeDescription
codeintegerResult code. 0 = success, 1 = failure
messagestringResult description
dataobjectResponse payload

Success Response

  • Status Code: 200
  • Response Body:
json
{
    "code": 0,
    "message": "success",
    "data": {
        "zpl": "^XA^CF0,60^FO50,50^GB100,100,100^FS^XZ"
    }
}
FieldTypeDescription
data.zplstringFull ZPL label string. Send directly to a ZPL-compatible printer

Error Response

  • Status Code: 200 (business logic error) or 4xx/5xx (system error)
  • Response Body:
json
{
    "code": 1,
    "message": "Order Not Found!",
    "data": []
}

Common errors:

  • Authentication failure → code 1; the message depends on the cause (e.g. x-auth-token: INVALID, x-auth-seed: TIMEOUT) — see signature.md
  • Order not found -- code 1, message Order Not Found!

Code Reference

CodeDescription
0Success
1Failure

Example

Bash

bash
API_NAME="your_api_name"
API_KEY="your_api_key"
SEED=$(date +%s%3N)
TOKEN=$(printf '%s' "$(echo -n "$API_NAME" | tr '[:upper:]' '[:lower:]')${API_KEY}${SEED}" | md5sum | cut -d' ' -f1)

# Fetch ZPL and send to printer (replace /dev/usb/lp0 with your printer device)
curl -G "https://api.test.wmgdelivery.com/v1/openapi/order-shipping-label/get-shipping-label-zpl" \
  --data-urlencode "tracking_num=WMG1234567" \
  -H "x-auth-name: $API_NAME" \
  -H "x-auth-seed: $SEED" \
  -H "x-auth-token: $TOKEN" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['zpl'])"

Windows PowerShell

powershell
$API_NAME = "your_api_name"
$API_KEY  = "your_api_key"
$SEED     = [string]([DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds())

$raw   = [System.Text.Encoding]::UTF8.GetBytes($API_NAME.ToLower() + $API_KEY + $SEED)
$md5   = [System.Security.Cryptography.MD5]::Create().ComputeHash($raw)
$TOKEN = -join ($md5 | ForEach-Object { $_.ToString("x2") })

$headers = @{
    "x-auth-name"  = $API_NAME
    "x-auth-seed"  = $SEED
    "x-auth-token" = $TOKEN
}

$response = Invoke-RestMethod `
    -Uri "https://api.test.wmgdelivery.com/v1/openapi/order-shipping-label/get-shipping-label-zpl?tracking_num=WMG1234567" `
    -Method Get -Headers $headers

# Output ZPL string (pipe to printer as needed)
Write-Host $response.data.zpl

Python

python
import hashlib, time
import requests

API_NAME = 'your_api_name'
API_KEY  = 'your_api_key'
SEED     = str(int(time.time() * 1000))
TOKEN    = hashlib.md5((API_NAME.lower() + API_KEY + SEED).encode()).hexdigest()

headers = {
    'x-auth-name':  API_NAME,
    'x-auth-seed':  SEED,
    'x-auth-token': TOKEN,
}

resp = requests.get(
    'https://api.test.wmgdelivery.com/v1/openapi/order-shipping-label/get-shipping-label-zpl',
    params={'tracking_num': 'WMG1234567'},
    headers=headers,
)
data = resp.json()
if data['code'] == 0:
    print(data['data']['zpl'])  # Send to printer socket or device
else:
    print('Error:', data['message'])

Node.js / TypeScript

typescript
import crypto from 'node:crypto';

const API_NAME = 'your_api_name';
const API_KEY  = 'your_api_key';
const SEED     = String(Date.now());
const TOKEN    = crypto.createHash('md5').update(API_NAME.toLowerCase() + API_KEY + SEED).digest('hex');

const url = new URL('https://api.test.wmgdelivery.com/v1/openapi/order-shipping-label/get-shipping-label-zpl');
url.searchParams.set('tracking_num', 'WMG1234567');

const resp = await fetch(url.toString(), {
    headers: {
        'x-auth-name':  API_NAME,
        'x-auth-seed':  SEED,
        'x-auth-token': TOKEN,
    },
});
const data = await resp.json() as { code: number; data: { zpl: string } };
if (data.code === 0) {
    console.log(data.data.zpl); // Send to printer via socket or RAW port
}

PHP

php
<?php
$API_NAME = 'your_api_name';
$API_KEY  = 'your_api_key';
$SEED     = (string)(time() * 1000);
$TOKEN    = md5(strtolower($API_NAME) . $API_KEY . $SEED);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.test.wmgdelivery.com/v1/openapi/order-shipping-label/get-shipping-label-zpl?' . http_build_query(['tracking_num' => 'WMG1234567']));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'x-auth-name: '  . $API_NAME,
    'x-auth-seed: '  . $SEED,
    'x-auth-token: ' . $TOKEN,
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
if ($data['code'] === 0) {
    // Send ZPL to printer (e.g., via socket)
    echo $data['data']['zpl'] . "\n";
} else {
    echo 'Error: ' . $data['message'] . "\n";
}
?>

Notes

  • The data.zpl string can be sent directly to a ZPL-compatible thermal printer via a RAW TCP socket (typically port 9100) or a printer driver that accepts ZPL input.
  • The authentication token does not include request parameters; only credentials and seed are used.
  • The seed must be a 13-digit millisecond Unix timestamp and within ±10 minutes of server time.
  • All parameters are case-sensitive.

Error Codes

codemessageDescription
1Authentication error messageAuthentication failed; the returned message depends on the cause — see the full list in signature.md
1Order Not Found!No order exists for the given tracking_num under this client
1Underlying carrier API errorSurfaced when the label generation pipeline returns an error — message text comes from the carrier service