Betclic Data API

Betclic API for Pre-Match, Live Odds & Results

Access odds from Betclic, the market-leading French sportsbook of the Betclic Everest Group, over 19 sports — around 100 markets on a fully fetched soccer fixture, deep ice hockey, American football and tennis boards, and a push-driven in-play feed that lands sub-second. The French board comes through verbatim with canonical market types beside it, plus paginated REST endpoints, a real-time WebSocket feed with live statistics, and a 30-day results archive. One API key for all bookmakers.

What a Betclic API Response Looks Like

GET /api/betclic/soccer/events?page=1&limit=5
{
  "total": 594,
  "page": 1,
  "limit": 5,
  "totalPages": 119,
  "hasNextPage": true,
  "events": [
    {
      "sport": "soccer",
      "league": "Espagne LaLiga",
      "country": "ES",
      "eventId": "1211496206983168",
      "home": "Athletic Bilbao",
      "away": "Atlético Madrid",
      "live": false,
      "suspended": false,
      "startTime": "2026-09-05T14:15:00.000Z",
      "slug": "/athletic-bilbao-atletico-madrid-m1211496206983168",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Résultat du match (t. rég)",
          "period": "FULL_TIME",
          "isActive": true,
          "suspended": false,
          "marketId": "1211496209063939",
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "Athletic Bilbao",
              "odds": 2.78,
              "isActive": true,
              "suspended": false,
              "selectionId": "1211496209084428"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "Nul",
              "odds": 3.33,
              "isActive": true,
              "suspended": false,
              "selectionId": "1211496209084429"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Atlético Madrid",
              "odds": 2.33,
              "isActive": true,
              "suspended": false,
              "selectionId": "1211496209084430"
            }
          ]
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Nombre total de buts",
          "period": "FULL_TIME",
          "line": 2.5,
          "isActive": true,
          "suspended": false,
          "marketId": "1211496215158784",
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "+ de 2,5",
              "odds": 2.02,
              "line": 2.5,
              "isActive": true,
              "suspended": false,
              "selectionId": "1211496215158786"
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "- de 2,5",
              "odds": 1.78,
              "line": 2.5,
              "isActive": true,
              "suspended": false,
              "selectionId": "1211496215158785"
            }
          ]
        }
        /* ... 113 more markets */
      ],
      "moreInfo": {
        "source": "board",
        "betclicSport": "football",
        "openMarketCount": 156,
        "categories": ["ca_ftb_rslt", "ca_ftb_goa", "ca_ftb_cshcp"]
      }
    }
  ]
}

Live Events — Score, Clock & Statistics

GET /api/betclic/live-events?sport=tennis&limit=1
{
  "total": 7,
  "page": 1,
  "limit": 1,
  "sport": "tennis",
  "events": [
    {
      "sport": "tennis",
      "league": "US Open H.",
      "country": "US",
      "eventId": "1209311207362567",
      "home": "Thiago Agustin Tirante",
      "away": "Adrian Mannarino",
      "startTime": "2026-08-30T20:25:00.000Z",
      "slug": "/thiago-agustin-tirante-adrian-mannarino-m1209311207362567",
      "score": {
        "home": "2",
        "away": "2",
        "info": "2-5 (0-0)"
      },
      "matchClock": {
        "period": "5ème set",
        "periodId": "ten_fifth_set",
        "running": false
      },
      "statistics": {
        "sets": {
          "home": [6, 6, 3, 3, 2],
          "away": [4, 3, 6, 6, 5],
          "homeServe": true
        }
      },
      "moreInfo": {
        "betclicSport": "tennis",
        "streamed": true,
        "status": "INTERRUPTED",
        "categories": ["ca_ten_rslt", "ca_ten_sts", "ca_ten_gms"]
      },
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Vainqueur du match",
          "period": "FULL_TIME",
          "isActive": true,
          "suspended": false,
          "marketId": "1209311208411148",
          "selections": [
            { "canonicalOutcome": "HOME", "rawName": "Thiago Agustin Tirante", "odds": 10, "isActive": true, "suspended": false, "selectionId": "1209311208419358" },
            { "canonicalOutcome": "AWAY", "rawName": "Adrian Mannarino", "odds": 1.04, "isActive": true, "suspended": false, "selectionId": "1209311208419359" }
          ]
        },
        {
          "canonicalMarket": "TOTAL_GAMES",
          "rawName": "Nombre total de jeux",
          "period": "FULL_TIME",
          "line": 45.5,
          "isActive": true,
          "suspended": false,
          "marketId": "1212074546991107",
          "selections": [
            { "canonicalOutcome": "OVER", "rawName": "+ de 45,5", "odds": 1.22, "line": 45.5, "isActive": true, "suspended": false, "selectionId": "1212074548011011" },
            { "canonicalOutcome": "UNDER", "rawName": "- de 45,5", "odds": 3.35, "line": 45.5, "isActive": true, "suspended": false, "selectionId": "1212074548011010" }
          ]
        }
        /* ... 282 more markets */
      ]
    }
  ]
}

Match Results — Scores Kept for 30 Days

GET /api/betclic/results?sport=tennis&page=1&limit=5
{
  "total": 7,
  "page": 1,
  "limit": 5,
  "totalPages": 2,
  "hasNextPage": true,
  "results": [
    {
      "sport": "tennis",
      "league": "US Open F.",
      "country": "US",
      "eventId": "1209308936155136",
      "home": "Kimberly Birrell",
      "away": "Petra Marcinko",
      "startTime": "2026-08-30T22:15:00.000Z",
      "slug": "/kimberly-birrell-petra-marcinko-m1209308936155136",
      "score": {
        "home": "0",
        "away": "1",
        "info": "6-6 (3-3)"
      },
      "matchClock": {
        "period": "2ème set",
        "periodId": "ten_second_set",
        "running": false
      },
      "statistics": {
        "sets": {
          "home": [3, 6],
          "away": [6, 6],
          "homeServe": false
        }
      },
      "moreInfo": {
        "betclicSport": "tennis",
        "streamed": true,
        "status": "INTERRUPTED",
        "categories": ["ca_ten_rslt", "ca_ten_sts", "ca_ten_gms"]
      }
    }
  ]
}

Why Use PulseScore for Betclic Data

19 Sports With Full Market Coverage

Pre-match odds from Betclic across 19 sports — Soccer, Tennis, Basketball, Ice Hockey, American Football, Baseball, Handball, Volleyball, Badminton, Snooker, Rugby League, Rugby Union, MMA, Boxing, Australian Rules, Cycling, Formula 1, Golf and Motorsports — with paginated league and event endpoints and the complete market list for every fixture.

Around 100 Markets Per Soccer Match

Betclic runs one of the deepest boards in the French market: a fully fetched soccer fixture carries ~96 markets (up to 136), ice hockey ~80, American football ~70 and tennis ~59 — handicap ladders, team totals, exact goals, half-time/full-time, correct score, winning margin and Betclic's own French-market specials — all mapped onto the same canonical market types every other bookmaker on PulseScore uses.

The French Board, Verbatim

League and market names arrive exactly as Betclic prints them — 'Espagne LaLiga', 'Angl. Premier League', 'US Open H.', 'Résultat du match (t. rég)', 'Écart de buts', 'Nombre total de jeux' — alongside canonicalMarket, canonicalOutcome and period, so you can render the operator's own wording without ever parsing it. Unusually for a sportsbook feed, country is a real ISO-3166 alpha-2 code on every event and league (with EU for continental competitions and ZZ for worldwide ones), so it is safe to group on.

Push-Driven Live Odds

Betclic's in-play feed is push, not poll — the collector holds the operator's streams open and applies deltas as they arrive, so prices and scores land sub-second and a live document is typically no more than a couple of seconds old. In-play boards are deep: a live tennis match runs to a few hundred markets once its games, sets and handicap ladders are open.

Live Scores, Clock & Statistics

Live events carry the score, a match clock with the French period label ('1er set', '2è QT', '5ème set') plus a language-neutral periodId ('ten_first_set', 'bkb_second_quarter'), minute and second counting up, and minutes/seconds remaining on countdown sports. Racket and net sports report sets won plus the running game in score.info ('6-6 (3-3)') and a per-set point array with the current server; goal sports report red cards.

Live WebSocket + 30-Day Results

Real-time push of every in-play event for the chosen sport, broadcast roughly every second — all 19 sports are subscribable. The results feed mirrors the same board: every event that goes live is stored with its last score, match clock and statistics and kept for 30 days, filterable by sport, league or team name. PRO, MAX and ULTRA plans for the WebSocket.

Frequently Asked Questions

What data does the Betclic API provide?

PulseScore provides pre-match odds, live in-play odds, and match results from Betclic (betclic.fr), the market-leading French sportsbook of the Betclic Everest Group, across 19 sports. Each event includes normalized market data with canonical market types, selections, and decimal odds, plus the raw French market and outcome names exactly as Betclic displays them. The board served is the French offer — Betclic selects its catalogue by regulation, and this feed is collected against the FR regulation.

What sports are covered?

The 19 sports Betclic publishes markets for: Soccer, Tennis, Basketball, Ice Hockey, American Football, Baseball, Handball, Volleyball, Badminton, Snooker, Rugby League, Rugby Union, MMA, Boxing, Australian Rules, Cycling, Formula 1, Golf and Motorsports. Every sport exposes /leagues, /leagues/:league/events, /events (paginated), and /events/:eventId and can be subscribed to over WebSocket. Betclic's sports menu is dynamic — it lists only the sports that currently carry an offer, so a board can appear or empty out between cycles. Motorsports is the catch-all for individual-athlete events: Formula 2, NASCAR, biathlon, ski jumping and alpine and cross-country skiing all file there, and moreInfo.betclicSport names the actual discipline.

How are leagues and outcomes named?

In French — this is the raw operator board, kept verbatim. Domestic competitions are prefixed by their country in French ('Espagne LaLiga', 'Allemagne Bundesliga', 'Italie Serie A', 'Angl. Premier League', 'France Division 1 H.'), international brands keep their own names ('NFL', 'NBA', 'NHL', 'UFC', 'Top 14'), and gendered draws carry an H. (men) or F. (women) suffix, so 'US Open H.' and 'US Open F.' are two separate leagues. Unlike most books, country is a real ISO-3166 alpha-2 code on both events and leagues — with EN for England, EU for continental competitions and ZZ for worldwide ones. Market rawName values are Betclic's own French labels such as 'Résultat du match (t. rég)', 'Double Chance', 'Nombre total de buts', 'Écart de buts', 'Les deux équipes marquent', 'Mi-temps / Fin match' and 'Score exact'. The canonical fields — canonicalMarket, canonicalOutcome, and period — are identical across every bookmaker on PulseScore.

How complete is a fixture's market list?

Read moreInfo.source. A fixture marked 'list' has just been discovered off a competition list and carries one headline market; a fixture marked 'board' has had its full market board fetched, one call per market tab, and is the state you want. New fixtures fill out from 'list' to 'board' within a cycle or two, and any board older than 900 seconds is re-fetched. Player-prop tabs (football's 'Joueurs' and 'Stats équipes et joueurs', tennis's 'Points & Service', ice hockey's 'Buteurs') are roughly three quarters of a match's payload and are not collected by default, which is why moreInfo.openMarketCount can read far higher than the number of markets returned. Baseball and basketball player markets that Betclic files outside those tabs do come through, with metadata.team naming the player's side.

Does it include match results?

Yes. /api/betclic/results mirrors Betclic's in-play board: every event that goes live is stored with the last score, match clock, and statistics the scoreboard published and kept for 30 days. Entries are snapshots rather than a settlement record — read matchClock.periodId and moreInfo.status (RUNNING or INTERRUPTED) to see how far a match had progressed. Filter by sport, league, country, or team (exact name, case-insensitive), look up a single result with /results/events/:eventId, or discover what to filter on with /results/sports, /results/countries and /results/leagues.

How are the markets structured?

All markets use a canonical format: each market has a type (e.g., MATCH_RESULT, OVER_UNDER, ASIAN_HANDICAP, EUROPEAN_HANDICAP, TOTAL_GAMES), period (FULL_TIME, FIRST_HALF, FIRST_QUARTER, FIRST_SET, THIRD_PERIOD, FIRST_INNING), and selections with decimal odds and handicap lines where applicable. Betclic also exposes marketId and selectionId, and a price the book has pulled comes through as isActive false with suspended true and odds 0 — so filter on isActive rather than trusting every number. The same structure is shared across all sports and all bookmakers on PulseScore — write your integration once.

Is there a free tier?

Yes. The BASIC plan is free and includes 500 API requests per month. Upgrade to PRO, MAX, or ULTRA for unlimited requests.

Does the Betclic API support live in-play data?

Yes, and it is push-driven end to end. Live in-play events are available via REST (/api/betclic/live-events, /live-events/sports, /live-events/events/:eventId) and via WebSocket at wss://api.pulsescore.net/api/betclic/ws/live. The collector holds Betclic's own streams open rather than polling, so deltas land sub-second; the WebSocket then pushes every in-play event for the subscribed sport roughly every second, including the live score, a match clock with the French period label and a language-neutral periodId, and statistics — per-set point arrays and the current server for tennis, volleyball and badminton, red cards for the goal sports. PRO, MAX, and ULTRA plans only.

Start Using the Betclic API Today

Free tier available. No credit card required. Get your API key in 30 seconds.