relatedProducts
Obtén productos relacionados a partir de un ID opaco de producto.
Última actualización:
relatedProducts devuelve recomendaciones visibles para el producto indicado. La búsqueda prioriza similitud y puede completar el resultado con productos de la misma categoría, marca o catálogo disponible.
Firma
relatedProducts(productId: String!, limit: Int): [ProductSummary!]!Argumentos
| Argumento | Tipo | Requerido | Predeterminado | Regla |
|---|---|---|---|---|
productId | String! | Sí | — | ID opaco válido de un producto. |
limit | Int | No | 8 | Entre 1 y 12. |
Obtén productId desde el campo id de product o products, almacénalo como string y reenvíalo sin parsearlo ni construirlo.
Si el producto de referencia no existe o no es visible en la tienda, la query devuelve una lista vacía.
Retorno
El resultado es una lista no nula de ProductSummary:
| Campo | Tipo | Descripción |
|---|---|---|
id | String! | ID opaco del producto relacionado. |
name | String! | Nombre publicado. |
slug | String! | Slug público. |
productType | String! | Tipo de producto. |
imageUrl | String! | Imagen principal. |
price | Decimal! | Precio actual. |
compareAtPrice | Decimal | Precio de comparación, cuando existe. |
variantCount | Int! | Número de variantes. |
isAvailable | Boolean! | Disponibilidad actual. |
totalInventory | Int! | Inventario total informado. |
bundleItemsCount | Int! | Número de componentes del bundle. |
brand | String! | Marca. |
category | String! | Categoría. |
status | String! | Estado publicado. |
collections | [String!]! | Colecciones asociadas. |
tags | [String!]! | Etiquetas publicadas. |
seller | ProductSellerInfo | Vendedor, cuando existe. |
ProductSellerInfo contiene id, name y slug, todos String!.
Query
query RelatedProducts($productId: String!, $limit: Int = 8) {
relatedProducts(productId: $productId, limit: $limit) {
id
name
slug
productType
imageUrl
price
compareAtPrice
variantCount
isAvailable
totalInventory
bundleItemsCount
brand
category
status
collections
tags
seller {
id
name
slug
}
}
}Variables:
{
"productId": "456",
"limit": 4
}El valor predeterminado de la variable del ejemplo coincide con el valor predeterminado del resolver. Puedes omitir limit de las variables para solicitar hasta ocho resultados.
cURL
curl --request POST "https://storefront.ecomiq.pe/graphql" \
--header "Content-Type: application/json" \
--header "x-Store-Domain: mi-tienda" \
--data-binary '{
"query": "query RelatedProducts($productId: String!, $limit: Int = 8) { relatedProducts(productId: $productId, limit: $limit) { id name slug productType imageUrl price compareAtPrice variantCount isAvailable totalInventory bundleItemsCount brand category status collections tags seller { id name slug } } }",
"variables": { "productId": "456", "limit": 4 }
}'Respuesta
{
"data": {
"relatedProducts": [
{
"id": "789",
"name": "Related mug",
"slug": "related-mug",
"productType": "Product",
"imageUrl": "/related.jpg",
"price": 12,
"compareAtPrice": null,
"variantCount": 1,
"isAvailable": true,
"totalInventory": 2,
"bundleItemsCount": 0,
"brand": "Acme",
"category": "Home",
"status": "Active",
"collections": [],
"tags": [],
"seller": null
}
]
}
}Errores
| Código | Causa común |
|---|---|
BAD_USER_INPUT | productId no es un ID válido o limit está fuera de 1–12. |
STORE_CONTEXT_REQUIRED | x-Store-Domain no resolvió una tienda. |
Una lista vacía no es un error: puede indicar que el producto de referencia no es visible o que no se encontraron recomendaciones disponibles. Consulta Errores GraphQL para manejar el envelope.