Data binding
LOAD_GRAPHIC carries every surface. GRAPHIC_UPDATE carries the identity fields plus only the
surfaces whose JSON changed. Merge an update over the state you hold.
Identity fields
Section titled “Identity fields”| Field | Value |
|---|---|
graphicId | The stable id of your graphic. Send it back in HIDDEN |
show | true while the graphic is on air. Informational. See Show and hide |
sport | The sport key of the match, for example football |
Surfaces
Section titled “Surfaces”| Surface | Content | Keyed by |
|---|---|---|
sportData | Live match data for the sport | Sport-specific field names |
controlVariables | The current value of each control variable in your manifest | Variable name |
controlVariableData | { value, data } per control variable. data is the resolved fact, team or player object for an entity-typed variable | Variable name |
themeVariables | Theme variable values: colours, labels, sponsor names | Variable name |
externalData | The latest snapshot of each external data source of the theme | Data source alias |
images | Player, team and competition images | Entity arrays, see below |
userExpressionValues | The value of each user expression in your manifest, evaluated by the overlay. See Expressions | Expression name |
assetOverrides | Asset overrides such as ad images. Optional | Asset name |
Read controlVariableData.<name>.data when you need the selected entity. Read
controlVariables.<name> when you need only the raw value.
Images
Section titled “Images”{ "player": [{ "entityId": 501, "file": { "url": "https://…" } }], "team": [{ "entityId": 1, "file": { "url": "https://…" } }], "competition": [{ "entityId": 42, "file": { "url": "https://…" } }]}file can be null. Handle a missing image before you render one.
sportData by sport
Section titled “sportData by sport”Pick your sport. The tabs stay on your choice across these docs.
These fields come from the LIGR football data model.
| Field | Meaning |
|---|---|
sportData['1'] | The home team. A team object |
sportData['2'] | The away team. A team object |
sportData.clock | The match clock, for example "43:30" |
sportData.lastClock | The clock frozen at the end of the last live period |
sportData.clockRunning | true while the clock counts |
sportData.periodShortName | The current period, for example "First Half" |
Team .score | Goals scored |
Team .abbreviation | The short team code, for example "MUN" |
Team .logoUrl | The team logo URL |
Team .kit.primaryColor | The kit primary colour, a hex string. If the team has no kit, the team primary background colour. "" if neither is set |
Team .kit.secondaryColor | The kit secondary colour. If the team has no kit, the team primary text colour. "" if neither is set |
Team .redCards | The red card count |
Team .squad | The player objects |
sportData['1'] is always the home team and sportData['2'] is always the away team.
sportData.fixtures lists the matches of the same competition on the same calendar day.
The list includes the current match. It leaves out cancelled matches and matches without team competitors.
LIGR sorts the list by date, then start time, then home team name.
In a Rive expression, read the list as $d.fixtures.
| Fixture field | Meaning |
|---|---|
id | The match id |
date | The match date, for example "2026-09-29" |
homeTeamName, awayTeamName | The team names |
homeTeam, awayTeam | The team branding: logoUrl, background and text colours, and kit. null if the match has no team on that side |
homeGoals, awayGoals | The goals of each team. null before kick-off |
startTime | The kick-off time in 24-hour format, for example "15:00" |
isLive | true while the match is in progress |
round | The round key of the match |
currentPeriod | The current period object. null if the match has no current period |
For a field not listed here, read the schema.
Coming soon. The Tennis field reference is not written yet.
Until then, GET /v2/schemas/sports/tennis returns the full sportData shape, and GET /v2/scenarios/tennis returns sample data.
Coming soon. The Basketball field reference is not written yet.
Until then, GET /v2/schemas/sports/basketball returns the full sportData shape, and GET /v2/scenarios/basketball returns sample data.
Coming soon. The Australian Rules field reference is not written yet.
Until then, GET /v2/schemas/sports/ausRules returns the full sportData shape, and GET /v2/scenarios/ausRules returns sample data.
Coming soon. The Rugby League field reference is not written yet.
Until then, GET /v2/schemas/sports/rugbyLeague returns the full sportData shape, and GET /v2/scenarios/rugbyLeague returns sample data.
Coming soon. The Rugby Union field reference is not written yet.
Until then, GET /v2/schemas/sports/rugbyUnion returns the full sportData shape, and GET /v2/scenarios/rugbyUnion returns sample data.
Coming soon. The Cricket field reference is not written yet.
Until then, GET /v2/schemas/sports/cricket returns the full sportData shape, and GET /v2/scenarios/cricket returns sample data.
Coming soon. The Netball field reference is not written yet.
Until then, GET /v2/schemas/sports/netball returns the full sportData shape, and GET /v2/scenarios/netball returns sample data.
Coming soon. The field reference for these sports is not written yet. The sport key is in brackets.
- Baseball (
baseball) - Field hockey (
fieldHockey) - Futsal (
futsal) - American Football (
gridiron) - Handball (
handBall) - Ice hockey (
iceHockey) - Lacrosse (
lacrosse) - Rugby Sevens (
rugbySevens) - Touch football (
touchFootball) - Volleyball (
volleyball) - Water polo (
waterPolo)
GET /v2/schemas/sports/{sport} returns the full sportData shape of each sport.
Schemas
Section titled “Schemas”The overlay sends no schemas at runtime. Get each shape during development.
| Surface | Where the schema is |
|---|---|
sportData | GET /v2/schemas/sports/{sport} |
Entities: team, player, playerPair, fact | GET /v2/schemas/control-variables |
controlVariables | The controlVariables of your manifest |
themeVariables | The theme variables of the theme |
externalData | The data schemas of the theme: ligr-graphic rive data-schema list |
Validate your test payloads against these schemas during development. A wrong field name shows up
before you ship. GET /v2/scenarios/{sport} returns sample sportData for a sport. See
Schemas & scenarios.
External data
Section titled “External data”A theme can declare external data sources: a standings table, a sponsor line, a fact file. Your
graphic reads them from externalData by alias. Anyone with a write key fills them over REST. See
External data sources.
A large data source is the usual cause of a message over the 1 MB limit. Keep the snapshot to what the graphic renders.