Catálogo
Autenticação: X-API-Key (ou token de aluno no painel).
Listar produtos
/v1/products🔒 X-API-KeyAceita search, categoryId, brandId, state, minPrice, maxPrice, page, pageSize.
- curl
- 200
curl "$BASE/products?search=fone&page=1&pageSize=20" \
-H "X-API-Key: $API_KEY" -H "X-Student-RM: RM550001"
{ "data": [{ "id": "cmse...", "name": "Fone Bluetooth", "priceFrom": 199.9, "variantsCount": 1 }],
"page": 1, "pageSize": 20, "total": 9 }
Detalhar produto (traz variantes)
/v1/products/:id🔒 X-API-KeyUse variants[].id para carrinho e variants[].price para exibir o preço.
Criar produto
/v1/products🔒 X-API-Key- SIMPLE
- VARIABLE
{ "type": "SIMPLE", "name": "Carregador Turbo", "sku": "CARR-001", "price": 79.9, "stock": 60 }
{
"type": "VARIABLE",
"name": "Camiseta Gamer",
"options": [{ "name": "Cor", "values": ["Preto", "Branco"] }],
"variants": [
{ "sku": "CAM-PT", "price": 79.9, "stock": 10, "options": { "Cor": "Preto" } },
{ "sku": "CAM-BR", "price": 79.9, "stock": 5, "options": { "Cor": "Branco" } }
]
}
Atualizar produto e variante
/v1/products/:id🔒 X-API-Key/v1/variants/:id🔒 X-API-Key{ "name": "Novo nome", "state": "PUBLISHED", "categoryId": null }
{ "price": 149.9 }
Preço vai no PATCH /variants/:id; estoque usa os endpoints de estoque
(/v1/variants/:id/stock/receive e /adjust).
Remover produto
/v1/products/:id🔒 X-API-KeyRetorna 204 No Content.
Fotos e vídeos
/v1/uploads🔒 X-API-Key/v1/products/:id/media🔒 X-API-KeyOs dois recebem multipart/form-data com o arquivo no campo file. O primeiro só
sobe para a biblioteca da loja; o segundo sobe e já vincula ao produto.
curl -X POST "$BASE/products/$ID/media" \
-H "X-API-Key: sk_live_..." \
-F "file=@foto.jpg" -F "isPrimary=true"
{
"id": "cmu0...",
"kind": "IMAGE",
"url": "https://mockmerce-media.s3.us-east-1.amazonaws.com/groups/.../a1b2c3.jpg",
"mimeType": "image/png",
"sizeBytes": 48213
}
/v1/products/:id/images🔒 X-API-Key/v1/images/:id🔒 X-API-Key/v1/images/:id🔒 X-API-KeyVincula uma mídia já enviada (mediaId) ou uma URL externa (url); o PATCH troca a
capa ou a ordem; o DELETE desvincula (o arquivo continua na biblioteca).
{ "mediaId": "cmu0...", "isPrimary": true }
/v1/media🔒 X-API-Key/v1/media/usage🔒 X-API-Key/v1/media/:id🔒 X-API-KeyBiblioteca da loja, espaço usado e remoção definitiva (?force=true quando o arquivo
estiver em uso por algum produto).
Formatos, limites, capa e o erro clássico do Content-Type estão no guia
Fotos e vídeos.
Avaliações
/v1/products/:id/reviews🔒 X-API-Key/v1/products/:id/reviews/can-review🔒 Bearer (cliente)/v1/products/:id/reviews🔒 Bearer (cliente)Só quem comprou avalia (pedido pago com o produto), e cada cliente avalia um produto uma vez. A listagem é pública dentro da loja e já traz o resumo.
{ "rating": 5, "title": "Recomendo", "comment": "Chegou antes do prazo.", "mediaIds": ["cmu0..."] }
{
"summary": {
"average": 4.5,
"count": 12,
"distribution": { "5": 8, "4": 2, "3": 1, "2": 0, "1": 1 }
}
}
/v1/reviews/:id🔒 Bearer (cliente)/v1/reviews/:id🔒 Bearer (cliente)/v1/me/reviews🔒 Bearer (cliente)Editar e apagar valem só para a própria avaliação (403 na dos outros).
/v1/store/reviews🔒 X-API-Key/v1/store/reviews/:id🔒 X-API-KeyA loja vê tudo (inclusive o que ocultou) e modera com { "hidden": true } —
a avaliação sai da vitrine e da média.
GET /products e GET /products/:id devolvem rating — não precisa buscar as
avaliações só para desenhar as estrelinhas do card. Detalhes no guia
Avaliações.
Categorias, marcas e coleções
/v1/categories🔒 X-API-Key/v1/categories🔒 X-API-Key{ "name": "Periféricos" }
O mesmo padrão vale para /v1/brands e /v1/collections.