How to interpret match status, score and period
Quando voce chama /fixtures e /fixtures/events, a resposta traz informacoes sobre em que etapa o jogo esta (1T, 2T, prorrogacao, penaltis) e o placar por periodo. Este tutorial mostra como ler esses campos com seguranca, com exemplos de jogos reais.
When you call /fixtures and /fixtures/events, the response carries information about the current period (1H, 2H, ET, PEN) and the score per period. This tutorial shows how to read those fields safely, with real-match examples.
status.short)
Cada fixture traz fixture.status com short, long e elapsed. Use sempre o short para classificar a etapa — o long pode repetir entre estados diferentes.
Each fixture carries fixture.status with short, long and elapsed. Always use short to classify the period — long can repeat across different states.
{
"fixture": {
"status": {
"long": "Match Finished",
"short": "PEN",
"elapsed": 120,
"extra": null
}
}
}
| short | long | Significado / Meaning |
|---|---|---|
TBD | Time To Be Defined | Horario a definir |
NS | Not Started | Nao comecou |
1H | First Half | 1o tempo em andamento |
HT | Halftime | Intervalo |
2H | Second Half | 2o tempo em andamento |
ET | Extra Time | Prorrogacao em andamento |
BT | Break Time | Intervalo entre as duas metades da prorrogacao |
P | Penalty In Progress | Disputa de penaltis em andamento |
SUSP | Match Suspended | Suspenso |
INT | Match Interrupted | Interrompido |
FT | Match Finished | Encerrado em 90' (regulamentar) |
AET | Match Finished | Decidido na prorrogacao |
PEN | Match Finished | Decidido nos penaltis |
PST / CANC / ABD | — | Adiado / cancelado / abandonado |
AWD / WO | — | W.O. tecnico / W.O. |
FT, AET e PEN compartilham o mesmo long = "Match Finished". Para diferenciar a etapa final, use status.short.
FT, AET and PEN all share long = "Match Finished". Always use status.short to tell them apart.
score)Exemplo real — final da Copa do Mundo 2022, Argentina 3x3 Franca, 4x2 nos penaltis:
Real example — 2022 World Cup final, Argentina 3-3 France, 4-2 on penalties:
{
"goals": { "home": 3, "away": 3 },
"score": {
"halftime": { "home": 2, "away": 0 },
"fulltime": { "home": 2, "away": 2 },
"extratime": { "home": 1, "away": 1 },
"penalty": { "home": 4, "away": 2 }
}
}
score.halftime — placar acumulado ao fim do 1T (apos 45'). / Cumulative score at the end of the 1st half.score.fulltime — placar acumulado ao fim dos 90' regulamentares. Nao inclui prorrogacao. / Cumulative score at the end of regulation. Does not include extra time.score.extratime — gols marcados apenas durante a prorrogacao (nao e cumulativo). null/null se nao houve ET. / Goals scored only during extra time. null/null when there was no ET.score.penalty — placar final da disputa de penaltis. null/null se nao houve shootout. / Final shootout score. null/null when there was no shootout.goals.home/away (top-level) — placar oficial = fulltime + extratime. Sem contar shootout. / Official score = fulltime + extratime, excluding shootout.
Em jogos decididos nos penaltis, o vencedor esta em teams.{home,away}.winner = true. Nao olhe para goals, porque ele continua mostrando o empate do tempo regulamentar + prorrogacao.
For matches decided on penalties, the winner is in teams.{home,away}.winner = true. Don't rely on goals — it still shows the draw from regulation + ET.
function finalStage(fixture) {
const { extratime, penalty } = fixture.score;
if (penalty.home !== null) return 'penalties';
if (extratime.home !== null) return 'extra-time';
return 'regulation';
}
Equivalente usando status.short (so funciona para jogos finalizados):
Equivalent using status.short (only for finished matches):
const stage = {
FT: 'regulation',
AET: 'extra-time',
PEN: 'penalties'
}[fixture.status.short];
O endpoint /fixtures/events nao traz um campo explicito de periodo. Voce infere pelo minuto em time.elapsed:
/fixtures/events doesn't expose an explicit period field. Infer it from time.elapsed:
Faixa elapsed / Range |
Periodo / Period |
|---|---|
-N a 0 | Pre-jogo (cartao no banco) / Pre-match |
1–45 | 1o tempo (extra = acrescimo do 1T) |
46–90 | 2o tempo (extra = acrescimo do 2T) |
91–105 | 1a metade da prorrogacao / 1st half of ET |
106–120 | 2a metade da prorrogacao / 2nd half of ET |
120 + comments="Penalty Shootout" | Cobranca da disputa de penaltis (extra = numero da cobranca) |
function eventPeriod(event) {
const { elapsed, extra } = event.time;
if (event.comments === 'Penalty Shootout') return 'shootout';
if (elapsed <= 0) return 'pre-match';
if (elapsed <= 45) return '1H';
if (elapsed <= 90) return '2H';
if (elapsed <= 105) return 'ET1';
return 'ET2';
}
Os dois aparecem como type="Goal", detail="Penalty". Para distinguir, olhe para comments e elapsed:
Both come as type="Goal", detail="Penalty". To tell them apart, look at comments and elapsed:
// Penalti em jogo / Open-play penalty
{
"time": { "elapsed": 23, "extra": null },
"type": "Goal",
"detail": "Penalty",
"comments": null
}
// Cobranca na disputa / Shootout kick
{
"time": { "elapsed": 120, "extra": 3 },
"type": "Goal",
"detail": "Missed Penalty",
"comments": "Penalty Shootout"
}
Na disputa, time.extra e o numero da cobranca (1, 2, 3, ...), e detail pode ser Penalty (convertido) ou Missed Penalty (perdido / defendido).
In the shootout, time.extra is the kick number (1, 2, 3, ...), and detail is either Penalty (scored) or Missed Penalty (saved / off-target).
fixture.periods — timestamps de inicio"periods": { "first": 1671375600, "second": 1671379200 }
Unix timestamps de inicio do 1T e 2T. Nao ha campos para inicio da prorrogacao nem do shootout — mesmo em jogos que foram para ET ou PEN, so vem first e second.
Unix timestamps for the 1H and 2H kickoffs. No fields for ET or shootout start — even matches that went to ET/PEN only carry first and second.
status.short (ao vivo: 1H/HT/2H/ET/BT/P; finalizado: FT/AET/PEN). Nao use long.score.halftime | fulltime | extratime | penalty. extratime e so os gols da prorrogacao; goals = ft + et sem shootout.teams.{home,away}.winner.elapsed=120 + comments="Penalty Shootout"; extra = numero da cobranca.?lang=pt-br, es, en ou de para receber nomes traduzidos como campos irmaos (name_long, name_short, name_sigla). Detalhes em Translations (i18n).
?lang=pt-br, es, en, or de to receive translated names as sibling fields (name_long, name_short, name_sigla). See Translations (i18n).