Widde v2 · stable

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.

API operacional Última atualização · Abr 2026 Base URL · api-admin.widde.io

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

  1. Solicitação de acesso — o parceiro abre contato com o time da Widde indicando qual loja deseja integrar.
  2. Liberação dos identificadores — o time libera o acesso à loja no painel. A partir desse momento o collectionAppId de cada coleção daquela loja passa a aparecer na listagem de coleções, viabilizando a leitura via API.
  3. Geração da chave de API — o time gera a x-partner-key exclusiva do parceiro. É essa chave que autentica todas as chamadas (veja autenticação).
  4. Entrega — o parceiro recebe da Widde dois itens para começar: o domínio da loja autorizada (no formato charth.com.br — sem https:// e sem www.) 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.

COLEÇÃO · container
GIF
Camisa Linho
R$ 199,90
GIF 2
Hidra Lábios
R$ 49,90
4
GIF
Stick Cor
R$ 59,90
1 Coleção
STORY · fullscreen
Hidra Lábios
R$ 49,90
3 Story (fullscreen)
  1. 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. 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 por cdn.widde.io/app).
  3. 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. 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.

  1. 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 collectionAppId correspondente.
  2. Preview em GIF — para cada widget renderizado, o app chama o CDN de GIFs passando o collectionAppId e 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.
  3. Player em fullscreen — quando o usuário toca em um widget, o app abre cdn.widde.io/app num 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.
→ Resumindo

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.

ViewType · Story
Story
Bolinha flutuante fixa no canto inferior esquerdo, acompanha o scroll em qualquer página da loja.
Story floating · bottom-left 1 coleção
ViewType · Highlight
Destaque da loja
Sequência de círculos horizontais na home. Similar aos Stories do Instagram — cada círculo abre uma coleção diferente.
Highlight shapper: circle N coleções
ViewType · HighlightTwo / Three
Destaque de produto
Vídeos exibidos como miniaturas dentro da galeria da PDP, ao lado das fotos do produto. O cliente alterna entre foto e vídeo no mesmo seletor.
HighlightTwo HighlightThree galeria do produto
ViewType · Carousel
Carrossel
Cards grandes com produto e preço abaixo. Navegação lateral com setas, ideal para vitrines de coleções com shoppable videos.
Carousel CarouselTwo wrapper: product

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.

Context · Home
Home da loja
Highlight no topo (logo após o hero banner) e Story flutuando fixo no canto inferior esquerdo, acompanhando o scroll.
Highlight Story topo + floating
Context · Categoria
Página de categoria
Carousel (ou Highlight) no topo da listagem, logo abaixo dos filtros. Pode conter coleções relacionadas à categoria navegada.
Carousel Highlight topo da listagem
Context · PDP
Página de produto
Vídeo Widde aparece como thumbnail dentro da galeria do produto, ao lado das fotos convencionais. Ao clicar, o player fullscreen é aberto mantendo o contexto do produto.
HighlightTwo HighlightThree galeria do produto
Context · Qualquer página
Story flutuante
Bolinha fixa no canto inferior esquerdo, que acompanha o scroll. Persiste em home, categoria, PDP e outras páginas da loja.
Story position: floating bottom-left

Mapeamento ViewType → Formato

ViewType (API)FormatoContexto de uso
StoryStoryBolinha flutuante fixa (bottom-left) em qualquer página
HighlightDestaque da lojaFileira de círculos no topo de home e categorias
HighlightTwo / HighlightThreeDestaque de produtoMiniatura dentro da galeria da PDP, junto das fotos
Carousel / CarouselTwoCarrosselVitrine 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.

Shape
circle
Shape
flower
Shape
rectangle
Shape
heart

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.

→ Customização visual

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.

1Ponto de entrada · PDP
R$ 399,90 R$ 299,90 até 3x de R$ 99,96 sem juros no cartão de crédito R$ 290,90 Economize R$ 9,00 3% DESCONTO Verifique se você selecionou uma variação Comprar Como fica em mim?
Botão "Como fica em mim?"
Exibido logo abaixo do CTA de compra na PDP. Identificado pelo ícone de sparkle (✨) e pelo estilo secundário (outline preto) para não competir com o botão primário Comprar.
PosiçãoAbaixo do CTA principal de compra
EstiloOutline preto · ícone sparkle
2Drawer aberto · AI
R$ 299,90 Bermuda Sarja Premium Vidic Preto Provador AI Visualize o caimento perfeito antes mesmo de tocar no tecido. Nossa tec- nologia analisa sua silhueta. SUA FOTO IA RESULTADO 01 CARREGUE SUA FOTO 02 VEJA O RESULTADO COM IA 03 ADICIONE A SACOLA Começar POWERED BY WIDDE
Drawer do Provador AI
Ao clicar no botão, abre um drawer lateral com o fluxo completo: upload da foto do cliente, geração da imagem via AI usando o produto da PDP, e CTA para adicionar à sacola.
01Carregue sua foto
02Veja o resultado com IA
03Adicione à sacola
Em breve

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.

1Banner principal
TROCAS E DEVOLUÇÕES GARANTIDAS brand brand Live 43 Viewers Dermage Use o cupom: LIVE224 K Kamilly Vianna amando! Dermage
Banner principal
A live ocupa o banner principal da home assim que entra no ar. Mostra contagem de viewers, chat com mensagens fixadas (ex: cupons) e controles de som/fullscreen.
2Mini-player ao scroll
nprove C Stic... 169,00 R$ 118,28 EXOCARE... R$ 319,00 Hyalu... R$ 13... Mais vendidos Best-Seller PHOTO Photoage Water Best-Seller Ineout C... LIVE
Mini-player flutuante
Quando o cliente faz scroll para fora do banner, a live se transforma em um mini-player no canto inferior direito que continua tocando enquanto ele navega.
3Live em fullscreen
brand Live 39 Viewers DESTAQUE Hyaluage Acqua Filler R$ 139,00 Dermage Use o cupom: LIVE224 K Kamilly amando! Dermage CUPOM: LIVE22 Enviar mensagem...
Live em fullscreen
Ao tocar no mini-player ou abrir a live, o player ocupa a tela inteira. Inclui destaque do produto sincronizado pelo apresentador, chat ao vivo e input de mensagem.

Componentes da experiência

Pill LIVE + viewers
Indicador ao vivo com bolinha verde e contagem de espectadores em tempo real.
Chat ao vivo
Mensagens da loja (com selo de verificado) e dos espectadores aparecem sobrepostas no vídeo.
Cupons fixados
A loja pode fixar cupons de desconto e prazo limite no feed do chat.
Destaque de produto
O apresentador destaca o produto que está sendo mostrado, com nome e preço sincronizados.
Mini-player flutuante
A live continua tocando em um card no canto inferior direito enquanto o cliente navega.
Engajamento
Reações em tempo real (likes), input de mensagem e ícone de sacola para acesso rápido.
⏳ Integração para parceiros

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].

Em breve

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

Tile destaque
O primeiro card ocupa 2× o tamanho dos demais e exibe o produto vinculado com nome, preço e ícones de carrinho/sacola.
Grid responsivo
Layout de 4 colunas em desktop que se adapta automaticamente em telas menores, mantendo a hierarquia visual.
Busca + categorias
Versão página dedicada inclui campo de pesquisa e abas roláveis com as categorias configuradas pelo lojista.
CTA "Ver todos"
O preview compacto traz um botão para abrir a página completa do Explorar e continuar a descoberta.
⏳ Integração para parceiros

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.

http
 x-partner-key: <SUA_PARTNER_KEY> Content-Type: application/json 
⚠ Trate o token como segredo

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.

v1 · legacy

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.

GET /api/v1/partner/pages?domain=:domain

Lista as collections mapeadas por URL (PDP, home, categoria) da loja.

bash
 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" 
javascript
 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();
json · 200 OK
{
  "collections": {
    "bata-dalia-amarelo-angu-1/p": {
      "Story": "H6sCpJ1tDyW"
    },
    "bata-rebeca-off-1/p": {
      "Story": "M7vXqA4kZsB"
    }
  }
}
→ Migre para a V2

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/.

v2 · stable

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.

GET /api/v2/partner/pages?domain=:domain

Collections + styles por tipo de widget.

★ Recomendado

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

json · 200 OK
{
  "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

CampoTipoDescriçã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

CampoTipoDescrição
colors.primarystring · nullCor primária. null usa o padrão da empresa.
colors.secondarystring · nullCor secundária. null usa o padrão da empresa.
shapper.typestringcircle · flower · rectangle · heart
shapper.stylestringdefault · border
shapper.roundednumberArredondamento em px.
shapper.borderWidthnumberLargura da borda em px.
wrapper.typestringproduct · simple-text
playRule.typestringPlayAll · PlayCenter
carouselTitleobject · nullConfiguração do título (apenas Carousel).
block.mobileobjectLayout 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.

Legacy
V1
Formato flat — collections vêm como string. Sem styles. Mantido apenas por compatibilidade.
Atual
Stable
V2
Formato enriquecido — inclui configuração visual por tipo de widget. Recomendado para todas as integrações novas.
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
v2 · stable

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.

GET /api/v2/partner/collections/:domain/:collectionAppId

Stories + produtos da coleção. Path params: domain (ex.: charth.com.br) e collectionAppId.

Autenticação

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

bash
curl -H "x-partner-key: <SUA_PARTNER_KEY>" \
https://api-admin.widde.io/api/v2/partner/collections/charth.com.br/ZgfM4pSWdR0 

Exemplo de resposta

json · 200 OK
{
  "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:

9:41
PARTNER APP
COLEÇÃO
Lookbook Verão
Camisa Linho Areia
R$ 199,90 R$ 249,90
Sem produto vinculado

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

CampoTipoDescriçã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[]

CampoTipoDescriçã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[]

CampoTipoDescrição
titlestringNome do produto.
mainImagestring · nullURL da imagem principal do produto (geralmente servida pelo CDN da loja).
pricenumberPreço atual em double (na moeda da loja).
comparePricenumber · nullPreço "de" para exibir desconto. null quando não houver promoção.
urlstringURL canônica do produto na loja.
handlerstring · nullSlug/handle do produto (útil para deep linking dentro do app).

Erros mais comuns

StatusCenário
400collectionAppId ausente ou vazio.
401Header x-partner-key ausente, inválido ou não autorizado para o domain informado.
404domain 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

GET /api/v2/partner/gif/:domain/:collectionAppId

Retorna o primeiro vídeo da coleção — ideal para o preview inicial da bolinha.

bash
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

GET /api/v2/partner/gif/:domain/:collectionAppId/list

Array ordenado de previews, pronto para alimentar widgets de qualquer formato.

bash
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.

GET cdn.widde.io/app?domain=:domain&collectionAppId=:id&partnerPublicKey=:key

Carrega o player Widde em fullscreen, adaptado ao contexto do app.

bash
 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.

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:

bash
 https://cdn.widde.io/app?domain=charth.com.br&collectionAppId=N5fLgU2wPyD&partnerPublicKey=R8mKjT3xQbV&storyKey=9f7c0f8e-3a72-4f3b-90d1-2b1f2d2b8a55 
Sem storyKey · abre no primeiro

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.

e essa é a nossa
grande novidade
Stick Cor Multifuncional
R$ 59,90
Adicionar produto

Elementos do player

1
Barra de progresso Indica o vídeo atual e quantos restam na coleção.
2
Logo · WIDDE Branding fixo da experiência no canto superior esquerdo.
3
Botão fechar (X) Fecha o player e retorna ao contexto anterior do app.
4
Ações laterais Favoritar · sacola · compartilhar · toggle de som.
5
Legenda do vídeo Texto sobreposto controlado pelo lojista no Admin Widde.
6
Drawer de produto + CTA Ao tocar em 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.

Hidra Lábios
R$ 49,90
Bege Translúcido Castanho Translúcido Coral Translúcido Marrom Translúcido Natural Translúcido Pétala Translúcido Púrpura Translúcido Rosa Translúcido Rosê Translúcido Vermelho Translúcido
1 +
Adicionar ao carrinho

Elementos do drawer

1
Galeria do produto Carrossel com as fotos oficiais da PDP, mantidas em sincronia com a loja.
2
Cabeçalho · nome e preço Identificação do produto vinda do catálogo.
3
Variações Cores, tamanhos e demais SKUs configurados na loja, com swatch + nome lado a lado. Itens sem estoque aparecem com tarja diagonal e ficam não selecionáveis. Selecionar um swatch disponível atualiza a galeria.
4
Quantidade Stepper −/+ para ajustar antes de adicionar.
5
CTA + atalho da sacola Adicionar ao carrinho dispara o postMessage add_to_cart com o SKU selecionado e a quantidade. O ícone de sacola ao lado abre o carrinho atual sem fechar o player.
→ Relação com a URL

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.

v2 · stable

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

  1. App consulta GET /api/v2/partner/tryon/config passando o domain da loja e a product-image da PDP atual.
  2. 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.
  3. Se allowed: true, o app exibe o botão e, ao tocar, abre a iframeUrl retornada diretamente num WebView (sem montá-la manualmente).
  4. Quando o usuário toca em Adicionar ao carrinho dentro do provador, a Widde dispara o postMessage add_to_cart para a bridge nativa do app — o mesmo contrato usado pelo player de coleção.
GET /api/v2/partner/tryon/config?domain=:domain&product-image=:url&product-name=:name

Verifica disponibilidade, retorna a iframeUrl pronta e a configuração visual do botão.

Autenticaçã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

ParamTipoObrigatórioDescriçã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

bash
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.

json · 200 OK · allowed
{
  "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.

json · 200 OK · blocked
{
  "allowed": false,
  "reason": "no_subscription",
  "config": null,
  "iframeUrl": null
}

Plano cancelado. Oculte o botão — o comportamento é o mesmo de "sem assinatura".

json · 200 OK · blocked
{
  "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.

json · 200 OK · allowed
{
  "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

CampoTipoDescriçã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

ValorDescriçãoAçã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

StatusCenário
400 Query param domain não enviado.
401 Header x-partner-key ausente, inválido ou domain não autorizado para o token.
Cache de até 5 minutos

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

javascript · pseudocódigo
 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.

ParamObrigatórioDescriçã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çãoValor
OrientaçãoPortrait
ZoomDesabilitado (maximum-scale=1)
JavaScriptHabilitado (obrigatório)
LocalStorageHabilitado (histórico de looks do usuário)
CâmeraPermissão necessária (captura de foto)
→ Adição ao carrinho

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.

javascript · android bridge
 app.callback({action: 'add_to_cart',
items: [
{sku: "12345",  productId: "ABC123",  sellerId: "1",  variants:  ["P", "Azul"],  quantity: 2  }
]
});
javascript · ios webkit
 webkit.messageHandlers.callback.postMessage({action: 'add_to_cart',
items: [
{sku: "12345",
productId: "ABC123",
sellerId: "1",
variants:  ["P", "Azul"],
quantity: 2 }
]
});

Parâmetros do payload

CampoTipoDescrição
actionstringSempre "add_to_cart" nesta operação.
items[].skustringID do SKU (variante específica).
items[].productIdstringID do produto pai.
items[].sellerIdstringID do vendedor — default "1".
items[].variantsstring[]Variantes selecionadas (tamanho, cor etc.).
items[].quantitynumberQuantidade.

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.

  1. 01

    App parceiro solicita a coleção

    Via URL cdn.widde.io/app?domain=&collectionAppId= aberta num WebView.

  2. 02

    Widde carrega o componente

    O componente busca os dados da coleção pela API interna usando o collectionAppId.

  3. 03

    Bolinhas flutuantes renderizadas

    Com base na resposta de /gif/.../list — o usuário vê o carrossel de previews.

  4. 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.

200 OK 401 Unauthorized 404 Not Found 500 Server Error

401 · token ausente ou inválido

json
{
  "statusCode": 401,
  "message": "Token is required for partner requests",
  "error": "Unauthorized"
}

404 · empresa não encontrada

json
{
  "statusCode": 404,
  "message": "Company not found",
  "error": "Not Found"
}

500 · erro interno do servidor

json
{
  "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.

WIDDE · API Documentation v2.0 · abr 2026