Hanzo

Fulfillment Module

Shipping profiles, zones, providers, and tracking

The Fulfillment module manages shipping configuration, rate calculation, provider integration, and shipment tracking.

Key Concepts

  • Shipping Profile -- a set of rules mapping products to shipping options (e.g. "standard goods", "fragile items")
  • Shipping Zone -- a geographic region (country/state) with its own rates
  • Fulfillment Provider -- an external service that handles physical delivery (e.g. FedEx, UPS, manual)
  • Shipment -- a tracking record created when items are dispatched

Data Model

{
  "id": "ship_abc123",
  "orderId": "order_xyz789",
  "provider": "fedex",
  "status": "shipped",
  "trackingNumber": "794644790132",
  "trackingUrl": "https://www.fedex.com/track?trknbr=794644790132",
  "items": [
    { "variantId": "var_001", "quantity": 2 }
  ],
  "shippedAt": "2025-01-16T14:00:00Z",
  "estimatedDelivery": "2025-01-19T18:00:00Z"
}

Shipping Profiles

Define how products ship:

curl -X POST https://api.hanzo.ai/shipping-profile \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Standard Goods",
    "type": "default",
    "zones": [
      {
        "name": "Domestic US",
        "countries": ["US"],
        "rates": [
          {"name": "Standard", "price": 799, "minDeliveryDays": 5, "maxDeliveryDays": 7},
          {"name": "Express", "price": 1499, "minDeliveryDays": 2, "maxDeliveryDays": 3}
        ]
      },
      {
        "name": "International",
        "countries": ["*"],
        "rates": [
          {"name": "International Standard", "price": 2499, "minDeliveryDays": 10, "maxDeliveryDays": 21}
        ]
      }
    ]
  }'

Create a Shipment

curl -X POST https://api.hanzo.ai/order/order_xyz789/fulfillment \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "fedex",
    "trackingNumber": "794644790132",
    "items": [{"variantId": "var_001", "quantity": 2}]
  }'

Supported Providers

ProviderFeatures
ManualAdmin marks as shipped with tracking number
FedExLive rates, label generation, tracking
UPSLive rates, label generation, tracking
USPSDomestic US rates and tracking
DHLInternational shipping

Configuration

fulfillment:
  providers:
    fedex:
      enabled: true
      account_number: ${FEDEX_ACCOUNT}
      api_key: ${FEDEX_API_KEY}
    manual:
      enabled: true  # always available as fallback
  default_profile: "standard"
  require_tracking: false
  auto_notify_customer: true  # send email on shipment creation

Events

EventDescription
fulfillment.createdShipment created
fulfillment.shippedTracking shows in transit
fulfillment.deliveredDelivery confirmed
fulfillment.failedDelivery failed or returned to sender

How is this guide?

On this page