BilSports Widgets Documentation

Introdução

Primeiros Passos

O BilSports Widget é um Web Component — um elemento HTML personalizado que funciona em qualquer site sem dependências externas. Você cola um único <script> e adiciona quantos <bilsports-widget> quiser. Os dados carregam automaticamente, isolados dentro de um Shadow DOM.

Instalação rápida

<!-- Cole este script UMA VEZ no seu HTML -->
<script src="https://www.bilsports.com/widgets/v1.js" async defer></script>

<!-- Adicione widgets onde quiser -->
<bilsports-widget
  data-type="live-scores"
  data-api-key="pub_xxxxxxxxxxxx">
</bilsports-widget>
Nota: O widget renderiza dentro de um Shadow DOM — o CSS do seu site não afeta o visual do widget, e vice-versa. Você pode personalizar as cores via CSS Variables. CSS Variables.

Ligas populares

IDLigaPaís
39Premier LeagueInglaterra
140La LigaEspanha
135Serie AItália
78BundesligaAlemanha
61Ligue 1França
71BrasileirãoBrasil
13LibertadoresAmérica Sul
2Champions LeagueEuropa

Introdução

Segurança

Cada widget autentica suas requisições com uma chave pública passada via data-api-key. Chaves públicas começam com pub_ e são seguras para expor em HTML do lado do cliente.

Como obter uma chave

  1. Acesse bilsports.com/dashboard/widgets
  2. Copie sua chave pública (pub_...)
  3. Use-a no atributo data-api-key de qualquer elemento <bilsports-widget>

CORS e origem das requisições

O widget faz requisições diretamente para api.bilsports.com no browser do visitante. O CORS está configurado para aceitar qualquer origem — não é necessário adicionar seu domínio a uma allowlist.

Chave de demonstração

data-api-key="pub_demo_bilsports_2026"
Nota: Não use a chave de demo em produção. Ela é compartilhada, tem limite reduzido e pode ser suspensa sem aviso.

Introdução

Caching Data

Cada visita a uma página com widgets dispara uma ou mais requisições à API para buscar dados. Sem um sistema de cache, sua cota diária pode ser esgotada muito rapidamente.

Por que o cache importa

Imagine uma página que dispara 1 requisição por visitante e recebe 80 visitas por minuto. Isso representa 115 200 requisições por dia — sem cache.

Sem cache
115 200
requisições / dia
80 visits/min × 60 min × 24 h
Com cache de 60 s
1 440
requisições / dia
1 req/min × 60 min × 24 h

Com um cache de apenas 60 segundos, a primeira visita dispara a requisição e a resposta fica armazenada. As 79 visitas seguintes dentro desse intervalo são servidas diretamente do cache — reduzindo o consumo de 115 200 para 1 440 requisições por dia.

Como o BilSports implementa o cache

O BilSports já faz isso automaticamente. A infraestrutura mantém um cache Redis entre os widgets e a fonte de dados — todos os visitantes do seu site compartilham o mesmo resultado em cache. Você não precisa implementar nada: basta usar o widget.

Intervalos de cache por widget

Widgetdata-typeCacheO que atualiza
Live Scoreslive-scores60 sPlacares e status de partidas ao vivo
Standingsstandings5 minClassificação e pontuação da liga
Fixturesfixtures30 minCalendário de partidas
Top Scorerstop-scorers30 minArtilheiros e número de gols
Nota: Um widget Live Scores em uma página com 1 000 visitantes simultâneos ainda conta apenas 1 requisição por minuto no seu plano — não 1 000.

Introdução

Debugging

Se o widget não exibe as informações esperadas, é possível ativar o atributo data-show-errors="true" para exibir as mensagens de erro diretamente no widget e no console do navegador.

Ativando erros visíveis

<bilsports-widget
  data-type="live-scores"
  data-api-key="pub_xxxxxxxxxxxx"
  data-show-errors="true">
</bilsports-widget>

Causas comuns (lista não exaustiva)

rate_limit_exceededVocê atingiu o número diário de requisições. Aguarde a meia-noite UTC ou faça upgrade de plano.
invalid_tagsAtributos preenchidos incorretamente. Verifique data-type, data-league e outros parâmetros.
invalid_keySua API-KEY é inválida ou foi revogada. Confira o valor de data-api-key no dashboard.
league_not_foundID de liga inválido. Consulte a lista de IDs suportados em Primeiros Passos.
network_errorFalha de rede ao atingir api.bilsports.com. Verifique conectividade ou bloqueio de CSP.

Content Security Policy (CSP)

/* Cabeçalho Content-Security-Policy */
script-src  'self' https://www.bilsports.com;
connect-src 'self' https://api.bilsports.com;
img-src     'self' https://api.bilsports.com data:;

Introdução

Logos / Imagens

Os widgets servem logos e fotos pelo nosso próprio proxy em api.bilsports.com/media. Essas chamadas não contam para a sua cota diária — são gratuitas — porém estão sujeitas a limites de requisições por segundo e por minuto.

Para alto volume ou latência crítica, recomendamos configurar sua própria CDN com um Pull Zone apontando para api.bilsports.com/media. Uma vez feito isso, informe a URL base com o atributo data-logo-url.

Usando sua própria CDN (opcional)

💡

Serviços como BunnyCDN permitem criar um Pull Zone apontando para api.bilsports.com/media. Os arquivos são cacheados na CDN na primeira requisição e servidos diretamente dela nas seguintes — zero impacto na nossa infra.

<bilsports-widget
  data-type="standings"
  data-api-key="pub_xxxxxxxxxxxx"
  data-league="39"
  data-logo-url="https://cdn.seusite.com">
</bilsports-widget>

Quando data-logo-url está definido, o widget substitui automaticamente api.bilsports.com/media pelo valor informado, mantendo o caminho dos arquivos (ex.: /football/teams/39.png).

Formatos e tamanhos

TipoFormatoTamanhoURL via BilSports
Logo de clubePNG128 × 128api.bilsports.com/media/football/teams/{id}.png
Logo de ligaPNG64 × 64api.bilsports.com/media/football/leagues/{id}.png
Foto de jogadorPNG128 × 128api.bilsports.com/media/football/players/{id}.png

Fallback

Quando um logo não está disponível, o widget exibe automaticamente um ícone genérico com as iniciais do nome. Não é necessário nenhum tratamento especial no seu código.

Nota: Para exibir logos fora do widget, lembre-se de adicionar api.bilsports.com à diretiva img-src do seu CSP — ou o domínio da sua CDN, se estiver usando data-logo-url.

Aviso legal

Logos, imagens e marcas disponibilizados pela API são fornecidos exclusivamente para fins de identificação e descrição (ex.: identificar ligas, times, jogadores ou estádios). O BilSports não detém nenhum desses ativos visuais e não reivindica qualquer direito de propriedade intelectual sobre eles. Alguns conteúdos podem estar sujeitos a direitos de propriedade intelectual ou marcas registradas de terceiros (incluindo, sem limitação, ligas, federações ou clubes). O uso de tais conteúdos em seus aplicativos, sites ou produtos pode exigir autorização ou licenciamento adicional dos respectivos detentores de direitos.


Introdução

Todos os widgets

Referência rápida de todos os tipos de widget. Clique num card disponível para ir à documentação completa.

Disponíveis

Live Scores
data-type="live-scores"

Placar em tempo real com fallback automático para resultados recentes ou próximas partidas quando não há jogos ao vivo. Recarrega automaticamente a cada 60 segundos.

60sVer docs →
Leagues
data-type="leagues"

Lista de todas as ligas disponíveis na plataforma, com logo e país de origem.

1hrVer docs →
League Schedule
data-type="league"

Calendário de partidas de uma liga, agrupado por data. Exibe placares de jogos encerrados e horários dos próximos.

30minVer docs →
Games
data-type="games"

Lista de partidas de qualquer data, liga ou time. Exibe placar ao vivo, resultado final ou horário de início.

5minVer docs →
Fixtures
data-type="fixtures"

Próximas partidas de qualquer liga ou de todas as ligas. Agrupadas por data. Recarrega a cada 30 minutos.

30minVer docs →
Match Details
data-type="game"

Detalhes de uma partida específica: placar, status ao vivo e linha do tempo de eventos (gols e cartões).

60sVer docs →
Head-to-Head
data-type="h2h"

Histórico de confrontos diretos entre dois times com barra de proporção (vitórias / empates) e lista das últimas partidas.

1hrVer docs →
Standings
data-type="standings"

Tabela de classificação para qualquer competição de futebol. As 4 primeiras posições ficam em destaque (vaga na Champions). Recarrega a cada 5 minutos.

5minVer docs →
Team Profile
data-type="team"

Perfil de um time: logo, liga, forma recente e estatísticas percentuais da temporada (vitórias, over 2.5, clean sheet).

30minVer docs →
Top Scorers
data-type="top-scorers"

Artilheiros de qualquer liga de futebol. Exibe colocação, foto, nome, equipe e número de gols. Recarrega a cada 30 minutos.

30minVer docs →
Player Profile
data-type="player"

Perfil de um jogador: foto, posição, time atual, gols, assistências, jogos e minutos por jogo na temporada.

30minVer docs →