Widde API para parceiros
A integração permite que parceiros carreguem coleções de vídeos Widde dentro dos apps que criam para lojas de e-commerce — com a mesma experiência interativa que os usuários têm na loja.
01 Como funciona
A integração da Widde com parceiros depende de uma liberação prévia do nosso time. Cada parceiro recebe acesso a uma ou mais lojas autorizadas e a uma chave de API exclusiva — ambos gerados pela Widde.
Fluxo de onboarding
- Solicitação de acesso — o parceiro abre contato com o time da Widde indicando qual loja deseja integrar.
- Liberação dos identificadores — o time libera o acesso à
loja no painel. A partir desse momento o
collectionAppIdde cada coleção daquela loja passa a aparecer na listagem de coleções, viabilizando a leitura via API. - Geração da chave de API — o time gera a
x-partner-keyexclusiva do parceiro. É essa chave que autentica todas as chamadas (veja autenticação). - Entrega — o parceiro recebe da Widde dois itens para começar:
o domínio da loja autorizada (no formato
charth.com.br— semhttps://e semwww.) e a chave de API.
02 Conceito
A integração divide a experiência em duas camadas com responsabilidades claras: o parceiro entrega a casca visual dentro do app, e a Widde entrega o conteúdo que vai dentro de cada widget.
Termos visuais
Antes de seguir, vale alinhar os termos que aparecem o tempo todo na documentação e na API. A coleção é o container; cada vídeo dentro dela é um story, que pode ser renderizado como GIF (preview nos widgets) ou em fullscreen (player completo). E o produto é o item da loja vinculado ao story.
- 1 Coleção — agrupamento ordenado de stories, identificado pelo
collectionAppId. É a unidade que o lojista monta no painel e que o parceiro carrega via API. - 2 Story — cada vídeo individual dentro da coleção. Na API V2 é uma entrada do array
stories[]. Tem duas formas de ser renderizado: como GIF (preview otimizado usado nos widgets — Story flutuante, Highlight, Carrossel, Destaque na PDP) ou em fullscreen (player completo servido porcdn.widde.io/app). - 3 Fullscreen — o mesmo story aberto no player completo, com barra de progresso, controles laterais e drawer de produto. É sempre o destino quando o usuário toca em um GIF de qualquer widget.
- 4 Produto — item da loja vinculado a um story. Aparece abaixo do GIF em formatos como o Carrossel e dentro do player, no drawer de compra do fullscreen. Um story pode ter zero ou mais produtos vinculados.
O que o parceiro desenvolve
A aplicação do parceiro implementa os widgets visuais dos formatos das soluções (veja os formatos) — a bolinha flutuante na tela da loja, as miniaturas dentro da página de produto (PDP), os ícones em listas de categorias ou produtos, o carrossel de coleções. Cada widget é desenhado e renderizado pelo próprio app, seguindo a identidade visual da loja.
O que a Widde entrega
Para popular esses widgets, a Widde fornece três peças. Todas são acessadas a
partir do collectionAppId — o identificador público
de cada coleção, liberado pelo time conforme descrito em
Como funciona.
- Listagem de coleções por página — via API REST
(Pages Partner V1 /
V2) o app sabe quais coleções aparecem em cada URL
da loja e recupera o
collectionAppIdcorrespondente. - Preview em GIF — para cada widget renderizado, o app chama o
CDN de GIFs passando o
collectionAppIde recebe a imagem inicial daquela coleção. É esse GIF que o usuário vê dentro da bolinha flutuante, do destaque na PDP ou em cada card do carrossel. - Player em fullscreen — quando o usuário toca em um widget, o
app abre
cdn.widde.io/appnum WebView (veja Coleção fullscreen). A Widde renderiza a experiência completa — vídeos, navegação entre coleções, drawer de produto e CTA de compra — com as características padrão configuradas pelo lojista no painel.
A Widde fornece os dados (API), os previews (CDN de GIFs) e o player completo (WebView fullscreen). O parceiro fornece o local visual onde tudo aparece dentro da loja.
03 Video Commerce · Formatos
A Widde disponibiliza quatro formatos de widget de vídeo que podem ser distribuídos pela loja. Cada formato tem um papel diferente — bolinha flutuante, fileira de destaques na home, miniaturas dentro da PDP e carrossel de coleções — e pode ser customizado visualmente pelo lojista.
Posicionamento na página
Os formatos aparecem em posições específicas do e-commerce. O Highlight e o Carousel costumam ocupar o topo da home e páginas de categoria; o Story fica flutuando fixo no canto inferior esquerdo, acompanhando o scroll; os destaques de produto ficam embutidos na PDP.
Mapeamento ViewType → Formato
| ViewType (API) | Formato | Contexto de uso |
|---|---|---|
Story | Story | Bolinha flutuante fixa (bottom-left) em qualquer página |
Highlight | Destaque da loja | Fileira de círculos no topo de home e categorias |
HighlightTwo / HighlightThree | Destaque de produto | Miniatura dentro da galeria da PDP, junto das fotos |
Carousel / CarouselTwo | Carrossel | Vitrine de coleções com produto + preço (topo de home/categoria) |
Shape do vídeo · shapper.type
Independente do formato do widget, o lojista escolhe a forma do recorte
do vídeo no painel da Widde. Esse valor chega no objeto
styles.{ViewType}.shapper.type da API V2 e
deve ser aplicado como máscara do preview.
As quatro opções aparecem no painel do lojista sob o título "Escolha o formato". A escolha afeta apenas o preview do vídeo (bolinhas flutuantes, cards, etc.) — o player fullscreen é sempre retangular.
Cada formato aceita configurações de shapper (forma),
colors (cores), wrapper (texto/produto abaixo)
e playRule (quando começar a tocar). Essas configurações vêm no objeto
styles da resposta da API V2.
04 Provador AI
A Widde também oferece o Provador AI — uma solução que permite ao cliente visualizar como a peça fica em seu próprio corpo antes da compra. O fluxo abre direto na página de produto, com upload de foto e geração da imagem com IA.
05 Live Commerce
Transmissões ao vivo dentro do e-commerce com chat em tempo real, cupons de desconto, destaque de produto sincronizado e contagem de espectadores. A live ocupa o banner principal da loja e se transforma em mini-player flutuante ao scroll.
Componentes da experiência
O endpoint de integração para parceiros do Live Commerce está em planejamento. A documentação cobrirá agendamento de lives, estado de transmissão, chat em tempo real (provavelmente via WebSocket), sincronização de produto destacado e contagem de espectadores.
Para acompanhar o desenvolvimento ou solicitar acesso antecipado, fale com [email protected].
06 Explorar
Página completa cheia de vídeos no estilo explore do Instagram. Estimula a descoberta de produtos e funciona em duas variantes: um preview compacto embutido na home (ou em qualquer categoria) e a página dedicada com busca e abas de categoria.
Variantes
Componentes da experiência
O endpoint de integração para parceiros do Explorar está em planejamento. A documentação cobrirá listagem de coleções com tile destaque, busca, filtros por categoria e o contrato de produto vinculado a cada vídeo.
07 Autenticação
Todas as chamadas para a API exigem o header x-partner-key.
O token é emitido pela Widde durante o onboarding e identifica unicamente cada parceiro
autorizado.
x-partner-key: <SUA_PARTNER_KEY> Content-Type: application/json
Nunca exponha o x-partner-key no app cliente
(mobile ou browser). Faça as chamadas via backend próprio ou camada
intermediária — o token não pode chegar ao dispositivo do usuário final.
08 Pages Partner — V1
Retorna as coleções de uma loja em formato flat (apenas IDs, sem configurações visuais). Mantido por compatibilidade com integrações antigas — para qualquer integração nova, vá direto para a V2.
Lista as collections mapeadas por URL (PDP, home, categoria) da loja.
curl -X GET "https://api-admin.widde.io/api/v1/partner/pages?domain=charth.com.br" \ -H "x-partner-key: <SUA_PARTNER_KEY>" \ -H "Content-Type: application/json"
const response = await fetch( 'https://api-admin.widde.io/api/v1/partner/pages?domain=charth.com.br', {method: 'GET', headers: {'x-partner-key': '<SUA_PARTNER_KEY>', 'Content-Type': 'application/json', }, } ); if (!response.ok) {throw new Error('HTTP error ' + response.status); }const data = await response.json();
{
"collections": {
"bata-dalia-amarelo-angu-1/p": {
"Story": "H6sCpJ1tDyW"
},
"bata-rebeca-off-1/p": {
"Story": "M7vXqA4kZsB"
}
}
}
A V1 continua respondendo, mas não recebe novos campos. Quem está construindo
hoje deve usar a V2 — a chamada é a mesma, basta trocar /v1/
por /v2/.
09 Pages Partner — V2
Versão recomendada. Além das collections, retorna o objeto styles
com configurações visuais por tipo de widget (Carousel, Highlight, Story…) — assim
você renderiza no app exatamente o que o lojista configurou no painel.
Collections + styles por tipo de widget.
Use V2 em todas as novas integrações. A autenticação é idêntica à V1 — basta trocar
o path de /v1/ para /v2/.
Exemplo de resposta completa
{
"collections": {
"legging-atletika-bolso-cos-1/p": {
"Highlight": { "id": "K9aZb3NcRfH", "title": "Destaques da página" },
"Carousel": { "id": "Q4dGhV7uPxL", "title": "Mais vendidos" }
},
"charth.com.br": {
"Carousel": { "id": "T2rBwY8eMnK", "title": "Home — campanhas" }
}
},
"styles": {
"Carousel": {
"colors": { "primary": null, "secondary": null },
"shapper": { "type": "rectangle", "style": "default", "rounded": 15, "borderWidth": 0 },
"wrapper": { "type": "product", "variant": "default", "position": "bottom", "redirectTo": "none" },
"playRule": { "type": "PlayCenter" },
"carouselTitle": {
"font": "Arial", "show": false, "size": 20,
"color": "#000000", "isBold": false
},
"block": {
"mobile": {
"gap": 16, "size": 250, "type": "carousel",
"align": "safe center", "marginTop": 16
}
}
},
"Highlight": {
"colors": { "primary": null, "secondary": null },
"shapper": { "type": "circle", "style": "border", "rounded": 8, "borderWidth": 3 },
"playRule": { "type": "PlayAll" },
"block": {
"mobile": { "gap": 16, "size": 100, "type": "highlight", "marginTop": 16 }
}
}
}
} Referência · collections
| Campo | Tipo | Descrição |
|---|---|---|
{url} | object |
Path da página na loja — ex.: legging-x-1/p
(PDP), dominio.com.br (home).
|
{url}.{ViewType} | object |
Tipo do widget: Story,
Highlight, HighlightTwo,
HighlightThree, Carousel,
CarouselTwo.
|
{url}.{ViewType}.id | string | ID público da coleção (collectionAppId). |
{url}.{ViewType}.title | string | Título da coleção configurado pelo lojista no painel — pode ser usado como rótulo do widget (ex.: título do carrossel). |
Referência · styles
| Campo | Tipo | Descrição |
|---|---|---|
colors.primary | string · null | Cor primária. null usa o padrão da empresa. |
colors.secondary | string · null | Cor secundária. null usa o padrão da empresa. |
shapper.type | string | circle · flower · rectangle · heart |
shapper.style | string | default · border |
shapper.rounded | number | Arredondamento em px. |
shapper.borderWidth | number | Largura da borda em px. |
wrapper.type | string | product · simple-text |
playRule.type | string | PlayAll · PlayCenter |
carouselTitle | object · null | Configuração do título (apenas Carousel). |
block.mobile | object | Layout mobile: gap, size, marginTop e align. |
10 V1 vs V2
Mesma autenticação, mesma URL base — a V2 só estende o payload com
styles. A migração geralmente é trocar o path
e desserializar a resposta como objeto em vez de string.
styles.
Mantido apenas por compatibilidade.
| Aspecto | V1 | V2 |
|---|---|---|
| Collections | "Story": "id_string" | "Story": { "id": "id_string", "title": "..." } |
| Styles | Não inclui | Configuração visual por tipo |
| Formato | Flat (string) | Enriquecido (objeto) |
| Path | /api/v1/partner/pages | /api/v2/partner/pages |
| Recomendação | descontinuar | usar |
11 Collection Partner — V2
Retorna o conteúdo completo de uma coleção: título, lista de
stories ordenadas (mesma ordem do app oficial) e os
produtos vinculados a cada story. Útil quando o parceiro
quer renderizar a experiência fora do cdn.widde.io/app
— em apps mobile nativos ou em UIs próprias.
Stories + produtos da coleção. Path params: domain (ex.: charth.com.br) e collectionAppId.
Header x-partner-key obrigatório. O
domain precisa estar autorizado para a chave
do parceiro — caso contrário a resposta é 401.
Exemplo de chamada
curl -H "x-partner-key: <SUA_PARTNER_KEY>" \ https://api-admin.widde.io/api/v2/partner/collections/charth.com.br/ZgfM4pSWdR0
Exemplo de resposta
{
"title": "Lookbook Verão",
"stories": [
{
"key": "cd813cec-71a8-4dc0-8d45-1e7f9e914c8b",
"gif": "https://videos.widde.io/widde-bucket-sp/.../gif.mp4",
"products": [
{
"title": "Camisa Linho Areia",
"mainImage": "https://cdn.loja.com.br/images/camisa-linho.jpg",
"price": 199.9,
"comparePrice": 249.9,
"url": "https://charth.com.br/produto/camisa-linho-areia",
"handler": "camisa-linho-areia"
}
]
},
{
"key": "9f7c0f8e-3a72-4f3b-90d1-2b1f2d2b8a55",
"gif": "https://videos.widde.io/widde-bucket-sp/.../gif.mp4",
"products": []
}
]
} Exemplo de uso
Com a resposta acima o parceiro consegue montar a visualização completa
da coleção dentro do próprio app, com identidade visual própria — sem
precisar abrir o WebView de cdn.widde.io/app.
Os mesmos dados do exemplo (Lookbook Verão) renderizados como uma tela
de seleção de stories num app fictício:
Lookbook Verão
Como os dados alimentam a tela
-
title→ cabeçalho da coleção -
stories[].gif→ preview de cada card -
stories[].products[0].mainImage→ thumbnail do produto -
stories[].products[0].title→ nome do produto -
price+comparePrice→ preço com desconto -
products: []→ estado "sem produto" (segunda card)
Ao tocar em um card, o app pode abrir o player Widde em fullscreen
(veja Coleção fullscreen) usando o
collectionAppId da coleção, ou renderizar
o vídeo num player próprio se preferir manter a experiência 100% nativa.
Referência · raiz
| Campo | Tipo | Descrição |
|---|---|---|
title | string | Título da coleção, configurado pelo lojista no painel. |
stories | array | Lista ordenada de stories ativas da coleção. A ordem segue o mesmo critério do app oficial — pela posição definida no painel (drag-and-drop) e, em empate, pela mais recente primeiro. |
Referência · stories[]
| Campo | Tipo | Descrição |
|---|---|---|
key | string | Identificador único da story. |
gif | string · null |
URL do GIF/preview otimizado da story. Pode ser null
quando a mídia ainda está em processamento.
|
products | array | Produtos vinculados à story. A lista pode estar vazia para stories sem produto (modo CTA, news, etc.). |
Referência · stories[].products[]
| Campo | Tipo | Descrição |
|---|---|---|
title | string | Nome do produto. |
mainImage | string · null | URL da imagem principal do produto (geralmente servida pelo CDN da loja). |
price | number | Preço atual em double (na moeda da loja). |
comparePrice | number · null | Preço "de" para exibir desconto. null quando não houver promoção. |
url | string | URL canônica do produto na loja. |
handler | string · null | Slug/handle do produto (útil para deep linking dentro do app). |
Erros mais comuns
| Status | Cenário |
|---|---|
400 | collectionAppId ausente ou vazio. |
401 | Header x-partner-key ausente, inválido ou não autorizado para o domain informado. |
404 | domain não corresponde a nenhuma loja, ou a coleção não existe / não está ativa. |
12 GIFs / Previews
Vídeos otimizados que alimentam os widgets de qualquer solução (Story, Highlight,
Carousel e demais formatos). A Widde serve cada preview pronto para o player nativo —
você só precisa do domain e do
collectionAppId, junto com o header
x-partner-key.
Primeiro GIF da coleção
Retorna o primeiro vídeo da coleção — ideal para o preview inicial da bolinha.
curl -H "x-partner-key: <SUA_PARTNER_KEY>" \ https://api-admin.widde.io/api/v2/partner/gif/charth.com.br/N5fLgU2wPyD
Listar todos os GIFs da coleção
Array ordenado de previews, pronto para alimentar widgets de qualquer formato.
curl -H "x-partner-key: <SUA_PARTNER_KEY>" \ https://api-admin.widde.io/api/v2/partner/gif/charth.com.br/N5fLgU2wPyD/list
13 Coleção em fullscreen
Para carregar a experiência completa da Widde dentro do app parceiro, abra a URL
do CDN num WebView passando domain,
collectionAppId e partnerPublicKey.
Carrega o player Widde em fullscreen, adaptado ao contexto do app.
https://cdn.widde.io/app?domain=charth.com.br&collectionAppId=N5fLgU2wPyD&partnerPublicKey=R8mKjT3xQbV Abrindo em um story específico
Por padrão, a URL acima abre a coleção no primeiro story. Isso funciona bem quando o widget que originou o clique tem apenas um preview (a bolinha flutuante, por exemplo). Mas quando o app já mostra vários previews ao mesmo tempo — carrosséis, grids, listas — o usuário escolhe qual quer assistir tocando em um card específico, e abrir sempre no primeiro vídeo quebra a expectativa: ele toca no terceiro card e vê o primeiro story.
storyKey do card tocado
Para resolver isso, basta acrescentar o parâmetro
storyKey ao final da URL — com o valor do
campo key retornado para cada item de
stories[] no
Collection Partner V2:
https://cdn.widde.io/app?domain=charth.com.br&collectionAppId=N5fLgU2wPyD&partnerPublicKey=R8mKjT3xQbV&storyKey=9f7c0f8e-3a72-4f3b-90d1-2b1f2d2b8a55
Omitir storyKey mantém o comportamento padrão
(abre no primeiro story). Use o parâmetro sempre que o widget que
originou o clique mostrar mais de um preview — carrosséis, grids,
listas, destaques — para que o player abra exatamente no vídeo que o
usuário escolheu.
Como é a experiência renderizada
Quando o usuário clica em qualquer widget (Story, Highlight, Carousel…), essa URL é aberta em fullscreen e renderiza o player completo da Widde — com barra de progresso, controles laterais, legenda do vídeo e drawer de produto com CTA de compra.
grande novidade
Elementos do player
Adicionar produto, dispara o
postMessage add_to_cart para o app nativo.
Drawer de compra
Ao tocar em Adicionar produto, a Widde abre dentro do mesmo WebView um drawer
com a versão completa do produto: galeria, variações disponíveis, quantidade, descrição
e CTA de adicionar ao carrinho. As variações sem estoque aparecem com tarja diagonal
e ficam não selecionáveis. Quando o cliente confirma, dispara o
postMessage add_to_cart para o app
nativo com o SKU selecionado e a quantidade.
Elementos do drawer
−/+ para ajustar antes de adicionar.
add_to_cart
com o SKU selecionado e a quantidade. O ícone de sacola ao lado abre o
carrinho atual sem fechar o player.
Esse player é carregado por cdn.widde.io/app dentro de um WebView.
O collectionAppId determina qual sequência de vídeos aparece na
barra de progresso no topo, e o domain é usado para aplicar o
branding e os styles configurados pelo lojista.
14 Provador AI — integração
Para integrar o Provador AI dentro do app parceiro, o fluxo
tem dois passos: (1) consultar o endpoint de configuração para saber se
a loja tem o Provador AI ativo e receber a iframeUrl pronta;
(2) abrir essa URL num WebView quando o usuário tocar no
botão "Como fica em mim?". Toda a experiência — upload da foto,
geração com IA, drawer de produto e CTA de compra — é renderizada pela Widde.
Visão geral do fluxo
- App consulta
GET /api/v2/partner/tryon/configpassando odomainda loja e aproduct-imageda PDP atual. -
Se a resposta vier com
allowed: false, o app não exibe o botão. Não tente abrir a WebView nesse caso — o acesso é bloqueado e a tela fica em branco. -
Se
allowed: true, o app exibe o botão e, ao tocar, abre aiframeUrlretornada diretamente num WebView (sem montá-la manualmente). -
Quando o usuário toca em Adicionar ao carrinho dentro do
provador, a Widde dispara o
postMessage
add_to_cartpara a bridge nativa do app — o mesmo contrato usado pelo player de coleção.
Verifica disponibilidade, retorna a iframeUrl pronta e a configuração visual do botão.
Header x-partner-key obrigatório. O
domain precisa estar autorizado para a chave
do parceiro — caso contrário a resposta é 401.
Faça a chamada via backend; o token nunca deve trafegar
no app cliente (veja autenticação).
Query params
| Param | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain | string | Sim |
Domínio da loja, sem protocolo e sem www.
Ex.: iorane.com.br.
|
product-image | string | Sim | URL pública da imagem do produto que o usuário vai experimentar. Sem ela o provador não consegue gerar o resultado de IA. |
product-name | string | Não | Nome do produto exibido no header do provador. Deve ser URL-encoded. Quando ausente, o provador exibe "este produto" como fallback. |
Exemplo de chamada
curl -H "x-partner-key: <SUA_PARTNER_KEY>" \ "https://api-admin.widde.io/api/v2/partner/tryon/config?domain=iorane.com.br&product-image=https%3A%2F%2Fiorane.com.br%2Farquivos%2Fcamisa-01.jpg&product-name=Camisa%20Kenia%20-%20On%C3%A7a"
Cenários de resposta
Loja com Provador AI ativo e configurado. O app deve exibir o botão e,
ao tocar, abrir iframeUrl num WebView.
{
"allowed": true,
"config": {
"buttonText": "Como fica em mim?",
"primaryColor": "#000000"
},
"iframeUrl": "https://cdn.widde.io/app?mode=tryon&domain=iorane.com.br&product-image=https%3A%2F%2Fiorane.com.br%2Farquivos%2Fcamisa-01.jpg&product-name=Camisa%20Kenia%20-%20On%C3%A7a"
} Loja sem plano ativo do Provador AI. Oculte o botão.
{
"allowed": false,
"reason": "no_subscription",
"config": null,
"iframeUrl": null
} Plano cancelado. Oculte o botão — o comportamento é o mesmo de "sem assinatura".
{
"allowed": false,
"reason": "subscription_canceled",
"config": null,
"iframeUrl": null
} Loja com plano ativo, mas sem personalização no painel Widde. O provador funciona com configurações padrão — o app ainda deve exibir o botão.
{
"allowed": true,
"config": null,
"iframeUrl": "https://cdn.widde.io/app?mode=tryon&domain=iorane.com.br&product-image=https%3A%2F%2Fiorane.com.br%2Farquivos%2Fcamisa-01.jpg&product-name=Camisa%20Kenia%20-%20On%C3%A7a"
} Referência · resposta
| Campo | Tipo | Descrição |
|---|---|---|
allowed | boolean |
Se a loja pode usar o Provador AI no momento. Quando
false, o botão deve ser ocultado.
|
reason | string |
Presente apenas quando allowed: false.
Veja a tabela de motivos abaixo.
|
config | object · null |
Configurações visuais do botão (ex.:
buttonText,
primaryColor) personalizadas pelo
lojista. null indica que a loja ainda
não personalizou — use os defaults da sua UI.
|
iframeUrl | string · null |
URL completa para abrir na WebView quando
allowed: true. Já vem com todos os
parâmetros necessários — abra-a diretamente, sem modificações.
|
Motivos para allowed: false
| Valor | Descrição | Ação no app |
|---|---|---|
no_subscription | Loja sem plano ativo do Provador AI. | Ocultar o botão. |
subscription_canceled | Plano cancelado pela loja. | Ocultar o botão. |
Erros HTTP
| Status | Cenário |
|---|---|
400 | Query param domain não enviado. |
401 |
Header x-partner-key ausente, inválido
ou domain não autorizado para o token.
|
O resultado pode ser cacheado por até 5 minutos por
domain. O allowed
muda apenas quando a assinatura da loja é alterada — não é necessário
consultar a cada produto visualizado dentro da mesma sessão.
Comportamento recomendado no app
const response = await fetch( '/api/v2/partner/tryon/config' + '?domain=' + domain + '&product-image=' + encodeURIComponent(productImage) + '&product-name=' + encodeURIComponent(productName), {headers: {'x-partner-key': PARTNER_KEY }} ); const data = await response.json(); if (!data.allowed) { return; } openWebView(data.iframeUrl);
WebView · referência informativa
A WebView do Provador AI é servida em
https://cdn.widde.io/app.
Não monte essa URL manualmente — use sempre a
iframeUrl retornada pelo endpoint, que já vem
com os parâmetros corretos. Os campos abaixo aparecem apenas para fins de
debug ou inspeção.
| Param | Obrigatório | Descrição |
|---|---|---|
mode=tryon | Sim | Ativa o Provador AI dentro do app. |
domain | Sim | Domínio da loja (analytics, créditos, isolamento de looks). |
product-image | Sim | URL da imagem do produto. Sem ela o provador não gera o resultado. |
product-name | Não | Nome exibido no header. Fallback: "este produto". |
Configurações da WebView
| Configuração | Valor |
|---|---|
| Orientação | Portrait |
| Zoom | Desabilitado (maximum-scale=1) |
| JavaScript | Habilitado (obrigatório) |
| LocalStorage | Habilitado (histórico de looks do usuário) |
| Câmera | Permissão necessária (captura de foto) |
O CTA Adicionar ao carrinho dentro do Provador AI usa o mesmo
contrato de bridge nativa do player de coleção. O payload chega como
action: "add_to_cart" com o array de
items — veja o detalhamento em
Carrinho · postMessage.
15 Carrinho · postMessage
Ao clicar em "adicionar ao carrinho" dentro do player, o evento atravessa a ponte WebView → nativo. O app parceiro recebe o payload e fica responsável por concluir a operação no ambiente da loja.
app.callback({action: 'add_to_cart', items: [ {sku: "12345", productId: "ABC123", sellerId: "1", variants: ["P", "Azul"], quantity: 2 } ] });
webkit.messageHandlers.callback.postMessage({action: 'add_to_cart', items: [ {sku: "12345", productId: "ABC123", sellerId: "1", variants: ["P", "Azul"], quantity: 2 } ] });
Parâmetros do payload
| Campo | Tipo | Descrição |
|---|---|---|
action | string | Sempre "add_to_cart" nesta operação. |
items[].sku | string | ID do SKU (variante específica). |
items[].productId | string | ID do produto pai. |
items[].sellerId | string | ID do vendedor — default "1". |
items[].variants | string[] | Variantes selecionadas (tamanho, cor etc.). |
items[].quantity | number | Quantidade. |
16 Fluxo resumido
Da abertura da coleção ao checkout, o ciclo de vida da experiência Widde no app parceiro tem quatro etapas — cada uma usa um endpoint ou ponte documentado nas seções anteriores.
- 01
App parceiro solicita a coleção
Via URL
cdn.widde.io/app?domain=&collectionAppId=aberta num WebView. - 02
Widde carrega o componente
O componente busca os dados da coleção pela API interna usando o
collectionAppId. - 03
Bolinhas flutuantes renderizadas
Com base na resposta de
/gif/.../list— o usuário vê o carrossel de previews. - 04
Interação e adição ao carrinho
O player completo abre. Ao adicionar ao carrinho, o postMessage
add_to_carté disparado para o app nativo.
17 Status codes
Todas as respostas seguem semântica HTTP padrão. Erros vêm em JSON com
statusCode, message e
error.
401 · token ausente ou inválido
{
"statusCode": 401,
"message": "Token is required for partner requests",
"error": "Unauthorized"
} 404 · empresa não encontrada
{
"statusCode": 404,
"message": "Company not found",
"error": "Not Found"
} 500 · erro interno do servidor
{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
} 18 Ambientes
A Widde opera em ambiente único de produção. Para testes pré-go-live,
a equipe emite uma x-partner-key de homologação
que aponta para uma loja de exemplo.
| Ambiente | API | App / CDN |
|---|---|---|
| Produção | api-admin.widde.io | cdn.widde.io |
19 Contato
Time dedicado a parceiros: dúvidas técnicas, emissão de
partner-key e homologação de novas integrações.
Resposta em até um dia útil.