VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa/Mini-loja WhatsApp: catálogo

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

POST/api/v1/storefront/wa-coex/product/{token}/{productID}/configurationPública

Resolve 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ório
Token da mini-loja.
productIDuuidobrigatório
Id do produto pai.

Corpo da requisição

selectionsobject
Escolhas feitas, como mapa id do eixo para id da escolha (os ids vêm de axes na resposta anterior).
box_typestring
Tipo de caixa escolhido (id de box_types).
box_idstring
Caixa escolhida (id de boxes).
openbooleanpadrão: false
Use true 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

bash
curl -X POST "$BASE_URL/api/v1/storefront/wa-coex/product/$TOKEN/$PRODUCT_ID/configuration" \
  -H "Content-Type: application/json" \
  -d '{"open": true}'

Resposta

200Produto sem variação
json
{
  "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

requiredboolean
O produto exige escolher variação ou caixa antes de comprar.
completeboolean
As escolhas já definem um único item. Só então resolved vem preenchido (ou o produto não tem variação).
parent_product_iduuid
Id do produto pai.
selectionsobject
Escolhas consideradas, após aplicar o que o servidor decidiu.
axesarray
Eixos de escolha. Cada um tem id, 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_typesarray
Tipos de caixa disponíveis (id, label).
boxesarray
Caixas disponíveis: id, type, title, description, composition (lista de size e quantity), pairs (pares dentro de cada caixa), price_cents e available_boxes (estoque em caixas).
resolvedobject
O item final: product (formato da ficha, com o id da variação), unified_variation_id, selections e box.
first_selectionsobject
A combinação da primeira variação, que a ficha do site pré-seleciona.
appliedobject
Só em open: true: o que o servidor escolheu (selections, box_type, box_id).

Erros

StatusQuandoCorpo
400Corpo ilegível.{"error":"invalid_configuration"}
404productID vazio.{"error":"product_not_found"}
422Combinação que não existe.{"error":"invalid_configuration","message":"Essa combinação não está disponível. Ajuste as opções e tente novamente."}
503Falha ao montar as variações.{"error":"configuration_unavailable"}

Mais o 403 de porta de entrada ou de login exigido.

Use o item resolvido para adicionar

Ao adicionar à sacola (POST /cart/{token}/items), mande o mesmo objeto configuration (selections, box_type, box_id). O servidor resolve de novo e recusa combinações inválidas, então a resposta desta rota serve para a tela, não como prova.

Calcular o frete de um produto

POST/api/v1/storefront/wa-coex/product/{token}/{productID}/shippingPública

Opçõ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ório
Token da mini-loja.
productIDuuidobrigatório
Id do produto.

Corpo da requisição

cepstringobrigatório
CEP de destino, 8 dígitos, com ou sem hífen ou ponto. 00000000 é recusado.
quantitynumberpadrão: 1
Quantidade de unidades, de 0 a 9999. 0 ou ausente vale 1; negativo é recusado.

O corpo pode ter até 1 KB.

Exemplo de requisição

bash
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

200Opções de frete
json
{
  "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
Opções de entrega, possivelmente [] (nenhum método atende). Os campos de cada opção estão em Frete e totais.

Erros

StatusQuandoCorpo
400Corpo ilegível ou maior que 1 KB.{"error":"invalid_request"}
400CEP 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"}
400quantity negativa, acima de 9999 ou inválida.{"error":"invalid_quantity"}
403A loja esconde preço até o login e o cliente não está identificado.{"error":"price_redacted"}
404A loja não ligou o frete na ficha.{"error":"not_enabled"}
404Produto indisponível neste canal.{"error":"not_found"}
502A cotação falhou.{"error":"quote_failed"}

Veja também

  • Ficha do produto
  • Frete e totais
  • Sacola
Anterior
Ficha do produto
Próxima
Avaliações de produtos
Nesta página
  • Resolver a variação e a caixa
  • Exemplo de requisição
  • Resposta
  • Erros
  • Calcular o frete de um produto
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também