Get API key
v1.0 · Public GA·2026-05-28

Build with Merdi Express.

One REST API connecting Hong Kong 3PLs to Far East destinations. Tracking, shipments, signed webhooks. Same key shape from sandbox to live — no fork in your code path.

10 endpoints 100 req/s · 10k/day snake_case · ISO-8601 99.95% SLO
curl https://merdiexpress.com/api/v1/shipments \
  -H "Authorization: Bearer mk_test_rh9ABekJfP31cN7sQ8jKvLwY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "service_tier_id": "HKASTDGGSTCM",
    "recipient": {
      "contact_name": "John Doe", "phone": "+14155551234",
      "country_code": "US", "city": "San Francisco",
      "district": "CA", "address": "1 Hacker Way",
      "postal_code": "94025"
    },
    "parcels": [{ "weight_kg": 0.5, "length_cm": 22, "width_cm": 18, "height_cm": 6 }],
    "items": [{ "description": "Sample item", "quantity": 1, "unit_price_hkd": 100 }],
    "goods_category": "general",
    "payment_type": "prepaid",
    "reference_no": "po_2026_05_28_0017"
  }'
→ 201 Created142 ms
response
{
  "status": 201,
  "message": "Created",
  "data": {
    "id": "IM-2026-0528-9ZNCP3-1",
    "tracking_number": "IM-2026-0528-9ZNCP3-1",
    "status": "label_created",
    "service_tier_id": "HKASTDGGSTCM",
    "livemode": false,
    "created_at": "2026-05-28T07:44:23.908Z"
  }
}

Base URL

Every endpoint lives under https://merdiexpress.com/api/v1/ — path-based, no subdomain. Examples: GET /api/v1/shipments, POST /api/v1/webhooks.

Bearer auth

Scoped keys with env prefixes (mk_live_, mk_test_). One header, no OAuth dance — yet the same key never crosses environments.

Idempotent writes

Every POST accepts an Idempotency-Key. Retry safely for 24h — duplicate writes return the original response.

Signed webhooks

Every event is HMAC-SHA256 signed on the X-Merdi-Signature header. Auto-retry with exponential backoff for 24h.

60-second quickstart

From zero to your first tracking number.

Fire one POST against sandbox. The returned tracking number is immediately retrievable from /v1/tracking with a simulated checkpoint feed advancing on a 90-second clock.

terminal · sandbox
# 1. Set your sandbox key
export MERDI_KEY="mk_test_rh9ABekJfP31cN7sQ8jKvLwY"

# 2. Create a shipment
curl https://merdiexpress.com/api/v1/shipments \
  -H "Authorization: Bearer $MERDI_KEY" \
  -H "Idempotency-Key: 5f3c-quick-start" \
  -H "Content-Type: application/json" \
  -d '{
    "service_tier_id": "HKASTDGGSTCM",
    "recipient": {
      "contact_name": "John Doe", "phone": "+14155551234",
      "country_code": "US", "city": "San Francisco",
      "district": "CA", "address": "1 Hacker Way",
      "postal_code": "94025"
    },
    "parcels": [{ "weight_kg": 0.5 }],
    "items": [{ "description": "Sample item", "quantity": 1, "unit_price_hkd": 100 }],
    "goods_category": "general", "payment_type": "prepaid"
  }'

# → "tracking_number": "IM-2026-..."

# 3. Watch it progress
curl https://merdiexpress.com/api/v1/tracking/IM-2026-... \
  -H "Authorization: Bearer $MERDI_KEY"
Explore the API

Ten endpoints. Three resource groups.

Shipments, tracking, webhooks. Each endpoint ships with a live try-it console and copy-pasteable samples.