Pular para o conteúdo principal

POST /ipulse/scoreboard

Retorna o placar de hoje e amanhã para uma competição de futebol, com dados em tempo real via Sportmonks. Em caso de rate limit (429) da Sportmonks, a rota cai automaticamente para a API balldontlie (apenas Copa do Mundo).

Consulte a Visão Geral do IPulse para entender autenticação e ligas disponíveis.

Autenticação

Requer header ifw-ipulse-key com a API key fixa configurada no ambiente.

HeaderValor
ifw-ipulse-key<api_key>

Limite de requisições (throttling)

Cada solicitante (partner) pode fazer no máximo 80 requisições por dia civil (reset à meia-noite no fuso America/Sao_Paulo). Ao estourar, a rota responde 429 sem processar o placar.

  • O contador é por solicitante resolvido: loopTalentWeb, qualquer outro valor (ou ausente) → Nexai.
  • O limite é configurável em runtime via feature_settings (contexto Scoreboard, chave DailyRequestLimit); sem essa linha, vale o padrão 80.
  • Toda resposta inclui os headers abaixo; o 429 inclui também Retry-After.
HeaderDescrição
X-RateLimit-LimitCota diária do solicitante
X-RateLimit-RemainingRequisições restantes no dia
X-RateLimit-ResetUnix timestamp do próximo reset (meia-noite São Paulo)
Retry-After(apenas no 429) segundos até o reset

Request

Query Parameters

ParâmetroTipoObrigatórioDescrição
leagueIdintID da liga no Sportmonks. Padrão: 648 (Campeonato Brasileiro Série A). Ignorado quando a flag Active está ligada no feature_settings.
referenceDatedatetimeData de referência. Padrão: hoje
partnerstringIdentifica o solicitante para log e throttling: loop ou nexai. Padrão: nexai
curl -s -X POST "https://servicos.ifollowtech.com.br/ipulse/scoreboard?leagueId=648&partner=loop" \
-H "ifw-ipulse-key: SUA_API_KEY"

Response

200 OK

{
"ShortMessage": "SCOREBOARD",
"Response": {
"competition": {
"name": "Campeonato Brasileiro Série A",
"series": "2025",
"stage": "REGULAR_SEASON",
"stage_name_pt": "Temporada Regular",
"round": "Rodada 12",
"logo": "https://cdn.sportmonks.com/images/soccer/leagues/648.png"
},
"result": {
"scoreboard": {
"update_required": true,
"games": [
{
"match_id": "19082541",
"scheduled_at": "2025-05-04T18:00:00-03:00",
"scheduled_date": "2025-05-04",
"scheduled_time": "18:00",
"stage": "REGULAR_SEASON",
"stage_name_pt": "Temporada Regular",
"home_team": {
"id": 2456,
"name": "Flamengo",
"name_pt": "Flamengo",
"acronym": "FLA",
"logo": "https://cdn.sportmonks.com/images/soccer/teams/8/2456.png"
},
"away_team": {
"id": 2450,
"name": "Palmeiras",
"name_pt": "Palmeiras",
"acronym": "PAL",
"logo": "https://cdn.sportmonks.com/images/soccer/teams/2/2450.png"
},
"home_score": 1,
"away_score": 0,
"status": "IN_PROGRESS",
"minute": 67,
"progress_percentage": 74
}
]
}
},
"metadata": {
"source": "sportmonks",
"region": "BR",
"last_update": "2025-05-04T18:22:00",
"ping": {
"active": true,
"status": "ATIVO",
"last_ping_at": "2025-05-04T18:22:00-03:00"
}
}
},
"Messages": [],
"HttpStatusCode": 200
}

Fuso horário: todos os horários de partida (scheduled_at, scheduled_time) são retornados no fuso de São Paulo (-03:00). A lista games combina hoje e amanhã, ordenada por status → horário → id.

Descrição dos campos de resposta

competition

CampoTipoDescrição
namestringNome da competição (PT-BR quando disponível)
seriesstringNome da temporada/série
stagestringFase da competição em código (ver tabela de fases abaixo)
stage_name_ptstringNome da fase em português (ex: "Quartas de Final")
roundstringRodada atual
logostringURL do logo da competição

Fases da competição (stage)

Valorstage_name_pt
REGULAR_SEASONTemporada Regular
GROUP_STAGEFase de Grupos
ROUND_OF_32Fase de 32
ROUND_OF_16Oitavas de Final
QUARTER_FINALSQuartas de Final
SEMI_FINALSSemifinais
THIRD_PLACE_FINALDisputa de 3º Lugar
FINALFinal
PLAY_OFFSPlayoffs
QUALIFICATIONClassificatória
PRELIMINARY_ROUNDRodada Preliminar
UNKNOWNFase não identificada

result.scoreboard

CampoTipoDescrição
update_requiredbooleantrue se houver partida em andamento — indica que o cliente deve atualizar periodicamente
gamesarrayLista de partidas (hoje + amanhã) ordenadas por status → horário → id

Partida (games[])

CampoTipoDescrição
match_idstringID da partida (Sportmonks ou balldontlie, conforme a fonte)
scheduled_atstringData e hora em São Paulo (yyyy-MM-ddTHH:mm:ss-03:00)
scheduled_datestringData no formato yyyy-MM-dd (São Paulo)
scheduled_timestringHora no formato HH:mm (São Paulo)
stagestringFase da partida em código
stage_name_ptstringNome da fase em português
home_team.idintID do time/seleção mandante
home_team.namestringNome do mandante (original)
home_team.name_ptstringNome do mandante em português (quando seleção)
home_team.acronymstringSigla do mandante
home_team.logostringURL do escudo do mandante (vazio no fallback balldontlie)
away_team.*Mesmo padrão do home_team
home_scoreintGols do mandante
away_scoreintGols do visitante
statusstringStatus da partida (ver tabela abaixo)
minuteintMinuto atual da partida (0 se não iniciada; sempre 0 no fallback balldontlie)
progress_percentageintPercentual de progresso de 0 a 100

Status possíveis

ValorDescrição
SCHEDULEDPartida não iniciada
IN_PROGRESSPartida em andamento
FINISHEDPartida encerrada
POSTPONEDPartida adiada
CANCELLEDPartida cancelada
ABANDONEDPartida abandonada
SUSPENDEDPartida suspensa
UNKNOWNStatus não mapeado — tratar como indisponível

metadata

CampoTipoDescrição
sourcestringFonte dos dados: "sportmonks" (normal) ou "balldontlie" (fallback de 429)
regionstringRegião dos dados ("BR")
last_updatestringData/hora da geração da resposta (São Paulo)
ping.activebooleanIndicador de disponibilidade
ping.statusstringStatus textual ("ATIVO")
ping.last_ping_atstringTimestamp do último ping (-03:00)

Fallback automático (Sportmonks 429 → balldontlie)

Quando a Sportmonks retorna 429 (rate limit), a rota cai automaticamente para a API balldontlie e o campo metadata.source passa a ser "balldontlie". Limitações desse modo:

  • Apenas Copa do Mundo (temporadas 2018/2022/2026). Não substitui dados de outras ligas (ex.: Brasileirão). A temporada usada é o ano da data de referência.
  • minute sempre 0 e progress_percentage baseado apenas no status (sem minuto ao vivo).
  • logo dos times vem vazio (a balldontlie não fornece escudos).
  • O filtro por MatchId da flag (específico de IDs Sportmonks) não se aplica no fallback.

Requer a variável de ambiente BALLDONTLIE_API_KEY configurada no servidor.

401 Unauthorized

Header ifw-ipulse-key ausente ou inválido.

429 Too Many Requests

Solicitante (partner) atingiu o limite diário. Veja os headers X-RateLimit-* e Retry-After.

{
"ShortMessage": "RATE_LIMIT_EXCEEDED",
"Response": null,
"Messages": [
{
"Type": "Error",
"Code": "429",
"Message": "Limite diário de 80 requisições atingido para 'Nexai'. Tente novamente após 2026-06-01T00:00:00-03:00."
}
],
"HttpStatusCode": 429
}

500 Internal Server Error

Erro ao buscar o placar (ex.: erro da Sportmonks diferente de 429, ou falha do fallback).

503 Service Unavailable

Variável de ambiente IPULSE_API_KEY não configurada no servidor.