Ligue 1 API
Realtime Sports API serves French Ligue 1 games through the same REST endpoints and JSON schema as every other league, using sport=soccer and league=fra.1. You get the current scoreboard, live scores, game detail, play-by-play, teams, rosters and news, plus current odds and line history from a single source book. Not currently available or not verified for this league: injuries, player box-score stats. Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA.
- Slugs
- sport=soccer
league=fra.1 - Teams
- 18
- Season (from data)
- 2026-27 French Ligue 1 2026-27 Ligue 1
- In the scoreboard now
- 1 games
Upcoming and live Ligue 1 games
| Date | Away | Home | Time / Result | TV | Venue |
|---|---|---|---|---|---|
| Fri, Oct 9 | Lyon | Lens | 2:45 PM ET | Stade Bollaert-Delelis · Lens |
From the /events endpoint for this league, refreshed every few minutes. Times are US Eastern. Full Ligue 1 schedule
Live example
Request
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/soccer/leagues/fra.1/events?limit=1"Response captured from live data at 2026-10-05 02:11 UTC (refreshed every few minutes). Long arrays are trimmed; meta.rateLimit values are illustrative for a Free key.
Response
{
"success": true,
"data": [
{
"id": "401876447",
"uid": "s:600~l:710~e:401876447",
"name": "Lyon at Lens",
"shortName": "LYON @ RCL",
"date": "2026-10-09T18:45Z",
"status": {
"state": "pre",
"completed": false,
"period": 0,
"clock": "0'",
"detail": "Fri, October 9th at 2:45 PM EDT",
"halftime": false,
"firstHalfEnded": false
},
"homeTeam": {
"id": "175",
"name": "Lens",
"abbreviation": "RCL",
"logo": "https://realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXQAOWRMQEENcUx1GVQ1DH0pXAQ",
"color": "E91514",
"alternateColor": "004c37",
"winner": false,
"score": 0
},
"awayTeam": {
"id": "167",
"name": "Lyon",
"abbreviation": "LYON",
"logo": "https://realtimesportsapi.com/api/images/proxy?id=GgcVSgNPTUMITUgaFFQVVVQXBVwOHV5LRQBZD1lbBllDXQAOWRMQEENcUx1GVQxBH0pXAQ",
"color": "ffffff",
"alternateColor": "1a1a1a",
"winner": false,
"score": 0
},
"competition": {
"attendance": 0,
"neutralSite": false,
"conferenceCompetition": false,
"divisionCompetition": false,
"playByPlayAvailable": true,
"highlightsAvailable": false
},
"venue": {
"id": "10342",
"name": "Stade Bollaert-Delelis",
"city": "Lens",
"indoor": false,
"grass": false
},
"notes": [],
"season": {
"year": 2026,
"displayName": "2026-27 French Ligue 1",
"type": {
"id": "1",
"name": "2026-27 Ligue 1",
"abbreviation": "2026-27 Ligue 1"
},
"week": {}
},
"broadcasts": [],
"officials": []
}
],
"meta": {
"rateLimit": {
"limit": 125,
"remaining": 124,
"reset": 1793491200000
}
}
}Ligue 1 endpoints
Checked against live data on 2026-10-04. Paths are relative to /api/v1/sports/soccer/leagues/fra.1.
| Endpoint | Path | Ligue 1 | Notes |
|---|---|---|---|
| Live scores | /events/live | Available | |
| Events (scoreboard) | /events | Available | |
| Event detail | /events/{eventId} | Available | |
| Play-by-play | /events/{eventId}/plays | Available | |
| Box score | /events/{eventId}/boxscore | Limited | Team totals and period scores only; player stats are not returned. |
| Odds | /events/{eventId}/odds | Available | |
| Win probability | /events/{eventId}/winprobability | Not available | |
| Teams | /teams | Available | |
| Rosters | /teams/{teamId}/roster | Available | |
| Athletes | /athletes/search | Available | |
| Injuries | /injuries | Not available | |
| News | /news | Available | |
| Schedule / weeks | /seasons/{season}/schedule | Available | |
| NCAA tournament | /seasons/{season}/tournament | Not available | |
| Webhooks | /webhooks | Available | |
| WebSocket | /websocket/auth | Available |
- Schedules are by date, not week: use /events for the current scoreboard and /seasons/{season}/schedule for a season. Week parameters return SCHEDULE_WEEKS_NOT_SUPPORTED.
- Soccer play-by-play is a stream of match events (passes, shots, fouls, cards); box scores carry team totals and period scores without player rows.
Event object fields
Every Ligue 1 game in the events, live and schedule endpoints uses the same Event object as other leagues.
| Field | Type | Notes |
|---|---|---|
| id | string | Event id; use it with the detail, plays, box score and odds endpoints. |
| uid | string | |
| name | string | Full matchup name. |
| shortName | string | Abbreviated matchup, e.g. "AWAY @ HOME". |
| date | string | Start time, ISO-8601 UTC. |
| status | EventStatus | state (pre, in, post), completed, period, clock and display detail. |
| homeTeam | EventTeam | id, name, abbreviation, colors, logo (proxied), record, score, winner. |
| awayTeam | EventTeam | Same shape as homeTeam. |
| competition | object | attendance, neutralSite, conference/division flags, playByPlayAvailable. |
| venue | object | Venue id, name, city, state, indoor, grass (null when unknown). |
| notes | string[] | Headline notes, e.g. round or rivalry names. |
| season | object | year, type (preseason/regular/postseason) and week where the league uses weeks. |
| broadcasts | object[] | TV/stream networks for the game. |
| officials | object[] | Game officials when published. |
| odds | Odds | Only with includeOdds=true and when the game has odds. |
Code samples
curl
curl -H "Authorization: Bearer $RSA_API_KEY" \
"https://www.realtimesportsapi.com/api/v1/sports/soccer/leagues/fra.1/events?limit=5"JavaScript (fetch)
const res = await fetch("https://www.realtimesportsapi.com/api/v1/sports/soccer/leagues/fra.1/events?limit=5", {
headers: { Authorization: `Bearer ${process.env.RSA_API_KEY}` }
});
const { success, data, meta } = await res.json();
console.log(data, meta.rateLimit);Python (requests)
import os, requests
res = requests.get(
"https://www.realtimesportsapi.com/api/v1/sports/soccer/leagues/fra.1/events?limit=5",
headers={"Authorization": f"Bearer {os.environ['RSA_API_KEY']}"},
timeout=10,
)
body = res.json()
print(body["data"])MCP prompt (Claude, Cursor, ChatGPT)
Using the Realtime Sports MCP server (https://www.realtimesportsapi.com/api/mcp), call get_events with sport "soccer" and league "fra.1" and list the games it returns with start times, status and scores for Ligue 1.Connect the hosted MCP server first: setup guide. Each tool call counts as one API call.
Rate limits and pricing
| Plan | Price | Calls | Rate | WebSocket | Webhooks |
|---|---|---|---|---|---|
| Free | $0 | 125/mo (1,000 first 30 days) | 1/s | 500 msgs/mo | No |
| Starter | $29/mo ($290/yr) | 10,000/mo | 5/s | Shares monthly pool | Shares monthly pool |
| Growth | $49/mo ($490/yr) | 25,000/mo | 10/s | Shares monthly pool | Shares monthly pool |
| Pro | $99/mo ($990/yr) | 50,000/mo | 20/s | 100,000 msgs/mo | 25,000/mo |
| Scale | $299/mo ($2,990/yr) | 500,000/mo | 100/s | 500,000 msgs/mo | 100,000/mo |
Every successful REST call counts as one call. Over the limit you get HTTP 429 with a Retry-After header. No SLA. Full pricing.
29 leagues monitored live: NFL, college football, NBA, men's college basketball, MLB, NHL and 23 soccer competitions.
FAQ
- Is there a free Ligue 1 API?
- Yes. The Free plan is $0 with 125 calls per month (1,000 in the first 30 days) at 1 request per second, no card required. The same key works for all 29 leagues.
- How fresh is the Ligue 1 data?
- Data is aggregated from public sources and is typically 20-30 seconds behind live play (about 1 second after our source). There is no SLA. It is not intended for in-play betting that needs sub-second data.
- Which Ligue 1 endpoints are available?
- Available: live scores, events (scoreboard), event detail, play-by-play, odds, teams, rosters, athletes, news, schedule / weeks. Not available or not verified: box score (limited), win probability (not available), injuries (not available), ncaa tournament (not available).
- Does the Ligue 1 API include betting odds?
- Yes. Upcoming Ligue 1 games returned a spread, moneyline and total when we checked, from a single source book, with line history. It is not a multi-book comparison feed and not suited to sub-second in-play betting.
- Does it include Ligue 1 injuries?
- No. The injuries endpoint returned no records for Ligue 1 when we checked, so treat injuries as not available for this league.
- Can I get Ligue 1 score updates pushed instead of polling?
- Yes. Webhooks are included on every paid plan (Starter, Growth, Pro, Scale). WebSocket is included on paid plans, and the Free plan gets a 500-message monthly preview. Both can be filtered to fra.1.