Seguimiento y reseñas
Muestra el pedido, sigue el envío y recoge reseñas con Storefront API.
Andrea compra en Arequipa una casaca y unas botas de dos vendedores. Desde su cuenta ve los dos pedidos, sigue al courier y, al recibirlos, deja una reseña.
Requisitos
- Un pedido creado con el checkout. Ver Checkout y pago.
- Para ver una compra dividida, la sesión del cliente en
X-Customer-Session. Ver Cuentas de clientes. - La ruta
/en el dominio principal de la tienda.review/ {reviewToken} - Para la ficha, el
iddel producto. Ver Tienda headless.
Muestra la compra
Sin sesión, el comprador entra con el enlace de estado de cada pedido:
GET /, explicado en
Checkout y pago. Con sesión,
GET / junta los pedidos de una compra.
Si el carrito tenía productos de varios vendedores, hay un pedido por vendedor.
curl https://storefront.ecomiq.pe/v1/customer/orders/group/7204558912004325350 \
-H "x-Store-Domain: mi-tienda" \
-H "X-Customer-Session: $SESSION_ID"{
"orderId": "7204558912004325350",
"orderNumber": "ORD-2026-0001",
"orderGroup": "7204558912004325350",
"orderIds": ["7204558912004325350", "7204558912004325351"],
"status": "inTransit",
"total": 449.8,
"currencyCode": "PEN",
"orders": [
{ "orderNumber": "ORD-2026-0001", "status": "inTransit", "total": 289.9 },
{ "orderNumber": "ORD-2026-0002", "status": "confirmed", "total": 159.9 }
]
}orderGroupllega en la respuesta del checkout y en cada fila deGET /.v1/ customer/ orders orderNumberystatusson los del primer pedido.totalsuma todos.- Cada elemento de
orderscontiene el mismo detalle de comprador queGET /: artículos, importes, direcciones, pagos,v1/ customer/ orders/ {orderId} statusTimelineyshipments.totalPaidsuma los pagos registrados.
Sigue el envío
shipments trae carrierName, trackingNumber y trackingLink. Llega en
GET /, en GET /
y en cada elemento de orders del grupo de compra.
Con el número, GET / devuelve el estado del envío.
No necesita sesión.
curl https://storefront.ecomiq.pe/v1/tracking/UR1029384756 \
-H "x-Store-Domain: mi-tienda"{
"trackingNumber": "UR1029384756",
"carrierName": "Urbano",
"trackingLink": "https://…/UR1029384756",
"status": "shipped",
"delivered": false,
"events": [
{ "name": "Pedido creado", "date": "06/10/2026 09:12" },
{ "name": "Pedido en ruta", "date": "08/10/2026 08:40" }
],
"message": null
}statuses el de la preparación:pendingAssignment,pending,inProgress,readyToPickUp,shipped,deliveredocancelled. Pasa adeliveredcuando el transportista confirma la entrega.eventsllega como lo informa el transportista.nameydateson texto: muéstralos tal cual.- Sin transportista conectado,
eventsllega vacío ymessagedice por qué. Enlaza atrackingLinksi viene.
Abre el enlace de reseña
Al entregar el pedido, los correos de Ecomiq llevan al comprador a
https:/. En esa ruta, lee el pedido
con GET /. El token basta: no hace falta
sesión.
curl https://storefront.ecomiq.pe/v1/orders/review-context/<review-token> \
-H "x-Store-Domain: mi-tienda"{
"orderId": "7204558912004325350",
"orderNumber": "ORD-2026-0001",
"customerName": "Andrea",
"email": "andrea.ramos@example.com",
"deliveredAt": "2026-10-09T16:20:00Z",
"items": [
{
"productId": "7204558912004320011",
"title": "Casaca de alpaca",
"variantTitle": "M / Gris",
"thumbnail": "https://…/casaca.webp"
}
]
}itemstrae cada producto del pedido una vez. Muestra un formulario por producto.- Responde
404Orders.ReviewContextNotFoundsi el token no existe, o si el pedido no se entregó o se canceló.
Publica la reseña
POST / guarda la reseña de un producto. Envía
el reviewToken y, en reviewerEmail, el email del contexto. Los ejemplos
llaman context a la respuesta del paso anterior.
curl -X POST https://storefront.ecomiq.pe/v1/products/7204558912004320011/reviews \
-H "x-Store-Domain: mi-tienda" \
-H "Content-Type: application/json" \
-d '{
"rating": 5,
"title": "Abriga mucho",
"content": "Llegó en tres días. La talla M me queda perfecta.",
"reviewerName": "Andrea R.",
"reviewerEmail": "andrea.ramos@example.com",
"orderId": "7204558912004325350",
"reviewToken": "<review-token>"
}'{
"id": "7204558912004330101",
"productId": "7204558912004320011",
"isVerifiedPurchase": true,
"rating": 5,
"title": "Abriga mucho",
"content": "Llegó en tres días. La talla M me queda perfecta.",
"reviewerName": "Andrea R.",
"createdOn": "2026-10-16T14:05:00Z"
}ratingva de 1 a 5.contentes obligatorio, hasta 4000 caracteres;titleyreviewerName, hasta 200.- La reseña espera moderación. El comercio la aprueba en el admin o con
PATCH /.v1/ catalog/ product-reviews/ {reviewId}/ status - Una reseña por producto y pedido.
orderIdes opcional; si lo envías, debe ser el del enlace.
Muestra las reseñas
GET / lista las reseñas aprobadas, de la más
reciente a la más antigua. No necesita sesión.
curl "https://storefront.ecomiq.pe/v1/products/7204558912004320011/reviews?limit=10" \
-H "x-Store-Domain: mi-tienda"{
"data": [
{
"id": "7204558912004330101",
"isVerifiedPurchase": true,
"rating": 5,
"title": "Abriga mucho",
"content": "Llegó en tres días. La talla M me queda perfecta.",
"reviewerName": "Andrea R.",
"createdOn": "2026-10-16T14:05:00Z"
}
],
"hasNextPage": true,
"nextCursor": "MjAyNi0xMC0xNlQxNDowNTowMFo",
"totalCount": 24
}limitvale 20 si no lo envías. MientrashasNextPageseatrue, envíanextCursorencursor.totalCountsolo llega en la primera página.ratingfiltra por estrellas ysearchbusca en título, texto y nombre.sortBy=rating&sortDirection=descpone primero las mejores.- Si el producto no existe, la lista llega vacía.
Sugiere productos relacionados
GET / llena el bloque de recomendaciones de la
ficha. Primero trae productos parecidos y completa con la misma categoría, la
misma marca y el resto del catálogo.
curl "https://storefront.ecomiq.pe/v1/products/7204558912004320011/related?limit=4" \
-H "x-Store-Domain: mi-tienda"[
{
"id": "7204558912004320012",
"name": "Chompa de alpaca",
"url": "/products/chompa-de-alpaca",
"imageUrl": "https://…/chompa.webp",
"price": 189.9,
"compareAtPrice": 229.9,
"isAvailable": true
}
]limitvale 8 si no lo envías. El máximo es 12.- Solo trae productos disponibles y visibles, nunca el de la ficha.
- Si el producto no existe, responde
[].
Errores
code | Estado | Qué hacer |
|---|---|---|
Orders.NotFound | 404 | Revisa orderGroup: no existe o es de otro cliente. |
Customer.RegistrationRequired | 403 | Completa el registro antes de mostrar los pedidos. |
Common.NotFound | 404 | El número de seguimiento no es de esta tienda. |
Common.Conflict | 409 | El número coincide con más de un envío. Usa trackingLink. |
Orders.ReviewContextNotFound | 404 | El enlace no sirve. Muestra un aviso y enlaza a la tienda. |
ProductReview.ReviewLinkNotFound | 404 | El token no existe. Usa el del correo. |
Product.NotFound | 404 | El producto ya no existe. Quita su formulario. |
ProductReview.OrderInvalid | 400 | El pedido no está entregado o tiene una devolución. |
ProductReview.OrderOwnerMismatch | 400 | Envía en reviewerEmail el email del contexto. |
ProductReview.ProductNotPurchased | 400 | Usa un productId de items. |
ProductReview.OrderMismatch | 400 | Envía el orderId del contexto u omítelo. |
ProductReview.AlreadyExists | 409 | Ya hay una reseña. Marca el producto como reseñado. |
Common.Validation | 400 | errors dice qué campo falló. |
El seguimiento tiene límite de peticiones. Con 429, espera lo que indique
Retry-After. Ver
Límites de uso.
Siguientes pasos
- Cuentas de clientes: sesión y lista de pedidos.
- Preparación y entrega: cómo el comercio registra el seguimiento.
- Productos: referencia de reseñas y relacionados.
Última actualización: