LMT E-Sports extends the Live Match Tracker for competitive gaming titles such as Counter-Strike, League of Legends, Dota 2 and Valorant. The same match.lmtPlus widget is used, but eligible matches are rendered through a Grid.gg embed (game-overview widget) instead of the regular LMT pitch and tabs. Only a small subset of regular LMT properties is supported for these matches.
This guide covers only what is needed for E-Sports integration.
E-Leagues sports (e.g. e-soccer, e-basketball) use regular LMT content — pitch, tabs, and the full widget property set — not the Grid.gg embed. See the LMT Plus documentation for integration details.

LMT E-Sports default view.

Follow the action on a minimap during live games.
See the LMT E-Sports widget demo.
match.lmtPlus12345678).grid:match:<id> (e.g. grid:match:123).When a Sportradar matchId is used, the widget resolves the match, confirms it belongs to a supported E-Sports sport, and maps it to the corresponding Grid series ID. When grid:match:<id> is used, the widget loads the Grid embed directly for that series.
Environment Requirements
Supported Sports
LMT E-Sports supports the following sports:
| Sport | Sport ID |
|---|---|
| Counter-Strike | 109 |
| League of Legends | 110 |
| Dota 2 | 111 |
| Valorant | 194 |
Illustrations of the main E-Sports views and relevant property values below.
Default Grid.gg game-overview embed with in-embed tab navigation.
The table below lists only properties that are passed into and used by the Grid wrapper (src/buildingblocks/lmtPlus/grid/). Standard LMT Plus properties such as scoreboard, momentum, tabs, layout, and pitch customisation are not used for E-Sports matches.
Properties not listed above (including scoreboard, tabsPosition, , , , pitch options, and LCP highlights props) are ignored when the Grid wrapper is active. Tab branding is limited to — see .
Theming for the E-Sports widget is more limited than for the full LMT.
The Grid embed reads colours from the widget theme at runtime. Existing widget theming used for regular LMT applies the same font and colour rules to the E-Sports widget — no extra setup is needed beyond your standard LMT theme.
If you are setting up theming for the first time, follow the Styling Widgets guide to set up default theming, then apply E-Sports-specific overrides (if needed) as shown below.
Only font-family, background-color, and color values are forwarded to the Grid embed. Other properties should be left as-is.
/* MAIN BACKGROUND COLOR */
.sr-bb {
background-color: #0f172a;
}
/* DEFAULT TEXT COLOR */
.sr-bb .srt-base-1 {
color: #e2e8f0;
}
/* PRIMARY COLOR (team accents, buttons) */
.sr-bb .srt-primary-1 {
background-color: #6366f1;
}
/* HOME TEAM COLOR */
The Grid wrapper maps srt-primary-1, srt-home-1, , , and the background colour into the Grid customer theme. Changing other classes will not affect the Grid embed appearance.
The Grid embed includes its own tab navigation. Tab branding uses the same branding object as regular LMT — see the Customizing Widgets tutorial for the full schema — but for Grid content only branding.tabs.option is supported. That property is a subset of the standard tabs branding API; all other settings (align, variant, iconPosition, icons, arrowIcon, useClientTheming, and namespace-specific overrides) are ignored for E-Sports matches.
The tabs, tabsPosition, and activeTab widget properties (tab reordering and layout) are also ignored for E-Sports matches.
Displays both icon and text label on each tab.
Live video streaming is available for E-Sports matches when a valid jwt is provided and a stream is available for the match.
When streaming is enabled, the Grid game-overview embed shows a stream button. Clicking it opens a stream overlay with the standard LMT video player on top of the Grid content.
To enable streaming:
jwt prop with "av" scope. See JWT Authentication.streamNotAvailableMessage or streamNotAvailableBgImage.Use the streaming-related properties in the table above to configure player behaviour (streamAutoplay, streamMuteVideo, and others).
Properties do not always transfer from the above table directly into integration code. Properties must be transformed differently for each integration method:
SIR() callcardVariant: "compact"In javascript integration, the properties go into an object which is passed as the 4th argument of the call ti SIR() function. Please see Global SIR API
data-sr- prefixcardVariant → data-sr-card-variant
Sample Configuration:
| Property | Type | Default | Description |
|---|---|---|---|
matchId | number | string | Required (or entityId) | Sportradar match identifier. Numeric ID or sr:match:<id> entity string for a supported E-Sports match. |
entityId | string | Required (or matchId) | Grid-native match identifier as grid:match:<id>. |
jwt | string | - | JWT authentication token for live video streaming. Must include "av" in the token scope. Required to show the stream button and to play streams. See JWT Authentication. |
streamNotAvailableMessage | string | boolean | - | Custom message when the stream is unavailable. If true, shows the default message. When set, stream availability checks are skipped. |
streamNotAvailableBgImage | string | - | Background image URL when the stream is unavailable. When set, stream availability checks are skipped. |
streamMuteVideo | boolean | false | When true, starts the video stream with audio muted. |
streamAutoplay | boolean | true | When true, the video stream plays automatically when the stream overlay is opened. |
streamAllowFullscreen | boolean | false | When true, enables the fullscreen button on the video player. Note: applicable on mobile devices only. |
streamMaxBitrate | number | - | Maximum bitrate for the video stream in bps. See LMT Plus streaming for common values. |
tabsmomentumlayoutbranding.tabs.optionsrt-away-1srt-base-1.sr-bbsrt-*
Sample Configuration:
iconText (default)filters.sport.hidden → Complex objects must be passed as JSON stringsIn HTML integration, the properties go into the parent HTML object as object properties, prefixed with data-sr- as explained above.
This method supports only simple (base) properties and does not support properties that require functions.
In all examples replace sportradar in the widgetloader URL path with your clientId.
Example if your clientId is client1:
https://widgets.sir.sportradar.com/sportradar/widgetloaderhttps://widgets.sir.sportradar.com/client1/widgetloaderInitialize the widget programmatically using the JavaScript API. The widget renders in the specified container element.
(function(a,b,c,d,e,f,g,h,i){a[e]||(i=a[e]=function(){(a[e].q=a[e].q||[]).push(arguments)},i.l=1*new Date,i.o=f,
g=b.createElement(c),h=b.getElementsByTagName(c)[0],g.async=1,g.src=d,g.setAttribute("n",e),h.parentNode.insertBefore(g,h)
)})(window,document,"script","https://widgets.sir.sportradar.com/sportradar/widgetloader","SIR", {
language: 'en'
});
SIR('addWidget', '#sr-widget', 'match.lmtPlus', {
matchId: 12345678
});<div id="sr-widget"></div>Insert the following HTML code at the target widget location. Complex object properties must be passed as JSON-encoded strings.
<div id="sr-widget"
data-sr-widget="match.lmtPlus"
data-sr-match-id="12345678">
</div>
<script type="application/javascript"
src="https://widgets.sir.sportradar.com/sportradar/widgetloader"
async>
</script>