Modelos de respuesta de la API de productos
Con response_format: "standard" (predeterminado), los endpoints de producto devuelven los tipos siguientes. TypeScript canónico: packages/shared/src/products.ts.
Endpoints: detalle · búsqueda · búsqueda por imagen · parse
Envoltorio de respuesta {#envelope}
| Endpoint | Forma |
|---|---|
detail, parse | { product: StandardProductDetail, request_id } |
search, search-by-image | StandardProductList & { request_id } |
upload-image | { channel, image_id, request_id } |
StandardProductDetail {#standard-product-detail}
Snapshot completo de producto para páginas de producto y checkout. Mapea a pedidos: search/detail id → lines[].id (offer_id / Taobao mi_id still accepted), variants[].sku_id → spec_id (Pedidos de compra).
Identidad y canal
| Campo | Tipo | Descripción |
|---|---|---|
id | string | Taobao = mi_id (lines[].id de pedido; cambia periódicamente — no cachear a largo plazo). 1688 = offerId. Weidian actualmente prod_weidian_{source_product_id} |
channel | string | 1688, taobao o weidian |
source_product_id | string | 1688 = offerId (same as id); Taobao = original item_id |
source_url | string | URL canónica de la página de producto |
Texto localizado (title, description)
| Campo | Tipo | Descripción |
|---|---|---|
original | string | Texto del marketplace (normalmente chino) |
translated | string | null | Traducción para el language solicitado |
language | string | Locale de translated |
description | object | null | Detalle largo (a menudo HTML) |
Precios (price, price_tiers[])
Todos los importes son yuanes CNY (no fen). Prefiere promotion_amount cuando esté definido; en caso contrario, display_amount.
| Campo | Tipo | Descripción |
|---|---|---|
price.original_amount | number | Precio de lista antes de promociones |
price.display_amount | number | Precio visible para el comprador (CNY) |
price.promotion_amount | number | null | Precio unitario promocional cuando aplique |
price.original_currency / display_currency | string | Siempre CNY |
price_tiers[] | array | Tramos mayoristas de 1688 (ofertas nuevas desde ≥2); vacío en Taobao |
min_order_quantity | number | null | MOQ de 1688 |
distribution_min_quantity | number | null | Mínimo dropship de 1688 |
Medios (images[], videos)
| Campo | Tipo | Descripción |
|---|---|---|
images[].url | string | URL CDN de imagen |
images[].type | enum | main, gallery o variant |
videos.main / videos.detail | string | null | Videos de 1688; Taobao null |
Atributos frente a variantes
Solo variants[] controla la selección de SKU y las líneas de pedido.
| Campo | Rol |
|---|---|
attributes[] | Especificaciones CPV: solo visualización, no para resolución de SKU |
variants[] | Matriz de SKU comprable con precio, stock y especificaciones |
Objeto de variante (variants[])
| Campo | Tipo | Descripción |
|---|---|---|
sku_id | string | Pásalo como spec_id al crear el pedido |
upstream_sku_id | string | null | skuId numérico de 1688 |
attributes[] | array | Dimensiones de especificación (color, talla, …) |
attributes[].name / value | string | Etiquetas de visualización (localizadas según language) |
attributes[].original_name / original_value | string | Claves chinas estables para agrupar / coincidir |
attributes[].prop_id | string | null | ID de propiedad upstream como string (Taobao prop_id; 1688 attributeId). Preferir sobre el texto del nombre |
attributes[].value_id | string | null | ID de valor upstream como string (Taobao value_id). 1688 sin valueId → null |
attributes[].image | string | null | Imagen de la opción / swatch |
price | object | Precio a nivel SKU en yuanes |
stock | number | Cantidad disponible; 0 = sin stock |
image | string | null | Imagen principal del SKU |
shipping | object | null | Dimensiones de paquete SKU 1688 (tabla abajo); Taobao null |
min_order_quantity | number | null | MOQ 1688 (valor a nivel de producto en cada SKU) |
distribution | object | null | Precios dropship de 1688 |
Dimensiones de paquete SKU (variants[].shipping)
Mapeado desde el upstream 1688 productShippingInfo.skuShippingDetails (SkuShippingDetail). Taobao no tiene equivalente — siempre null. Valores vacíos o 0 se normalizan a null; sin datos, shipping es null.
| Campo | Tipo | Descripción |
|---|---|---|
width_cm | number | null | Ancho, cm (declarado por el vendedor) |
length_cm | number | null | Largo, cm |
height_cm | number | null | Alto, cm |
weight_kg | number | null | Peso, kg |
official_width_cm | number | null | Ancho medido oficial, cm |
official_length_cm | number | null | Largo medido oficial, cm |
official_height_cm | number | null | Alto medido oficial, cm |
official_weight_kg | number | null | Peso medido oficial, kg |
ai_weight_kg | number | null | Peso predicho por IA, kg |
ai_weight_accuracy | string | null | Precisión del peso IA en la categoría hoja (p. ej. 80%) |
source | string | null | Origen de las dimensiones (p. ej. 商家自填) |
Para estimar flete, prioriza official_*, luego lo declarado por el vendedor, luego ai_weight_kg (con ai_weight_accuracy como pista de confianza).
Vendedor, envío y metadatos
| Campo | Tipo | Descripción |
|---|---|---|
seller.id / seller.name | string | Id de tienda y nombre mostrado |
seller.shop_url | string | null | Enlace a la tienda |
shipping.shipping_from | string | null | Región de despacho nacional |
shipping.domestic_shipping_fee | object | null | Tarifa nacional estimada en yuanes |
metadata.raw_category | string | null | Categoría upstream |
metadata.brand | string | null | Marca declarada |
metadata.updated_at | string | Última sincronización ISO 8601 |
trade_score | string | null | Puntuación de calidad de 1688 |
Ejemplo (truncado)
{
"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_..."
}Disponibilidad de campos por canal
| Campo | 1688 | Taobao | Weidian |
|---|---|---|---|
videos, price_tiers, trade_score | ✓ | — | Varía |
variants[].shipping, distribution | ✓ | — | — |
variants[].attributes[].prop_id | ✓ (attributeId) | ✓ (prop_id) | — |
variants[].attributes[].value_id | — (null) | ✓ (value_id) | — |
source_product_id para pedidos | offerId | mi_id | Id de plataforma |
StandardProductList {#standard-product-list}
Desde búsqueda y búsqueda por imagen. Cada entrada items[] es un resumen; llama a detail para la matriz SKU.
| Campo | Tipo | Descripción |
|---|---|---|
channel | string | Marketplace consultado |
keyword | string | Eco de la palabra clave (vacío para búsqueda solo por imagen) |
page / page_size | number | Paginación aplicada |
total | number | Total upstream (puede ser aproximado) |
items[] | array | Objetos StandardProductListItem |
pic_region_info | object | Búsqueda por imagen: región de recorte detectada |
StandardProductListItem
| Campo | Tipo | Descripción |
|---|---|---|
id, channel, source_product_id, source_url | string | Usa source_product_id para obtener detalle |
title | LocalizedTitle | Título del listado |
price | ProductPrice | Precio resumido en yuanes CNY |
image | string | URL de miniatura |
seller.name | string | Nombre de tienda |
Respuesta upload-image {#upload-image-response}
| Campo | Tipo | Descripción |
|---|---|---|
channel | string | Marketplace que almacenó la imagen |
image_id | string | Reutilizar en búsqueda por imagen |
Selección de variantes {#variant-selection}
- Carga detalle → lee
product.variants. - Agrupa por
attributes[].original_namepara selectores de dimensión (o porprop_idsi está presente). - Filtra variantes según cada elección del usuario; deshabilita opciones sin stock.
- Pasa el
sku_idysource_product_idcoincidentes a order preview.
Claves de coincidencia: en Taobao, prioriza prop_id + value_id cuando existan (identidades CPV estables; evitan cruces cuando muchas SKU comparten el mismo nombre de atributo). Para agrupar en UI, usa original_name + original_value. name / value solo para mostrar. No infieras tipos semánticos a partir de las etiquetas.
{
"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/..."
}En 1688 se usa la misma forma: prop_id ← attributeId y value_id: null (SkuAttribute upstream no tiene valueId).
Get Support
Need integration help? Contact Developer Support at support@hiobuy.com · Response within 1–2 business days