Aparência e utilidades
Lê a aparência, o horário, a política de checkout e as funcionalidades da loja, converte endereços em coordenadas e pede a credencial de uma chamada de voz.
Estas três rotas alimentam a interface: a primeira diz como a loja se apresenta e quais regras valem (cores, horário, quando exige conta, o que está ligado), a segunda ajuda a localizar um endereço e a terceira prepara uma chamada de voz com o assistente da loja.
Ler a aparência e as regras da loja
/api/v1/storefront/wa-coex/appearance/{token}PúblicaAparência, horário, política de checkout e funcionalidades ligadas
A resposta mistura identidade visual e regras de negócio, e é o ponto de partida para decidir o que mostrar. O mapa store_caps (de capabilities, funcionalidades) diz quais recursos opcionais a loja ligou, e checkout_policy diz o que o cliente pode fazer sem conta. Tem cache público de 60 segundos; a resposta com cores incompletas (tema ainda não lido) não é guardada em cache.
Parâmetros de caminho
tokenstringobrigatórioParâmetros de consulta
partstringmin_ordermin_order, devolve só o pedido mínimo da loja para o destino do cliente (veja abaixo), sem o documento de aparência.zipstringpart=min_order. CEP de entrega com 8 dígitos. Sem ele, a plataforma usa o destino do cliente (rascunho do chat ou primeiro endereço salvo) e, se não houver, o mínimo geral da loja.Cabeçalhos
X-Wa-Dest-CepstringExemplo de requisição
curl "$BASE_URL/api/v1/storefront/wa-coex/appearance/$TOKEN"Resposta
{
"store_name": "Loja de Demonstração Venddor",
"whatsapp_phone": "5511999998888",
"store_address": "Rua dos Testes, 100, Volta Redonda/RJ (CEP 27253-650)",
"show_store_address": true,
"accent_color": "#2563eb",
"header_color": "#2563eb",
"logo_media_id": "/uploads/dfe2555e/theme/logo/logo-v1.png",
"hero_title": "",
"card_style": "C",
"is_open": true,
"closed_message": "",
"allow_orders_closed": false,
"business_hours": { "is_24_hours": false, "is_open": true, "timezone": "America/Sao_Paulo", "days": [], "message": "", "summary": "" },
"min_order_cents": 0,
"free_ship_cents": 10000,
"assistant_checkout": false,
"checkout_policy": {
"allow_guest_checkout": true,
"allow_guest_cart": true,
"allow_guest_view_price": true,
"allow_shopping_unlogged": true,
"allow_multiple_addresses": true,
"allow_seller_chat": true,
"offer_account_after_order": true,
"terms_required": false,
"min_order_amount": 0,
"min_qty_per_product": 1,
"max_qty_per_product": 0
},
"login_capabilities": { "allow_auto_phone_login": true, "allow_cnpj_login": true, "allow_cpf_login": true, "allow_email_login": true },
"registration_required_fields": [
{ "field_name": "cpf", "label": "CPF", "is_canonical": true, "scope": "pf" },
{ "field_name": "email", "label": "E-mail", "is_canonical": true, "scope": "all" }
],
"store_caps": { "wa.pdp.reviews": false, "wa.pdp.shipping_calc": false, "wa.bag.wallet": true, "wa.checkout.sales_rep": false },
"delivery_forecast": null
}Campos da resposta
store_namestringwhatsapp_phonestring5511999998888), para montar links https://wa.me/<número>.store_addressstringshow_store_address for true.appearanceobjectlogo_media_id, header_color, accent_color, hero_media_id, hero_title, hero_subtitle, greeting_template, card_style, updated_at).logo_media_idstringheader_color, accent_color, hero_media_id, hero_title, hero_subtitle, greeting_template, card_style (pinned_collections, footer_info) repetem o documento appearance na raiz, por compatibilidade com clientes antigos.commerce_profileobjectsegment (por exemplo general, B2B), config, labels, capabilities.copyobjectis_openbooleanclosed_messagestringallow_orders_closedbooleanis_open já vem true.business_hoursobjectis_24_hours, is_open, timezone, days, message, summary. null quando a loja não configurou horário.min_order_centsintegercart.min_order_cents.free_ship_centsinteger0 quando não há.assistant_checkoutbooleancheckout_policyobjectallow_shopping_unlogged (visitante pode navegar), allow_guest_cart, allow_guest_view_price, allow_guest_checkout (visitante pode comprar), allow_multiple_addresses, offer_account_after_order, terms_required (aceite de termos obrigatório), min_qty_per_product, max_qty_per_product (0 = sem limite) e min_order_amount.login_capabilitiesobjectallow_auto_phone_login, allow_cnpj_login, allow_cpf_login, allow_email_login.registration_required_fieldsarrayfield_name, label, is_canonical (true para nome, e-mail, documento e telefone) e scope (all, pf ou pj). Campos não canônicos vão em extra_fields de Cadastro. null quando nenhum é exigido.store_capsobjectfuncionalidade para booleano. As chaves usam o prefixo wa.: por exemplo wa.pdp.reviews (avaliações), wa.pdp.shipping_calc (cálculo de frete na ficha), wa.pdp.buy_together (compre junto), wa.bag.wallet (cashback), wa.checkout.sales_rep (escolha de consultor), wa.checkout.pix_manual (Pix com comprovante), wa.catalog.show_out_of_stock. Ligue ou desligue cada recurso da sua interface por este mapa.delivery_forecastobjectnull quando desligada.Pedido mínimo do destino
Com ?part=min_order a resposta é só:
{ "min_order_cents": 90000, "zip": "80010000", "source": "destination" }Campos da resposta
min_order_centsintegerzipstringsourcestringdestinationstoredestination: a área de entrega do CEP define um mínimo próprio. store: vale o mínimo geral do checkout da loja.Esta variante nunca é guardada em cache (private, no-store), porque depende da sacola.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 500 | Falha ao ler as configurações de aparência. | {"error":"..."} |
Converter endereço em coordenadas
/api/v1/storefront/wa-coex/geocode/{token}PúblicaCEP ou texto em latitude e longitude, ou o contrário
Dois usos, escolhidos pelos parâmetros. Com q, devolve a coordenada do endereço (um CEP de 8 dígitos é completado com a UF). Com lat e lng, faz o caminho inverso e devolve o endereço mais próximo. As respostas ficam em cache por 24 horas.
Esta é a única rota da mini-loja com limite próprio: 60 requisições por minuto por IP.
Parâmetros de caminho
tokenstringobrigatórioParâmetros de consulta
qstringlatnumberlng.lngnumberExemplo de requisição
curl "$BASE_URL/api/v1/storefront/wa-coex/geocode/$TOKEN?q=01310100"Resposta
{ "lat": -23.5628302, "lng": -46.6546177 }{ "street": "Rua Rocha", "number": "464", "district": "Morro dos Ingleses", "city": "São Paulo", "uf": "SP", "cep": "01330000" }Campos da resposta
latnumberlngnumberstreetstringnumberstringdistrictstringcitystringufstringuf, e nos endereços de entrega é state.cepstringcep, e nos endereços é zip.Erros
| Status | Quando | Corpo |
|---|---|---|
| 204 | q vazio ou acima de 300 caracteres, ou nenhum resultado. Não tem corpo. | (vazio) |
| 400 | lat ou lng não é número. Sem corpo. | (vazio) |
| 429 | Passou de 60 por minuto. | Corpo padrão de limite. |
Pedir a credencial de uma chamada de voz
/api/v1/storefront/wa-coex/realtime/{token}PúblicaCredencial temporária para uma chamada de voz com o assistente
Gera uma credencial de curta duração para o navegador abrir uma conversa por voz com o assistente da loja. Sem corpo. Só funciona com a loja aberta, e cada token pode pedir uma credencial a cada 8 segundos. Use a credencial no mesmo instante: ela expira em poucos minutos.
Parâmetros de caminho
tokenstringobrigatório{ "value": "ek_xxxxxxxxxxxxxxxx", "expires_at": 1791755809, "model": "voice-model-id" }Campos da resposta
valuestringexpires_atintegermodelstringErros
| Status | Quando | Corpo |
|---|---|---|
| 409 | A loja está fechada. | {"error":"store_closed","message":"Estamos fechados agora"} (com o horário de reabertura, quando conhecido) |
| 429 | Segunda chamada em menos de 8 segundos. | {"error":"rate_limited"} |
| 500 | Falha ao montar o pedido da credencial. | {"error":"token_request_failed"} |
| 502 | O serviço de voz não respondeu ou recusou. | {"error":"openai_unreachable"} ou {"error":"token_mint_failed"} |
| 503 | A loja não tem chamada de voz configurada. | {"error":"voice_call_unavailable"} |