Shipping channels API

GET /v1/fulfillment/shipping/channels lists the active, price-configured international shipping channels available through the warehouse connected to your app.

Use this endpoint to build a channel selector or inspect capabilities. For destination-specific availability and amounts, call Shipping quotes. Rate cards here only explain the pricing model — they never lock a price.

GEThttps://open.hiobuy.com/v1/fulfillment/shipping/channels

Requires warehouse fulfillment. A sandbox app with an hio_test_* key receives deterministic mock data.

Quotes are budgets, not locked prices. Warehouse weighing, volume measurement, re-packing, and service review can change the final amount.

Money and units {#units}

  • All money amount values are integer CNY fen (minor units). 1000 means ¥10.00.
  • Top-level monetary_unit is always CNY_minor.
  • Money objects use:
{
  "amount": 1000,
  "currency": "CNY"
}
  • KG = kilogram, CM = centimeter, M3 = cubic meter, KG_PER_M3 = kilogram per cubic meter.
  • Identify channels, regions, and services by stable code, not name.
  • The Public API does not expose warehouse database IDs, developer codes, or supplier URLs.

Request {#request}

GET /v1/fulfillment/shipping/channels?country_code=US&include=regions,services,rate_cards&page=1&page_size=20
Authorization: Bearer hio_live_xxx
Language: en

Display language is the Language header only. Supported values: en (default), en-US, zh, zh-CN, zh-TW, cn, hk. Do not put language in the query string or JSON body.

Query parameters

ParameterRequiredDefaultDescription
channel_codeNoExact stable channel code (max 64 characters)
country_codeNoISO 3166-1 alpha-2 destination country
includeNoComma-separated expansions: regions, services, rate_cards
pageNo1Page number, starting at 1
page_sizeNo20Items per page; maximum 50

include expansions

Omit include for a lightweight channel summary.

include valueResponse fieldUse when
regionsregionsCoverage, match type, and reference transit time
servicesvalue_added_servicesChannel value-added services for quotes
rate_cardsrate_cardsReference price rows that explain the billing model

You may combine values, for example include=regions,services,rate_cards. An unknown value returns 400 VALIDATION_ERROR.

rate_cards are reference_only. They must not replace POST /v1/fulfillment/shipping/quotes. Only include=rate_cards asks the warehouse for price rows.

Only channels that are enabled and have a valid price configuration are returned. An empty items array means no catalog channel matches the current filters.

Response {#response}

{
  "items": [
    {
      "code": "US-SEA",
      "name": "US Ocean",
      "description": "General cargo line",
      "status": "ACTIVE",
      "tags": [
        "GREAT_VALUE"
      ],
      "warehouse": {
        "code": "SZ",
        "name": "Shenzhen Warehouse"
      },
      "capabilities": {
        "delivery_methods": [
          "DOOR_DELIVERY"
        ],
        "multi_package_supported": true,
        "tracking_supported": true,
        "shipping_label_supported": false
      },
      "requirements": {
        "weight": "REQUIRED",
        "dimensions": "CONDITIONAL",
        "postal_code": "OPTIONAL",
        "declared_value": "OPTIONAL",
        "customs_code": "OPTIONAL",
        "personal_customs_code": "OPTIONAL",
        "recipient_identity": "OPTIONAL"
      },
      "attribute_matching": {
        "mode": "ANY_OF",
        "accepted_attributes": [
          {
            "code": "GENERAL",
            "name": "General cargo"
          }
        ]
      },
      "billing": {
        "basis": "WEIGHT",
        "calculation_model": "FIRST_NEXT_WEIGHT",
        "quantity_unit": "KG",
        "supported_range": {
          "minimum": {
            "value": 0.5,
            "unit": "KG"
          },
          "maximum": {
            "value": 30,
            "unit": "KG"
          },
          "out_of_range_behavior": "UNAVAILABLE"
        },
        "minimum": {
          "value": 0.5,
          "unit": "KG",
          "ceil_to_minimum": true
        },
        "rounding": {
          "single_package_step": {
            "value": 0.5,
            "unit": "KG"
          },
          "multi_package_step": {
            "value": 0.5,
            "unit": "KG"
          },
          "ignore_below": {
            "value": 0.05,
            "unit": "KG"
          }
        },
        "multi_package": {
          "mode": "PER_BOX",
          "calculation_scope": "PER_PACKAGE",
          "aggregation": "SUM_PACKAGE_CHARGES",
          "minimum_per_package": {
            "value": 0.5,
            "unit": "KG"
          },
          "minimum_total": {
            "value": 0,
            "unit": "KG"
          }
        },
        "volumetric_weight": {
          "enabled": true,
          "divisor": 6000,
          "average_with_actual": false,
          "exemption": null
        },
        "overweight_warning": {
          "enabled": false,
          "threshold": {
            "value": 0,
            "unit": "KG"
          },
          "notice": null
        }
      },
      "rule_summary": {
        "fee_aggregation": "SUM_ALL",
        "maximum_charge": {
          "amount": 0,
          "currency": "CNY"
        },
        "has_surcharges": true,
        "has_order_restrictions": false,
        "has_dispatch_restrictions": true,
        "evaluated_by_quote": true
      },
      "regions": [
        {
          "code": "US-WEST",
          "name": "US West",
          "status": "ACTIVE",
          "match_type": "COUNTRY_REGION",
          "countries": [
            "US"
          ],
          "postal_code_required": false,
          "reference_transit_time": {
            "text": "15-18 business days",
            "min_business_days": 15,
            "max_business_days": 18
          },
          "areas": []
        }
      ],
      "value_added_services": [
        {
          "code": "LINE_FUEL",
          "name": "Fuel surcharge",
          "request_mode": "MANDATORY",
          "pricing_type": "CALCULATED",
          "pricing_scope": "REGION",
          "pricing_basis": "BASE_FREIGHT_PERCENT",
          "region_prices": [
            {
              "region_code": "US-WEST",
              "value": 500,
              "value_unit": "BASIS_POINT",
              "fixed_charge": {
                "amount": 200,
                "currency": "CNY"
              }
            }
          ],
          "final_quote_required": true,
          "may_be_adjusted": true
        }
      ],
      "rate_cards": [
        {
          "region_code": "US-WEST",
          "billing_basis": "WEIGHT",
          "calculation_model": "FIRST_NEXT_WEIGHT",
          "quantity_unit": "KG",
          "currency": "CNY",
          "reference_only": true,
          "price_rows": [
            {
              "type": "FIRST_WEIGHT",
              "pricing_basis": "WEIGHT",
              "range": {
                "minimum": 0.5,
                "maximum": 0.5,
                "unit": "KG",
                "minimum_inclusive": true,
                "maximum_inclusive": false
              },
              "first_quantity": {
                "value": 0,
                "unit": "KG"
              },
              "step": {
                "value": 0,
                "unit": "KG"
              },
              "charge": {
                "amount": 8000,
                "currency": "CNY"
              }
            }
          ]
        }
      ],
      "service_policy": {
        "warehouse_may_add_services": true,
        "warehouse_may_remove_services": true,
        "prices_may_change_after_inspection": true
      },
      "final_quote_required": true,
      "config_updated_at": "2026-09-07T08:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "page_size": 20,
    "total": 1,
    "has_more": false
  },
  "monetary_unit": "CNY_minor",
  "generated_at": "2026-09-07T09:00:00Z",
  "request_id": "req_xxx"
}

regions, value_added_services, and rate_cards appear only when the matching include value is sent.

Response fields {#fields}

FieldDescription
items[]Matching channels. Empty when no catalog channel matches the filters.
items[].codeStable channel code. Use this in quotes channel_codes and shipment create.
items[].nameLocalized display name (Language header).
items[].descriptionLocalized description.
items[].statusCatalog status. Returned channels are ACTIVE.
items[].tagsStable tags such as GREAT_VALUE.
items[].warehouseBound warehouse { code, name }. Not a database ID.
items[].capabilitiesDelivery methods, multi-package, tracking, and label support.
items[].requirementsInput completeness hints: REQUIRED · OPTIONAL · CONDITIONAL · NOT_SUPPORTED.
items[].attribute_matchingANY_OF or ALL_REQUIRED plus accepted_attributes[].code.
items[].billingHow the channel prices a shipment. See below.
items[].rule_summaryWhether surcharges or restrictions exist; quotes evaluate the rules.
items[].regionsPresent with include=regions.
items[].value_added_servicesPresent with include=services.
items[].rate_cardsPresent with include=rate_cards. Always reference_only.
items[].service_policyWarehouse may add/remove services and change prices after inspection.
items[].final_quote_requiredtrue when a shipment-specific quote is still required.
items[].config_updated_atCatalog revision time for this channel.
paginationpage, page_size, total, has_more.
monetary_unitAlways CNY_minor.
generated_atResponse timestamp (ISO 8601).
request_idCorrelate with x-request-id.

Billing {#billing}

FieldMeaning
basisWEIGHT, VOLUME, or DENSITY
calculation_modelPricing model used by the rate rows
quantity_unitKG, M3, or KG_PER_M3
supported_rangeMinimum and maximum billable quantity
supported_range.out_of_range_behaviorUNAVAILABLE — the channel cannot carry a parcel outside the range. Do not extrapolate.
minimumMinimum billable quantity and whether smaller values round up (ceil_to_minimum)
roundingSingle-package and multi-package rounding steps
volumetric_weightVolumetric divisor and exemption rule
multi_packagePer-package vs combined billing and aggregation
overweight_warningOptional overweight notice

Calculation models may include FIRST_NEXT_WEIGHT, TIERED_PRICE, UNIT_PRICE_PLUS_GRADE, MULTI_LEVEL_NEXT_WEIGHT, and RANGE_FIRST_NEXT_WEIGHT. Do not re-implement the warehouse pricing engine from these rows.

Regions {#regions}

FieldMeaning
code / nameStable region code and localized name
match_typeCOUNTRY_REGION or POSTAL_CODE
countriesISO country codes covered by this region
postal_code_requiredWhen true, send postal_code to quotes
reference_transit_timeDisplay text plus optional min/max business days
areasOptional finer-grained area list. The catalog does not expose the full postal-rule database.

Value-added services {#value-added-services}

Use value_added_services[].code in services.channel[] on Shipping quotes.

FieldMeaning
codeStable service code
request_modeMANDATORY (always applied) or OPTIONAL (developer-selected)
pricing_typeFixed price vs calculated (for example CALCULATED)
pricing_scopeWhere the price applies (for example REGION)
pricing_basisHow the charge is computed

BASIS_POINT is a percentage basis point: 500 means 5%. The warehouse may add, remove, or adjust services during processing — see service_policy and may_be_adjusted.

Rate cards {#rate-cards}

FieldMeaning
region_codeRegion this card belongs to
billing_basisSame vocabulary as billing.basis
calculation_modelSame vocabulary as billing.calculation_model
quantity_unitKG, M3, or KG_PER_M3
price_rowsReference bands used to explain the model
reference_onlyAlways true — not a live quote

Caching {#caching}

config_updated_at changes when channel details, regions, rate cards, rules, or services change. Cache the lightweight catalog briefly, refetch expansions when this timestamp changes, and always call Shipping quotes before creating a shipment. There is no locked pricing version.

Errors {#errors}

Channel-specific ineligibility is not an HTTP error. An empty items array is a successful catalog miss.

HTTPerror.codeWhen
400VALIDATION_ERRORInvalid pagination, country syntax, or include value
401INVALID_API_KEYMissing or invalid Bearer token
400INVALID_SHIPPING_CHANNELReserved for quote/shipment calls that name an unknown channel. This list simply returns an empty items array.
403FULFILLMENT_MODE_NOT_SUPPORTEDApp uses self fulfillment
403WAREHOUSE_AUTH_INVALIDWarehouse authorization is missing, rejected, or expired
422INVALID_COUNTRY_CODEDestination country is invalid or unsupported
502WAREHOUSE_UPSTREAM_ERRORWarehouse service failed; retry with backoff

There is no distinct public AUTHENTICATION_ERROR, WAREHOUSE_AUTH_REQUIRED, or WAREHOUSE_SERVICE_UNAVAILABLE code. Auth failures use 401 INVALID_API_KEY; missing warehouse bind uses 403 WAREHOUSE_AUTH_INVALID; warehouse outages use 502 WAREHOUSE_UPSTREAM_ERROR.

See Errors and Authentication.

Examples {#examples}

Lightweight catalog:

curl "https://api.hiobuy.com/v1/fulfillment/shipping/channels?page=1&page_size=20" \
  -H "Authorization: Bearer hio_live_xxx" \
  -H "Language: en"

Channels that can serve the United States, including reference pricing:

curl "https://api.hiobuy.com/v1/fulfillment/shipping/channels?country_code=US&include=regions,services,rate_cards" \
  -H "Authorization: Bearer hio_live_xxx" \
  -H "Language: zh-CN"

Next: request a destination-specific shipping quote.

Get Support

Need integration help? Contact Developer Support at support@hiobuy.com · Response within 1–2 business days

Email support