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.

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/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.