{
  "schemaVersion": 1,
  "updated": "2026-11-13",
  "documentation": "https://www.scorebat.com/football-widgets/docs/",
  "baseUrl": "https://www.scorebat.com",
  "configuration": {
    "parameter": "pref",
    "encoding": "URL-encoded JSON object",
    "token": "Embed token from builder; not the Video API request token",
    "case": "Preference keys are lowercase",
    "defaultMeaning": "Runtime behavior when omitted, not builder defaults",
    "unsupported": "Preferences not listed for a widget must not be assumed to work",
    "accountSettings": [
      "ui.color",
      "ui.barColor",
      "matchviewUrl",
      "competitionUrl",
      "teamUrl",
      "leagueUrl"
    ]
  },
  "customDomain": {
    "plans": [
      "Advanced",
      "Enterprise"
    ],
    "activation": "Immediate after explicit confirmation and successful Account save",
    "loader": "https://www.scorebat.com/embed/embedx.js?v=vh2",
    "routes": [
      "matchview",
      "competition",
      "league",
      "team"
    ],
    "baseDir": "/",
    "accountFields": [
      "matchviewUrl",
      "competitionUrl",
      "leagueUrl",
      "teamUrl"
    ],
    "clear": "Save an empty base URL to restore ScoreBat links for that content type",
    "requires": "Host wildcard pages; preserve path and query; test real identifiers; initial HTML script execution"
  },
  "navigation": {
    "topLevelParameters": {
      "tab": {
        "type": "string",
        "default": "home",
        "requires": "Active ad-free entitlement and an available content tab",
        "widgets": {
          "match": [
            "home",
            "lineup",
            "stats",
            "standings"
          ],
          "team": [
            "home",
            "results",
            "fixtures"
          ],
          "league": [
            "home",
            "results",
            "fixtures",
            "standings"
          ],
          "competition": [
            "home",
            "results",
            "fixtures",
            "standings"
          ]
        }
      }
    },
    "customPopupPreference": {
      "key": "dontpasspref",
      "type": "boolean",
      "default": false,
      "effect": "Suppresses the sbprf language query on configured custom popup destinations only."
    },
    "savedAccountBases": [
      "matchviewUrl",
      "teamUrl",
      "competitionUrl",
      "leagueUrl"
    ]
  },
  "preferences": {
    "language": {
      "key": "language",
      "type": "string",
      "values": "en, ar, cs, da, de, el, es, fi, fr, he, id, it, ms, nl, no, pl, pt-br, ro, ru, sv, th, tr, vi, zh-cn",
      "default": "Automatic",
      "description": "Selects the widget language. Use a supported code; this does not translate API field names."
    },
    "nomaxwidth": {
      "key": "nomaxwidth",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Removes the widget’s internal maximum width. The iframe still needs an appropriate width in your page."
    },
    "limitwidth": {
      "key": "limitwidth",
      "type": "boolean | integer",
      "values": "true | false | integer ≥ 400",
      "default": "false",
      "description": "Livescore only: true caps content at 1200px. An integer of at least 400 sets a custom pixel cap. This is different from nomaxwidth."
    },
    "noheader": {
      "key": "noheader",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Hides the content header where supported. Requires active ad-free access; it is ignored without that entitlement. It does not remove ScoreBat branding by itself."
    },
    "nopadding": {
      "key": "nopadding",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Removes supported content padding. It does not remove the iframe’s parent-page padding or every internal spacing rule."
    },
    "noevents": {
      "key": "noevents",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Hides the event timeline in the match score widget. Other match widget types do not use this preference."
    },
    "autoplay": {
      "key": "autoplay",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Requests automatic video playback. Playback starts muted. Browser policy and source availability can still prevent autoplay."
    },
    "dontcollapse": {
      "key": "dontcollapse",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Keeps a video feed expanded. On match standings, it shows the full table instead of a small window around the two teams."
    },
    "filternotlive": {
      "key": "filternotlive",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Filters ended matches from the live-stream video feed. Relevant to the live-stream scope, not a general live-score filter."
    },
    "tabledetailed": {
      "key": "tabledetailed",
      "type": "boolean",
      "values": "true | false",
      "default": "false",
      "description": "Opens focused standings in the detailed view. Available columns depend on the underlying table."
    },
    "tableview": {
      "key": "tableview",
      "type": "string",
      "values": "nearby | full",
      "default": "nearby",
      "description": "Team standings only: show rows around the selected team or the entire table."
    },
    "tableneighbors": {
      "key": "tableneighbors",
      "type": "integer",
      "values": "1–5",
      "default": "3",
      "description": "Number of neighboring rows for team standings in nearby mode. The builder offers 1, 2, 3 or 5; the parser clamps values to 1–5. It has no effect in full mode."
    },
    "tablecompetition": {
      "key": "tablecompetition",
      "type": "string",
      "values": "Competition slug or numeric ID as a string",
      "default": "Automatic",
      "description": "Selects a standings competition for a team. It must match a competition available for that team; an unmatched selector produces an unavailable table rather than falling back."
    },
    "fixturesview": {
      "key": "fixturesview",
      "type": "string",
      "values": "fixtures | results",
      "default": "fixtures",
      "description": "Initial fixtures/results tab. If the competition has matches today, the widget initially opens Today instead."
    },
    "matchmode": {
      "key": "matchmode",
      "type": "string",
      "values": "next | latest | both",
      "default": "both",
      "description": "Chooses the next (live first, otherwise upcoming), most recent completed, or both match cards for a team. Missing matches are not fabricated."
    },
    "subs": {
      "key": "subs",
      "type": "string",
      "values": "hide | collapse",
      "default": "Expanded",
      "description": "Line-up only: hide substitute lists or initially collapse them. Omit to keep the normal substitute display."
    },
    "layout": {
      "key": "layout",
      "type": "string",
      "values": "Depends on widget",
      "default": "Default",
      "description": "Line-up accepts field or list; omit for the combined view. Match score accepts mini for the compact score. This URL preference is unrelated to the builder’s iframe sizing mode."
    }
  },
  "widgets": [
    {
      "id": "livescore",
      "title": "Livescore",
      "family": "Scores",
      "routes": [
        "/embed/livescore/"
      ],
      "builder": "livescore",
      "summary": "Scores, fixtures and results across competitions.",
      "preferences": [
        "language",
        "limitwidth"
      ],
      "notes": [
        "Use limitwidth for this widget. nomaxwidth, tableview and noevents do not control the livescore feed."
      ],
      "example": {
        "limitwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {}
    },
    {
      "id": "score-bar",
      "title": "Score bar",
      "family": "Scores",
      "routes": [
        "/embed/livescore-bar/",
        "/embed/livescore-bar/team/{team}/",
        "/embed/livescore-bar/competition/{competition}/",
        "/embed/livescore-bar/league/{league}/"
      ],
      "builder": "score-bar",
      "summary": "A horizontal score strip for all matches, a team, or a tournament.",
      "preferences": [
        "language"
      ],
      "notes": [
        "Team and tournament selection belongs in the route. noheader, nomaxwidth and standings preferences do not change the strip.",
        "The strip color is the saved barColor account setting. Popup/background color is the separate color setting."
      ],
      "example": {},
      "embedLayout": "fixed",
      "builderDefaults": {}
    },
    {
      "id": "league",
      "title": "Full league",
      "family": "Tournaments",
      "routes": [
        "/embed/league/{league}/"
      ],
      "builder": "competition-full",
      "summary": "A full league view combining related competitions, matches and tables.",
      "preferences": [
        "language",
        "nomaxwidth",
        "noheader"
      ],
      "notes": [
        "A league can contain several competitions or stages. Keep the picker’s entity type; do not substitute a competition route just because its display name is similar.",
        "Detailed standings preferences apply to the dedicated standings widget, not this full league view."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "competition",
      "title": "Full competition",
      "family": "Tournaments",
      "routes": [
        "/embed/competition/{competition}/"
      ],
      "builder": "competition-full",
      "summary": "Matches, results and available standings for one competition.",
      "preferences": [
        "language",
        "nomaxwidth"
      ],
      "notes": [
        "The full competition widget does not consume noheader. Choose a focused standings or fixtures widget when you need a configurable header."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "fixtures",
      "title": "Fixtures & results",
      "family": "Tournaments",
      "routes": [
        "/embed/fixtures/competition/{competition}/",
        "/embed/fixtures/league/{league}/"
      ],
      "builder": "competition-fixtures",
      "summary": "A focused schedule and results view with a Today tab when applicable.",
      "preferences": [
        "language",
        "fixturesview",
        "noheader",
        "nomaxwidth"
      ],
      "notes": [
        "fixturesview is an initial choice, not a filter that removes the other tabs. Today takes priority when matches are available today.",
        "The current fixtures renderer does not use nopadding, even though that control appears in the builder."
      ],
      "example": {
        "fixturesview": "results",
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "fixturesview": "fixtures",
        "nomaxwidth": true
      }
    },
    {
      "id": "standings",
      "title": "Competition & league standings",
      "family": "Tournaments",
      "routes": [
        "/embed/standings/competition/{competition}/",
        "/embed/standings/league/{league}/"
      ],
      "builder": "standings",
      "summary": "Focused league tables; a league may display several stage tables.",
      "preferences": [
        "language",
        "tabledetailed",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "tableview and tableneighbors are team-focused options. They do not crop these competition tables.",
        "Some competitions have no standings, for example a knockout-only stage. The widget displays an unavailable state."
      ],
      "example": {
        "tabledetailed": true,
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "team",
      "title": "Full team",
      "family": "Teams",
      "routes": [
        "/embed/team/{team}/"
      ],
      "builder": "team-full",
      "summary": "A complete team page with matches and available team information.",
      "preferences": [
        "language",
        "nomaxwidth"
      ],
      "notes": [
        "noheader, matchmode and tableview do not modify this full team widget. Use the focused team match card or team standings widget instead."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "team-standings",
      "title": "Team standings",
      "family": "Teams",
      "routes": [
        "/embed/standings/team/{team}/"
      ],
      "builder": "team-standings",
      "summary": "A table centered on one team, with an option to show the whole table.",
      "preferences": [
        "language",
        "tableview",
        "tableneighbors",
        "tabledetailed",
        "tablecompetition",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "tableneighbors applies only in nearby mode. tablecompetition must refer to a table available for the selected team.",
        "tablecompetition is an advanced URL preference and is not currently offered as a builder control."
      ],
      "example": {
        "tableview": "nearby",
        "tableneighbors": 2,
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "tableview": "nearby",
        "tableneighbors": 3,
        "nomaxwidth": true
      }
    },
    {
      "id": "team-match",
      "title": "Team match card",
      "family": "Teams",
      "routes": [
        "/embed/team-match/team/{team}/"
      ],
      "builder": "team-match",
      "summary": "Upcoming and/or latest completed match cards for one team.",
      "preferences": [
        "language",
        "matchmode",
        "noheader",
        "nomaxwidth"
      ],
      "notes": [
        "matchmode selects the cards, not a date range. The widget updates its selection as matches finish.",
        "nopadding is currently exposed in the builder but not consumed by the match-card renderer."
      ],
      "example": {
        "matchmode": "next",
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "matchmode": "both",
        "nomaxwidth": true
      }
    },
    {
      "id": "match",
      "title": "Full match",
      "family": "Matches",
      "routes": [
        "/embed/matchview/{match}/"
      ],
      "builder": "match-full",
      "summary": "The complete match view with the information available for that game.",
      "preferences": [
        "language",
        "noheader",
        "nomaxwidth"
      ],
      "notes": [
        "noevents, tableview and the line-up layout preferences do not reconfigure the complete match view. Use the corresponding focused widget."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "match-score",
      "title": "Match score",
      "family": "Matches",
      "routes": [
        "/embed/matchscore/{match}/"
      ],
      "builder": "match-score",
      "summary": "A match score card with optional events.",
      "preferences": [
        "language",
        "noevents",
        "noheader",
        "nopadding",
        "nomaxwidth",
        "layout"
      ],
      "notes": [
        "Use layout=\"mini\" for the compact score layout. Other line-up layout values do not apply.",
        "noevents hides the timeline; noheader is separately controlled and requires ad-free access."
      ],
      "example": {
        "noevents": true,
        "layout": "mini",
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "line-up",
      "title": "Line-up",
      "family": "Matches",
      "routes": [
        "/embed/line-up/{match}/"
      ],
      "builder": "match-lineup",
      "summary": "Starting players, field/list presentation and substitutes when available.",
      "preferences": [
        "language",
        "layout",
        "subs",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "layout=\"field\" hides the list; layout=\"list\" hides the pitch. Omit layout for the combined view.",
        "subs=\"hide\" removes substitutes; subs=\"collapse\" initially collapses them. These are advanced preferences outside the current builder controls.",
        "Line-up availability depends on the match and data coverage."
      ],
      "example": {
        "layout": "field",
        "subs": "collapse",
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "match-stats",
      "title": "Match statistics",
      "family": "Matches",
      "routes": [
        "/embed/matchstats/{match}/"
      ],
      "builder": "match-stats",
      "summary": "Available match statistics in a focused view.",
      "preferences": [
        "language",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "This widget does not use noevents, layout or tableview. Statistics depend on data availability."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "head-to-head",
      "title": "Head-to-head",
      "family": "Matches",
      "routes": [
        "/embed/match-h2h/{match}/"
      ],
      "builder": "match-head-to-head",
      "summary": "Previous meetings and comparison content for the selected match.",
      "preferences": [
        "language",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "This is selected by a match, not by constructing a pair of team IDs. Use the match picker."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "nomaxwidth": true
      }
    },
    {
      "id": "match-video",
      "title": "Match video & AI",
      "family": "Matches",
      "routes": [
        "/embed/g/{match}/"
      ],
      "builder": "match-video-ai",
      "summary": "Video content and available AI context for a selected match.",
      "preferences": [
        "language",
        "autoplay"
      ],
      "notes": [
        "The current builder also offers noheader and nomaxwidth for this variant, but its renderer does not use them.",
        "autoplay is supported by the renderer but is not currently shown in this match builder variant. AI features depend on the account’s entitlement and available content."
      ],
      "example": {
        "autoplay": false
      },
      "embedLayout": "resizer",
      "builderDefaults": {}
    },
    {
      "id": "match-standings",
      "title": "Match standings",
      "family": "Matches",
      "routes": [
        "/embed/matchstandings/{match}/"
      ],
      "builder": null,
      "summary": "Available standings with the two match teams highlighted.",
      "preferences": [
        "language",
        "dontcollapse",
        "noheader",
        "nopadding",
        "nomaxwidth"
      ],
      "notes": [
        "This is an advanced embed route without a dedicated catalog preset. Use a match identifier from the match builder.",
        "dontcollapse=true shows the full table. This has a different effect from dontcollapse on a video feed."
      ],
      "example": {
        "dontcollapse": true,
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {}
    },
    {
      "id": "match-ai",
      "title": "Match AI",
      "family": "Matches",
      "routes": [
        "/embed/matchai/{match}/"
      ],
      "builder": null,
      "summary": "A focused AI prediction view where available.",
      "preferences": [
        "language",
        "noheader",
        "nomaxwidth"
      ],
      "notes": [
        "This is an advanced embed route without a dedicated catalog preset. AI content requires the relevant entitlement and available prediction data."
      ],
      "example": {
        "nomaxwidth": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {}
    },
    {
      "id": "video-panel",
      "title": "Video panel",
      "family": "Video",
      "routes": [
        "/embed/videopanel/",
        "/embed/videopanel/team/{team}/",
        "/embed/videopanel/competition/{competition}/",
        "/embed/videopanel/league/{league}/",
        "/embed/videopanel/live-stream/"
      ],
      "builder": "video-widget",
      "summary": "A video player with a browsable selection of matches.",
      "preferences": [
        "language",
        "autoplay",
        "filternotlive"
      ],
      "notes": [
        "Use the responsive panel script, not the general height-resizer script. For a fixed panel, set the iframe width and height explicitly.",
        "dontcollapse, noheader and nomaxwidth do not control the panel. filternotlive applies to the live-stream scope."
      ],
      "example": {
        "autoplay": false
      },
      "embedLayout": "responsivePanel",
      "builderDefaults": {
        "autoplay": true
      }
    },
    {
      "id": "video-feed",
      "title": "Video feed",
      "family": "Video",
      "routes": [
        "/embed/videofeed/",
        "/embed/videofeed/team/{team}/",
        "/embed/videofeed/competition/{competition}/",
        "/embed/videofeed/league/{league}/",
        "/embed/videofeed/live-stream/"
      ],
      "builder": "video-feed",
      "summary": "A vertical feed of match videos, with optional expansion and autoplay.",
      "preferences": [
        "language",
        "autoplay",
        "dontcollapse",
        "filternotlive"
      ],
      "notes": [
        "The renderer does not use nomaxwidth even where a scoped builder exposes that option. Use the iframe’s CSS width.",
        "The live-stream scope may include ended streams/replays unless filtered. It does not guarantee a playable stream for every match."
      ],
      "example": {
        "autoplay": false,
        "dontcollapse": true
      },
      "embedLayout": "resizer",
      "builderDefaults": {
        "autoplay": true,
        "dontcollapse": true
      }
    }
  ]
}
