Como interpretar status, placar e periodo do jogo

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.

1. Codigos de periodo / Period codes (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
TBDTime To Be DefinedHorario a definir
NSNot StartedNao comecou
1HFirst Half1o tempo em andamento
HTHalftimeIntervalo
2HSecond Half2o tempo em andamento
ETExtra TimeProrrogacao em andamento
BTBreak TimeIntervalo entre as duas metades da prorrogacao
PPenalty In ProgressDisputa de penaltis em andamento
SUSPMatch SuspendedSuspenso
INTMatch InterruptedInterrompido
FTMatch FinishedEncerrado em 90' (regulamentar)
AETMatch FinishedDecidido na prorrogacao
PENMatch FinishedDecidido nos penaltis
PST / CANC / ABDAdiado / cancelado / abandonado
AWD / WOW.O. tecnico / W.O.
Atencao: FT, AET e PEN compartilham o mesmo long = "Match Finished". Para diferenciar a etapa final, use status.short.
Heads up: FT, AET and PEN all share long = "Match Finished". Always use status.short to tell them apart.

2. Placar por periodo / Score per period (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 }
  }
}

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.

3. Heuristica para classificar a etapa final / Final-stage heuristic

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

4. Periodo de cada evento / Period of each event

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 0Pre-jogo (cartao no banco) / Pre-match
1451o tempo (extra = acrescimo do 1T)
46902o tempo (extra = acrescimo do 2T)
911051a metade da prorrogacao / 1st half of ET
1061202a 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';
}

5. Penalti em jogo aberto x disputa de penaltis / Open-play penalty vs shootout

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

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

Resumo / TL;DR

Idiomas: Adicione ?lang=pt-br, es, en ou de para receber nomes traduzidos como campos irmaos (name_long, name_short, name_sigla). Detalhes em Translations (i18n).
Languages: Add ?lang=pt-br, es, en, or de to receive translated names as sibling fields (name_long, name_short, name_sigla). See Translations (i18n).

Back to Football API docs