Variação e frete na ficha
Resolve a variação e a caixa escolhidas de um produto e calcula o frete de um único produto para um CEP.
Duas consultas que a ficha do produto faz antes de o cliente pôr o item na sacola: qual é exatamente o item que as escolhas dele formam (cor, tamanho, caixa) e quanto custa entregar só esse produto no CEP dele.
Resolver a variação e a caixa
/api/v1/storefront/wa-coex/product/{token}/{productID}/configurationPúblicaResolve as escolhas de variação e caixa para o item exato
Produtos com variações (por exemplo cor e tamanho) ou vendidos em caixa (grade de tamanhos) são, para o servidor, um produto pai com eixos de escolha. Cada escolha muda as demais: ao escolher a cor, só aparecem os tamanhos que existem naquela cor. Você manda as escolhas feitas até agora e o servidor devolve o que ainda falta, o que está esgotado e, quando tudo foi escolhido, o item final pronto para ir à sacola.
O corpo é opcional: sem corpo, vale {}. Para produtos sem variação, a resposta vem com required: false e complete: true.
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatórioCorpo da requisição
selectionsobjectid do eixo para id da escolha (os ids vêm de axes na resposta anterior).box_typestringbox_types).box_idstringboxes).openbooleanpadrão: falsetrue ao abrir a ficha. Sem nenhuma escolha, o servidor aplica sozinho a primeira variação disponível, o tipo de caixa "Grade" (ou o único tipo) e a primeira caixa, e diz o que escolheu em applied. Economiza três chamadas na abertura.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/wa-coex/product/$TOKEN/$PRODUCT_ID/configuration" \
-H "Content-Type: application/json" \
-d '{"open": true}'Resposta
{
"required": false,
"complete": true,
"parent_product_id": "68836206-cb76-4814-9811-335f02e4e956",
"selections": {},
"axes": [],
"resolved": {
"product": { "id": "68836206-cb76-4814-9811-335f02e4e956", "name": "Air Fryer Eco Branco", "price_cents": 7992, "available": true },
"selections": {}
}
}Campos da resposta
requiredbooleancompletebooleanresolved vem preenchido (ou o produto não tem variação).parent_product_iduuidselectionsobjectaxesarrayid, name e choices, e cada escolha tem id, label, sold_out (todas as combinações dessa escolha estão esgotadas) e box_unavailable (nenhuma variação dessa escolha vem na caixa atual; aparece riscada, nunca some).box_typesarrayid, label).boxesarrayid, type, title, description, composition (lista de size e quantity), pairs (pares dentro de cada caixa), price_cents e available_boxes (estoque em caixas).resolvedobjectproduct (formato da ficha, com o id da variação), unified_variation_id, selections e box.first_selectionsobjectappliedobjectopen: true: o que o servidor escolheu (selections, box_type, box_id).Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo ilegível. | {"error":"invalid_configuration"} |
| 404 | productID vazio. | {"error":"product_not_found"} |
| 422 | Combinação que não existe. | {"error":"invalid_configuration","message":"Essa combinação não está disponível. Ajuste as opções e tente novamente."} |
| 503 | Falha ao montar as variações. | {"error":"configuration_unavailable"} |
Mais o 403 de porta de entrada ou de login exigido.
Calcular o frete de um produto
/api/v1/storefront/wa-coex/product/{token}/{productID}/shippingPúblicaOpções de frete de um único produto para um CEP
Roda a mesma cotação do checkout, só para o produto aberto, como o cliente do token (regras do grupo de clientes) e com os prazos configurados nos métodos. Só existe quando a loja liga o cálculo de frete na ficha (wa.pdp.shipping_calc); senão responde 404 not_enabled. Como o frete é um preço, o cliente que não pode ver preços não recebe cotação.
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatórioCorpo da requisição
cepstringobrigatório00000000 é recusado.quantitynumberpadrão: 10 ou ausente vale 1; negativo é recusado.O corpo pode ter até 1 KB.
Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/wa-coex/product/$TOKEN/$PRODUCT_ID/shipping" \
-H "Content-Type: application/json" \
-d '{"cep": "01310-100", "quantity": 2}'Resposta
{
"shipping_options": [
{
"choice": "50000000-0000-0000-0000-000000000001",
"label": "Entrega Padrão",
"price_cents": 1490,
"eta_days": 10,
"eta_min_days": 7,
"eta_text": "7-10 dias úteis",
"method_id": "50000000-0000-0000-0000-000000000001",
"position": 5,
"express": false,
"pickup": false
}
]
}Campos da resposta
shipping_optionsarray[] (nenhum método atende). Os campos de cada opção estão em Frete e totais.Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo ilegível ou maior que 1 KB. | {"error":"invalid_request"} |
| 400 | CEP que não tem 8 dígitos, só zeros, ou com caracteres que não são dígito, hífen, ponto ou espaço. | {"error":"invalid_cep"} |
| 400 | quantity negativa, acima de 9999 ou inválida. | {"error":"invalid_quantity"} |
| 403 | A loja esconde preço até o login e o cliente não está identificado. | {"error":"price_redacted"} |
| 404 | A loja não ligou o frete na ficha. | {"error":"not_enabled"} |
| 404 | Produto indisponível neste canal. | {"error":"not_found"} |
| 502 | A cotação falhou. | {"error":"quote_failed"} |