Mini-loja no WhatsApp
Aparência da mini-loja aberta dentro do WhatsApp, envio do link ao cliente e pré-visualização dos links personalizados.
A mini-loja é a página leve da loja que abre dentro do navegador do WhatsApp quando o cliente toca no botão da conversa. O link carrega um token que identifica o cliente e a loja (por isso é chamado de link personalizado). Estas rotas configuram a aparência, enviam o link a um cliente e geram uma amostra de links.
Ler a aparência
Devolve as escolhas da loja e, ao lado, a marca do tema (brand_*) usada quando a escolha está em branco.
/api/v1/admin/whatsapp/web-preview/settingsAdminLê as configurações visuais da mini-loja
Exemplo de requisição (Ler a aparência)
curl "$BASE_URL/api/v1/admin/whatsapp/web-preview/settings" \
-H "Authorization: Bearer $TOKEN"Resposta (Ler a aparência)
{
"store_name": "Loja Exemplo",
"brand_logo_url": "/uploads/tenant/theme/logo/logo.png",
"brand_header_color": "#2563eb",
"brand_accent_color": "#2563eb",
"logo_media_id": "",
"header_color": "",
"accent_color": "",
"hero_media_id": "",
"hero_title": "",
"hero_subtitle": "",
"greeting_template": "",
"card_style": "C",
"updated_at": "2026-07-30T04:13:07.992553Z"
}Campos da resposta
store_namestringbrand_logo_urlstringlogo_media_id estiver vazio.brand_header_colorstringbrand_accent_colorstringlogo_media_idstringheader_colorstring#RGB ou #RRGGBB). Vazio herda a do tema.accent_colorstringhero_media_idstringhero_titlestringhero_subtitlestringgreeting_templatestringcard_stylestringC.pinned_collectionsarrayfooter_infoobjecthours_summarystringupdated_atstringErros (Ler a aparência)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
Salvar a aparência
Substitui as configurações. Campos de texto omitidos ficam em branco (herdam o tema). Devolve a configuração já salva, no mesmo formato do GET.
/api/v1/admin/whatsapp/web-preview/settingsAdminSalva as configurações visuais da mini-loja
Corpo da requisição
logo_media_idstringheader_colorstring#RGB ou #RRGGBB. Um # duplicado (##004590) é corrigido; vazio herda o tema.accent_colorstringhero_media_idstringhero_titlestringhero_subtitlestringgreeting_templatestringcard_stylestringpadrão: Cpinned_collectionsarrayfooter_infoobjecthours_summarystringExemplo de requisição (Salvar a aparência)
curl -X PUT "$BASE_URL/api/v1/admin/whatsapp/web-preview/settings" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"header_color": "#0F766E",
"accent_color": "#F59E0B",
"hero_title": "Moda para o seu dia",
"hero_subtitle": "Entrega para todo o Brasil",
"greeting_template": "Olá! Escolha o que quer ver.",
"card_style": "C",
"hours_summary": "Seg a Sex, 9h às 18h"
}'Resposta (Salvar a aparência)
{
"store_name": "Loja Exemplo",
"header_color": "#0F766E",
"accent_color": "#F59E0B",
"hero_title": "Moda para o seu dia",
"hero_subtitle": "Entrega para todo o Brasil",
"greeting_template": "Olá! Escolha o que quer ver.",
"card_style": "C",
"hours_summary": "Seg a Sex, 9h às 18h"
}Campos da resposta
(...)objectGET.Erros (Salvar a aparência)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON (invalid body) ou cor inválida (invalid_color). | {"error":"invalid_color"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
Enviar imagem da mini-loja
Recebe um arquivo e devolve o registro da mídia. O id devolvido vai em logo_media_id ou hero_media_id da rota de aparência. Aceita só imagens raster: JPEG, PNG, GIF, WebP e AVIF; até 10 MB. O tipo é conferido pelo conteúdo, não pelo cabeçalho.
/api/v1/admin/whatsapp/web-preview/mediaAdminEnvia uma imagem (logo ou capa) para a mini-loja
Corpo da requisição
filefileobrigatóriomultipart/form-data.Exemplo de requisição (Enviar imagem da mini-loja)
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/web-preview/media" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@logo.png"Resposta (Enviar imagem da mini-loja)
{
"id": "7d1d2f0e-3c3a-4f6b-9a50-1c2d3e4f5a6b",
"tenant_id": "dfe2555e-bfd0-41a8-9fa1-9586999f3798",
"owner_id": "appearance",
"owner_type": "whatsapp_minishop",
"filename": "logo.png",
"content_type": "image/png",
"size": 18342,
"url": "/uploads/dfe2555e-bfd0-41a8-9fa1-9586999f3798/whatsapp_minishop/7d1d2f0e_logo.png",
"position": 0,
"created_at": "2026-10-11T22:10:00Z"
}Campos da resposta
idstringlogo_media_id ou hero_media_id.owner_typestringwhatsapp_minishop nesta rota.owner_idstringappearance nesta rota.filenamestringcontent_typestringsizeintegerurlstringcreated_atstringErros (Enviar imagem da mini-loja)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Formulário inválido, arquivo ausente ou tipo não permitido (SVG, PDF e MP4 são recusados nesta rota). | {"error":"unsupported file type","detail":"Mini-shop assets accept JPEG, PNG, GIF, WebP, or AVIF images only. Detected: image/svg+xml"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
Enviar o link ao cliente
Monta um link personalizado e o entrega. Dentro das 24 horas depois da última mensagem do cliente (a janela de atendimento do WhatsApp) a plataforma usa um botão que abre a mini-loja (cta_url); se isso falhar, um texto com a prévia do link. Fora da janela só é permitido enviar um template aprovado pela Meta. Quando os Flows nativos da loja estão ligados, o envio vira um Flow (native_flow).
/api/v1/admin/whatsapp/web-preview/sendAdminEnvia ao cliente o link da mini-loja, do carrinho ou do checkout
Corpo da requisição
phonestringobrigatóriovendor_idstringpurposestringpadrão: storestorecartcheckoutbodystringcta_labelstringpadrão: Ver lojamanaged_template_idstringtemplate_namestringtemplate_paramsarrayforce_templatebooleanpadrão: falsetrue pula o caminho interativo e sempre usa template.prefer_text_previewbooleanpadrão: falsetrue envia texto com prévia do link em vez do botão.Exemplo de requisição (Enviar o link ao cliente)
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/web-preview/send" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "+5511999998888",
"purpose": "store",
"body": "Oi! Toque para abrir a loja.",
"cta_label": "Ver loja"
}'Resposta (Enviar o link ao cliente)
{
"result": {
"mode": "cta_url",
"url": "https://minhaloja.io.venddor.com.br/wa/eyJ0IjoiLi4u",
"message_id": 2081,
"window_open": true
},
"message": {
"id": 2081,
"phone_number": "5511999998888",
"message_type": "interactive",
"status": "sent"
}
}Campos da resposta
resultobjectO que foi feito.
modestringcta_urltext_previewtemplatenative_flowurlstringnative_flow.message_idintegerwindow_openbooleantrue se a janela de 24 horas estava aberta.warningstringmessageobjectstatus (veja Mensagens enviadas).Erros (Enviar o link ao cliente)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON. | {"error":"invalid json"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
| 502 | Falha no envio (telefone ausente, módulo desligado, Meta recusou, template inexistente). result pode vir junto. | {"error":"whatsapp: phone required","result":null} |
Gerar amostra de links
Devolve os links da loja, do carrinho e do checkout, com os tokens e as variáveis de template que eles alimentam. Sem phone, os links são de um visitante anônimo (serve para ver a loja no editor); com phone, o token identifica esse telefone. Não envia nada.
/api/v1/admin/whatsapp/link-packAdminGera links personalizados de amostra para pré-visualização
Parâmetros de consulta
vendor_idstringphonestringnamestringExemplo de requisição (Gerar amostra de links)
curl "$BASE_URL/api/v1/admin/whatsapp/link-pack?phone=%2B5511999998888&name=Maria" \
-H "Authorization: Bearer $TOKEN"Resposta (Gerar amostra de links)
{
"link_pack": {
"store_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0Ijoi...",
"cart_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0Ijoi.../cart",
"checkout_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0Ijoi.../checkout"
},
"vars": {
"store_link": "https://minhaloja.io.venddor.com.br/wa/eyJ0Ijoi...",
"vendor_name": "Loja Exemplo"
},
"var_catalog": [
{
"key": "store_link",
"label_pt": "Link da loja (mini-shop)",
"label_en": "Store mini-shop link",
"example": "https://loja.../wa/{token}"
}
]
}Campos da resposta
link_packobjectstore_link, cart_link, checkout_link e os tokens correspondentes).varsobjectvar_catalogarraykey, label_pt, label_en e example.Erros (Gerar amostra de links)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Não foi possível montar os links (por exemplo, seller inexistente). | {"error":"..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |