BilSports Widgets Documentation
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>Ligas populares
| ID | Liga | País |
|---|---|---|
| 39 | Premier League | Inglaterra |
| 140 | La Liga | Espanha |
| 135 | Serie A | Itália |
| 78 | Bundesliga | Alemanha |
| 61 | Ligue 1 | França |
| 71 | Brasileirão | Brasil |
| 13 | Libertadores | América Sul |
| 2 | Champions League | Europa |
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
- Acesse bilsports.com/dashboard/widgets
- Copie sua chave pública (pub_...)
- 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"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.
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
| Widget | data-type | Cache | O que atualiza |
|---|---|---|---|
| Live Scores | live-scores | 60 s | Placares e status de partidas ao vivo |
| Standings | standings | 5 min | Classificação e pontuação da liga |
| Fixtures | fixtures | 30 min | Calendário de partidas |
| Top Scorers | top-scorers | 30 min | Artilheiros e número de gols |
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:;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
| Tipo | Formato | Tamanho | URL via BilSports |
|---|---|---|---|
| Logo de clube | PNG | 128 × 128 | api.bilsports.com/media/football/teams/{id}.png |
| Logo de liga | PNG | 64 × 64 | api.bilsports.com/media/football/leagues/{id}.png |
| Foto de jogador | PNG | 128 × 128 | api.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.
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.
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
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.
data-type="leagues"Lista de todas as ligas disponíveis na plataforma, com logo e país de origem.
data-type="league"Calendário de partidas de uma liga, agrupado por data. Exibe placares de jogos encerrados e horários dos próximos.
data-type="games"Lista de partidas de qualquer data, liga ou time. Exibe placar ao vivo, resultado final ou horário de início.
data-type="fixtures"Próximas partidas de qualquer liga ou de todas as ligas. Agrupadas por data. Recarrega a cada 30 minutos.
data-type="game"Detalhes de uma partida específica: placar, status ao vivo e linha do tempo de eventos (gols e cartões).
data-type="h2h"Histórico de confrontos diretos entre dois times com barra de proporção (vitórias / empates) e lista das últimas partidas.
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.
data-type="team"Perfil de um time: logo, liga, forma recente e estatísticas percentuais da temporada (vitórias, over 2.5, clean sheet).
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.
data-type="player"Perfil de um jogador: foto, posição, time atual, gols, assistências, jogos e minutos por jogo na temporada.