Free · Public · UnlimitedPremium · Custom APIv1

MCSports Sports Data API

Real-time live matches, HLS stream URLs, news, and highlights — JSON over HTTPS. Free, public, and unlimited. Upgrade to Premium for custom endpoints built for your app.

Your API key

Leave empty to test with the shared free key. Paste a Premium key to run every “Try it” below as Premium.

Stored only in this browser.

Free

  • One shared public key — baked into the client below
  • Unlimited requests, CORS open, works from any site
  • All endpoints: matches, streams, news, highlights
  • Same JSON shape as Premium
curl -H "x-api-key: mcs_public_34757c97d2f5420905996dd57065a57f36d03e7b" \ https://mcsports.live/api/public/v1/feed

Premium

  • Everything in Free, plus:
  • Custom API endpoints — tailored to your app
  • Priority Telegram support
  • Lifetime key — one-time payment

Need a custom API?

Premium customers can request custom endpoints — filtered leagues, custom response shapes, extra fields, league-specific feeds, webhooks, and more. Tell us what your app needs and we'll build it.

See premium plans →

Authentication

Every request to /api/public/v1/* requires an API key. Free users share one public key (baked into the downloadable client below). Premium customers get their own key. Pass it in any one of these ways:

  1. HTTP header (recommended): x-api-key: YOUR_KEY
  2. Authorization header: Authorization: Bearer YOUR_KEY
  3. Query string: ?api_key=YOUR_KEY

Missing or invalid keys return 401 Unauthorized. Check the tier field in the response to confirm Free vs Premium.

JavaScript / fetch

// Free (shared public key)
const res = await fetch(
  "https://mcsports.live/api/public/v1/feed",
  { headers: { "x-api-key": "mcs_public_34757c97d2f5420905996dd57065a57f36d03e7b" } }
).then(r => r.json());

console.log(res.tier); // "free"

curl

# Free
curl -H "x-api-key: mcs_public_34757c97d2f5420905996dd57065a57f36d03e7b" \
  https://mcsports.live/api/public/v1/feed

# Premium (your own key)
curl -H "x-api-key: YOUR_KEY" \
  https://mcsports.live/api/public/v1/feed

Endpoints

All endpoints return JSON, include tier and updatedAt, and ship with permissive CORS headers.

GET/api/public/v1/everything

FULL FETCH — one request returns every match (live, upcoming, ended) with HLS streams, live TV channels, news, highlights and your IPTV playlist URL.

Query parameters

NameTypeDescription
channelsbooleanSet to false to omit the TV channel list.
streamsbooleanSet to false to omit match stream URLs.
limitChannelsnumberCap the channel list. Free keys are capped at 200; Premium gets all.

Response fields

FieldTypeDescription
plan"free" | "premium"Plan of the key that made the call.
countsobjectTotals for matches, live, upcoming, ended, channels, news, highlights.
matches[]Match[]Same shape as /matches.
channels[]{ id, name, logo, country, resolve }Live TV channels. Call `resolve` with your key for a playable HLS URL.
news[]News[]Latest sports news.
highlights[]Highlight[]Recent highlight clips.
iptv.playliststring (URL)M3U playlist URL for VLC / TiviMate / Smarters.
GET /api/public/v1/everything
GET/api/public/v1/channels

All live TV channels with logos and categories.

Query parameters

NameTypeDescription
limitnumberMax channels to return.
qstringSearch channels by name.

Response fields

FieldTypeDescription
channels[].idnumberChannel id (use with /channels/:id).
channels[].namestringChannel name.
channels[].logostring (URL)Channel logo.
GET /api/public/v1/channels?limit=10
GET/api/public/v1/channels/:cid

Resolve a channel into a playable, proxied HLS URL (short-lived).

Query parameters

NameTypeDescription
:cidrequirednumberChannel id from /channels.
delaynumberSeconds behind live (0-300, default 60).

Response fields

FieldTypeDescription
streamstring (URL)Same-origin HLS .m3u8 playlist.
expiresInnumberSeconds until the URL expires.
GET /api/public/v1/channels/:cid
GET/api/public/v1/feed

Everything in one shot: live + upcoming matches, latest news, and highlights.

Response fields

FieldTypeDescription
tier"free" | "premium"Which tier served this response.
updatedAtstring (ISO date)Server time of the snapshot.
counts.matchesnumberTotal matches returned.
counts.livenumberCurrently live matches.
counts.upcomingnumberScheduled / upcoming matches.
counts.newsnumberNumber of news items.
counts.highlightsnumberNumber of highlight clips.
matches[]Match[]See /matches for the Match shape.
news[]News[]See /news for the News shape.
highlights[]Highlight[]See /highlights for the Highlight shape.
GET /api/public/v1/feed
GET/api/public/v1/matches

All live + upcoming matches with HLS stream URLs.

Query parameters

NameTypeDescription
statusLIVE | UPCOMINGFilter by match status.
sportstringFilter by sport (e.g. Soccer, Basketball).
streamsbooleanSet to false to omit stream URLs. Default true.

Response fields

FieldTypeDescription
matches[].idstringStable match id (use with /matches/:id).
matches[].leaguestringLeague / competition name.
matches[].sportstringSport name.
matches[].statusLIVE | UPCOMING | FINISHEDMatch state.
matches[].timestringClock or kickoff label.
matches[].home{ name, logo, score }Home team.
matches[].away{ name, logo, score }Away team.
matches[].streamstring | nullPrimary HLS .m3u8 URL (proxied, CORS-enabled).
matches[].streamsstring[]All known HLS sources for this match.
GET /api/public/v1/matches?status=LIVE
GET/api/public/v1/matches/:id

Single match detail by id.

Query parameters

NameTypeDescription
:idrequiredstringMatch id from /matches.

Response fields

FieldTypeDescription
matchMatchSame shape as items in /matches.
GET /api/public/v1/matches/:id
GET/api/public/v1/news

Latest sports news headlines.

Response fields

FieldTypeDescription
news[].idstringUnique news item id.
news[].titlestringHeadline.
news[].summarystringShort article summary.
news[].imagestring (URL)Cover image.
news[].sourcestringPublisher name.
news[].datestring (ISO date)Published date.
news[].urlstring (URL)Original article URL.
GET /api/public/v1/news
GET/api/public/v1/highlights

Recent video highlights with thumbnail and duration.

Response fields

FieldTypeDescription
highlights[].idstringUnique highlight id.
highlights[].titlestringClip title.
highlights[].thumbnailstring (URL)Preview image.
highlights[].videoUrlstring (URL)Playable video URL.
highlights[].durationstringDuration label (e.g. '2:14').
highlights[].leaguestringLeague / competition name.
GET /api/public/v1/highlights

Caching & rate limits

Responses are served fresh on every request. There are no hard rate limits — polling once every 10–30s is plenty for live data.

Why Premium?

Premium unlocks custom endpoints built for your app and priority support — one-time payment, lifetime key. See plans on the upgrade page.