Insights
Integration
Highlights
Getting started

How to add sports highlights to your app in under an hour

7 min readSportFeeds

Most teams budget a quarter for a highlights pipeline. Here is the whole integration — auth, one request, and rendering — in about an hour of real work.

Adding sports highlights to a product usually turns into a quarter-long project: negotiate rights, stand up an ingestion pipeline, build video storage, then write the mapping layer that connects a clip to the player and game IDs your app already uses. That last part is the one that quietly eats the schedule.

The shortcut is to skip the pipeline entirely and request highlights that are already tagged to the IDs you use. This walkthrough is the whole integration, start to finish.

Step 1 — Get a key

Create an account and generate an API key from the dashboard. The testing tier is free, so you can build the entire integration before talking to anyone about pricing.

curl https://api.sportfeeds.com/v1/posts \
  -H "Authorization: Bearer $SPORTFEEDS_API_KEY"

Step 2 — Ask for what your screen needs

Every request is a filter over verified, already-tagged content. If you are building a player card, filter by player. If you are building a game recap, filter by league and media type. There is no separate 'search' concept to learn.

# Video highlights from the NFL, highest-engagement first
curl "https://api.sportfeeds.com/v1/posts?leagues=NFL&media_type=video&limit=20" \
  -H "Authorization: Bearer $SPORTFEEDS_API_KEY"

Parameters are plural arrays — leagues, sports, teams, players, sources — and they are case-insensitive. Anything unrecognized comes back as an X-SportFeeds-Warning header rather than silently returning the wrong data, which is the single most useful thing an API can do while you are still integrating.

Step 3 — Filter by engagement, not just recency

Raw recency is a bad ranking for highlights. A clip posted 40 seconds ago has no signal yet; a clip posted 20 minutes ago that is outperforming its account's baseline is the one your users want. Every post carries an engagement rating from 0 to 10, recalculated as the post matures through a fixed ladder of measurements at 1, 5, 15, 30 and 60 minutes, then 6 and 12 hours.

For a highlights surface, a floor of 8 is a good starting point. It cuts volume hard and lifts quality more than any other single change you can make.

Step 4 — Render the video correctly

This is the step that trips up almost every integration, so it is worth being explicit. Video URLs are subject to hotlink protection on the origin. If you drop the raw URL into a <video> tag on your own domain, it will often work in local development and then fail in production or in a private browsing window, because the referrer changes.

  • Serve highlight video through a proxy on your own origin rather than hotlinking directly.
  • Autoplay muted, loop, and hide native controls for feed-embedded clips — that is the behavior users expect from a highlight card.
  • Always render the source attribution alongside the clip. This is a requirement, not a style choice.

Step 5 — Decide between polling and push

Polling every 30 to 60 seconds is fine for most surfaces and is what the majority of production integrations do. If you are building a breaking-news alert, use the webhook instead: qualifying posts are pushed to your endpoint the moment they clear the threshold, which removes the latency floor that polling imposes.

What you did not have to build

  • An ingestion pipeline and its on-call rotation
  • A video storage and transcoding tier
  • An entity-resolution layer mapping clips to your existing player and team IDs
  • A compliance process for handling upstream deletions

That last one matters more than teams expect. When content is deleted upstream, you are obliged to remove it too — which means you need a deletion feed, not just an ingestion feed.

See the Sports Highlights API

One REST API, pre-tagged to the player, team and league IDs you already use.

Explore the product