Product API response models

With response_format: "standard" (default), product endpoints return the types below. Canonical TypeScript: packages/shared/src/products.ts.

Endpoints: detail · search · image search · parse

Monetary units {#monetary-units}

Scopemonetary_unitamount meaning
Catalog (detail, search, parse, …)CNY_major (yuan) — documented convention; field not yet required on every responseList/display prices in yuan
POST /v1/products/freight/estimateCNY_minor on response envelopeDomestic freight in fen, same as order preview

Response envelope {#envelope}

EndpointShape
detail, parse{ product: StandardProductDetail, request_id }
search, search-by-imageStandardProductList & { request_id }
upload-image{ channel, image_id, request_id }

StandardProductDetail {#standard-product-detail}

Full product snapshot for product pages and checkout. Map to orders: search/detail idlines[].id (offer_id / Taobao mi_id still accepted); variants[].sku_idspec_id (Procurement orders).

Identity & channel

FieldTypeDescription
idstringTaobao = mi_id (pass to order lines[].id; rotates periodically — do not cache long-term). 1688 = offerId. Weidian currently uses prod_weidian_{source_product_id}
channelstring1688, taobao, or weidian
source_product_idstring1688 = offerId; Taobao = original item_id
source_urlstringCanonical product page URL

Localized text (title, description)

FieldTypeDescription
originalstringMarketplace text (typically Chinese)
translatedstring | nullTranslation for requested language
languagestringLocale of translated
descriptionobject | nullLong-form detail (often HTML)

Pricing (price, price_tiers[])

All amounts CNY yuan (not fen). Prefer promotion_amount when set, else display_amount.

FieldTypeDescription
price.original_amountnumber1-piece list price (1688 retailPrice when set)
price.display_amountnumberBuyer-facing 1-piece price (CNY)
price.promotion_amountnumber | nullPromotional unit price when applicable
price.original_currency / display_currencystringAlways CNY
variants[].price.wholesale_amountnumber | null1688 SKU wholesale (≥2 pcs) when retailPrice exists
price_tiers[]array1688 wholesale breaks (new offers start at ≥2); empty on Taobao
min_order_quantitynumber | null1688 MOQ from upstream; Taobao defaults to 1 (retail)
distribution_min_quantitynumber | null1688 dropship minimum

Media (images[], videos)

FieldTypeDescription
images[].urlstringImage CDN URL
images[].typeenummain, gallery, or variant
videos.main / videos.detailstring | null1688 videos; Taobao null

Attributes vs variants

Only variants[] drives SKU selection and order lines.

FieldRole
attributes[]CPV specs — display only, not for SKU resolution
variants[]Purchasable SKU matrix with price, stock, specs

Variant object (variants[])

FieldTypeDescription
sku_idstringPass as spec_id on order create
upstream_sku_idstring | null1688 numeric skuId
attributes[]arraySpec dimensions (color, size, …)
attributes[].name / valuestringDisplay labels (localized when language is set)
attributes[].original_name / original_valuestringStable Chinese keys for grouping / matching
attributes[].prop_idstring | nullUpstream property id as string (Taobao prop_id; 1688 attributeId). Prefer this over name text when present
attributes[].value_idstring | nullUpstream value id as string (Taobao value_id). 1688 has no value id → null
attributes[].imagestring | nullSpec swatch / option image
priceobjectSKU-level price in yuan
stocknumberAvailable qty; 0 = out of stock
imagestring | nullSKU primary image
shippingobject | null1688 SKU package dimensions (table below); Taobao null
min_order_quantitynumber | null1688 MOQ on each SKU; Taobao defaults to 1
distributionobject | null1688 dropship pricing

SKU package dimensions (variants[].shipping)

Mapped from 1688 upstream productShippingInfo.skuShippingDetails (SkuShippingDetail). Taobao has no equivalent — always null. Empty or 0 size/weight values normalize to null; if a SKU has no dimension data at all, shipping itself is null.

FieldTypeDescription
width_cmnumber | nullWidth, cm (merchant-declared)
length_cmnumber | nullLength, cm
height_cmnumber | nullHeight, cm
weight_kgnumber | nullWeight, kg
official_width_cmnumber | nullOfficial measured width, cm
official_length_cmnumber | nullOfficial measured length, cm
official_height_cmnumber | nullOfficial measured height, cm
official_weight_kgnumber | nullOfficial measured weight, kg
ai_weight_kgnumber | nullAI-predicted weight, kg
ai_weight_accuracystring | nullAI weight accuracy for the product’s leaf category (e.g. 80%)
sourcestring | nullDimension source (e.g. 商家自填)

For freight estimates, prefer official_*, then merchant-declared size/weight, then ai_weight_kg (with ai_weight_accuracy as a confidence hint).

Seller, shipping & metadata

FieldTypeDescription
seller.id / seller.namestringShop id and display name
seller.shop_urlstring | nullStorefront link
shipping.shipping_fromstring | nullDomestic dispatch region
shipping.domestic_shipping_feeobject | nullEstimated domestic fee in yuan
metadata.raw_categorystring | nullUpstream category
metadata.brandstring | nullDeclared brand
metadata.updated_atstringISO 8601 last sync
trade_scorestring | null1688 quality score

Example (truncated)

{
  "product": {
    "id": "554456348334",
    "channel": "1688",
    "source_product_id": "554456348334",
    "title": {
      "original": "...",
      "translated": "...",
      "language": "en"
    },
    "price": {
      "display_amount": 29.9,
      "promotion_amount": 24.9
    },
    "variants": [
      {
        "sku_id": "b266e0...",
        "upstream_sku_id": "12123313",
        "stock": 100,
        "shipping": {
          "width_cm": 10,
          "length_cm": 10,
          "height_cm": 10,
          "weight_kg": 1.2,
          "official_width_cm": 5,
          "official_length_cm": 12,
          "official_height_cm": 14,
          "official_weight_kg": 0.001,
          "ai_weight_kg": 0.001,
          "ai_weight_accuracy": "80%",
          "source": "商家自填"
        }
      }
    ]
  },
  "request_id": "req_..."
}

Channel field availability

Field1688TaobaoWeidian
videos, price_tiers, trade_scoreVaries
variants[].shipping, distribution
variants[].attributes[].prop_id✓ (attributeId)✓ (prop_id)
variants[].attributes[].value_id— (null)✓ (value_id)
Order lines[].idid / offerIdid (mi_id)Platform id

StandardProductList {#standard-product-list}

From search and image search. Each items[] entry is a summary — call detail for SKU matrix.

FieldTypeDescription
channelstringMarketplace queried
keywordstringEcho of keyword (empty for pure image search)
page / page_sizenumberPagination applied
totalnumberUpstream total (may be approximate)
items[]arrayStandardProductListItem objects
pic_region_infoobjectImage search: detected crop region

StandardProductListItem

FieldTypeDescription
id, channel, source_product_id, source_urlstringUse source_product_id to fetch detail
titleLocalizedTitleListing title
priceProductPriceSummary price in CNY yuan
imagestringThumbnail URL
seller.namestringShop name

Upload-image response {#upload-image-response}

FieldTypeDescription
channelstringMarketplace that stored the image
image_idstringReuse in image search

Variant selection {#variant-selection}

  1. Load detail → read product.variants.
  2. Group by attributes[].original_name for dimension pickers (or by prop_id when present).
  3. Filter variants on each user choice; disable out-of-stock options.
  4. Pass matching sku_id and source_product_id to order preview.

Matching keys: prefer prop_id + value_id (Taobao) when both are set — they are stable CPV identities and avoid cross-SKU name collisions (e.g. many options sharing Color Classification). Fall back to original_name + original_value for UI grouping. Use name / value for display only. Do not infer semantic types from labels.

{
  "prop_id": "1627207",
  "value_id": "43553464153",
  "name": "Color Classification",
  "value": "[Special for Bicycle Maintenance] Professional 46-Piece Set",
  "original_name": "颜色分类",
  "original_value": "【自行车维修专用】专业46件套",
  "image": "https://img.alicdn.com/..."
}

On 1688 the same shape is used with prop_id from attributeId and value_id: null (upstream SkuAttribute has no value id).

Get Support

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

Email support