Ficha do produto
Abre um produto com preço do cliente, fotos, opções e disponibilidade, e lê os produtos relacionados e a oferta de compre junto.
A ficha é a tela de decisão de compra. GET /product traz tudo que ela precisa numa chamada só; related e combo são leituras separadas para as faixas "Você também pode gostar" e "Compre junto", que só aparecem se a loja as usa.
Todas as três reaproveitam o preço do cliente do token: preço de tabela, faixas por quantidade e acordo com o representante só vêm para o cliente identificado, e com o preço escondido até o login o produto sai com price_redacted: true e valores zerados.
Abrir o produto
/api/v1/storefront/wa-coex/product/{token}/{productID}PúblicaFicha completa do produto para o cliente do token
Um produto que o seller não entrega no endereço do cliente não dá 404: vem com available: false e outside_delivery_area: true, para a tela explicar por que não pode comprar. Produto inexistente, inativo ou escondido deste canal dá 404.
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/storefront/wa-coex/product/$TOKEN/$PRODUCT_ID"Resposta
{
"id": "68836206-cb76-4814-9811-335f02e4e956",
"name": "Air Fryer Eco Branco",
"short_description": "Air Fryer Eco Branco, qualidade premium com envio rápido.",
"image_url": "/uploads/.../air-fryer.png",
"gallery": ["/uploads/.../air-fryer.png"],
"slug": "air-fryer-eco-branco-2431",
"url": "/p/air-fryer-eco-branco-2431",
"price_cents": 7992,
"list_price_cents": 9990,
"tier_base_cents": 9990,
"available": true,
"sale_unit": "un",
"sale_unit_label": "un",
"quantity_step": 1,
"min_quantity": 1,
"vendor_name": "Loja Seller Teste",
"category_id": "0d209d61-abda-4424-945f-8bd538e9bb5a",
"breadcrumb": [
{ "id": "759fe1cf-af87-420f-9f8e-b5d73f8ee029", "name": "Eletrodomésticos" },
{ "id": "0d209d61-abda-4424-945f-8bd538e9bb5a", "name": "Air Fryers" }
],
"sku": "SD-002431",
"stock_amount": 3,
"specs": [{ "name": "Cor", "value": "Branco" }]
}Campos da resposta
iduuidnamestringshort_descriptionstringdescriptionstringimage_urlstringgalleryarrayvideosarrayurl, poster, youtube_id, vimeo_id, kind (upload, youtube, vimeo ou live_clip), title.slugstringurlstringprice_centsinteger0 se price_redacted.list_price_centsintegerprice_cents. Ausente quando não há desconto.price_redactedbooleantrue quando a loja esconde preço até o login e o cliente não está identificado.tier_base_centsintegerqty_tiersarraymin_qty, price_cents, percentage_discount, value_per_kg_cents, value_per_unit_cents. A primeira linha é a quantidade 1.availablebooleanbackorderbooleanavailable fica true.backorder_noticestringbackorder_notice_offbooleanavail_sincestringoutside_delivery_areabooleandelivery_destinationstringsale_unitstringun, kg).sale_unit_labelstringallow_fractionalbooleanquantity_stepnumbermin_quantitynumbermax_quantitynumber0 ou ausente: sem limite.vendor_namestringseller_offersarrayproduct_id, vendor_name, price_cents, list_price_cents, available, current.category_iduuidcategory_idsarraybreadcrumbarrayid e name.skustringbarcodestringbrandstringpromo_textstringweight_kgnumberunit_weight_kgnumberunits_per_boxintegersell_unitstringKG, CX, PC).price_per_kg_centsintegerprice_per_unit_centsintegerrep_agreementobjectprice_cents, min_qty, rep_name, valid_until.stock_amountintegerstock_originsarraywarehouse_id, label, qty, available, is_default.specsarrayname e value.optionsarrayid, name, type, required, values, choices (id, value, label, modifier em centavos) e, para múltipla escolha, min_select e max_select.needs_choicebooleancolor_swatchesarraylabel, color.fiscalobjectrating_avgnumberrating_countintegerstickersarrayid, name_admin, name_desktop, name_mobile, style, appearance, display_on.tagsarraydelivery_forecast_daysinteger0 quando desligada.attachmentsarrayid, name, url, mime_type, size_bytes, description.required_productsarrayid, name, image_url, price_cents, price_redacted, available, mandatory.look_tryonbooleanmin_ageinteger0 ou ausente: sem restrição.requires_vehicle_fitmentbooleanrequires_quotebooleancold_chainbooleancontrolled_schedulestringmax_qty_per_orderintegerrequires_cnpjbooleanOs campos de texto vazios e os zeros que não significam nada são omitidos da resposta, então trate qualquer campo opcional como "pode faltar".
Erros
| Status | Quando | Corpo |
|---|---|---|
| 403 | Porta de entrada fechada, ou a loja exige login para ver produtos. | {"error":"entry_required"} ou {"error":"account_required","message":"..."} |
| 404 | Produto inexistente, inativo ou fora deste canal. | {"error":"not_found"} |
| 503 | Catálogo indisponível. | {"error":"catalog unavailable"} |
Ler produtos relacionados
/api/v1/storefront/wa-coex/product/{token}/{productID}/relatedPúblicaProdutos relacionados à ficha aberta
Devolve até 12 produtos. A base é a curadoria do lojista; sem ela, os mais vendidos da mesma categoria. Cada item passa pelas mesmas regras de visibilidade e preço do catálogo. Sempre responde 200: se o produto de origem não está visível neste canal, a lista vem vazia.
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatório{ "products": [{ "id": "b6c4...", "name": "Fritadeira Digital 4L", "price_cents": 28900, "available": true }] }Campos da resposta
productsarray[] quando não há.Os erros possíveis são o 403 de porta de entrada ou de login.
Ler a oferta de compre junto
/api/v1/storefront/wa-coex/product/{token}/{productID}/comboPúblicaCombo 'compre junto' do produto, com o desconto do combo
O "compre junto" é um combo de produtos com desconto, cadastrado pelo lojista. A rota só devolve oferta se a loja ligou o recurso (wa.pdp.buy_together) e todos os produtos do combo estão disponíveis, são vendidos neste canal, têm preço visível para o cliente e não exigem escolha de opção. Em qualquer outro caso, combo: null.
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatório{
"combo": {
"bundle_id": "0f6a1b2c-3d4e-4f50-8a9b-1c2d3e4f5a6b",
"anchor_id": "68836206-cb76-4814-9811-335f02e4e956",
"items": [
{ "product": { "id": "68836206-cb76-4814-9811-335f02e4e956", "name": "Air Fryer Eco Branco", "price_cents": 7992 }, "qty": 1 },
{ "product": { "id": "9d8c...", "name": "Forma antiaderente", "price_cents": 2990 }, "qty": 1 }
],
"total_cents": 10982,
"combo_cents": 9900,
"savings_cents": 1082
}
}Campos da resposta
comboobjectA oferta, ou null.
bundle_iduuidPOST /cart/{token}/combo.anchor_iduuiditemsarrayproduct (formato da ficha) e qty.total_centsintegercombo_centsintegersavings_centsintegertotal_cents - combo_cents).