Skip to content
Scores and results

Alternative football scores API grouped by competition

Alongside the main scores feed, FootballAPI.net publishes a newer score service that returns matches grouped by competition. This page explains why two score services exist, how to evaluate them side by side, and why you should not assume their envelopes are interchangeable.

Primary endpoint

GET/api/v1/football/scores-new

No query parameters.

Access: All plans; Starter limited to your five saved leagues. Header: X-API-Key.

Illustration of two parallel score boards, one plain and one divided into competition sections, side by side.
Two published score services; evaluate each on its own structure rather than assuming they match.
01

Why there are two score services

Data sources evolve. When a source introduces a newer version of a service, existing integrations still depend on the old one, and switching everyone at once would break products that work today. So FootballAPI.net publishes both: the main scores feed at its established path, and scores-new as a separately documented service. Neither is deprecated on this page, and neither is a premium tier of the other.

The newer service returns matches grouped by competition, and its JSON responses have been verified through the gateway. Like the main feed, it takes no parameters and has a cache time of about thirty seconds. Like every feed, its qualification is sample received: a response has come back, while final freshness, coverage and licensing checks are pending. That label does not make it experimental in the sense of unstable, but it does mean we are not certifying completeness or latency.

The point of this page is not to tell you which one to use. It is to help you choose deliberately, and to avoid a specific mistake: writing one mapping layer and pointing it at both.

02

Do not assume identical envelopes

Both services return the gateway's standard outer envelope with data and meta. Inside data, though, each carries its own source structure. The grouping by competition in scores-new is a real structural difference, and there may be others in naming, nesting and which attributes appear. We do not normalise either into a shared schema, because doing so would hide exactly the differences you need to see when choosing.

Treat the two as separate integrations. If your code base uses both, give each its own mapping module with its own tests built from saved responses. A shared function that tries to read either structure tends to grow conditional branches until nobody is sure which path a given match took.

  • Separate mapping modules for scores and scores-new.
  • Separate saved test fixtures for each structure.
  • Store which service produced each snapshot alongside the data.
  • Keep identifiers as strings and at-sign attributes as supplied in both.
Evaluating two score servicesFlow: request scores and scores-new at the same moment, compare competitions and matches by string ID, choose one per product surface, and map from its own structure.01scoresmain service02scores-newgrouped03Compare IDssame moment04Choose oneper surface
Evaluating two score services. Compare both services on the same day, then commit each product surface to one of them.
03

A fair side-by-side evaluation

Comparisons are only fair if both requests happen at the same moment. Fetch both services within a few seconds of each other during a busy match window, save both bodies, and compare them on the things your product depends on. Which competitions appear in each? For a sample of matches present in both, do the identifiers line up? Are match states expressed in a way your interface can use? How large is each response, and how long does your server take to process it?

Repeat the comparison on a quiet day and on a day with late kick-offs in several timezones. A service that suits a Saturday afternoon may behave differently at the edges. Keep the saved bodies; they become your regression tests later.

Shell: capture both services at the same momentbash
stamp=$(date -u +%Y%m%dT%H%M%S)
for feed in scores scores-new; do
  curl -sS -H "X-API-Key: $FOOTBALLAPI_KEY" \
    "https://footballapi.net/api/v1/football/$feed" \
    -o "$feed-$stamp.json" &
done
wait
ls -l *-$stamp.json
04

When competition grouping helps

If your interface is organised by competition anyway, which most score centres are, a response that already groups matches that way can simplify the rendering code. You iterate over competitions and then over their matches, rather than collecting matches into groups yourself. That is a modest benefit, not a decisive one, but it does remove a class of bugs where a match is assigned to the wrong group because of an inconsistent attribute.

Grouping in the response does not decide the order of groups on your page. Order them for your audience, as you would with any score centre, and keep the source group label rather than inventing your own competition names.

05

Moving from one service to the other

Some teams start on the main scores feed and later decide that scores-new suits them better, or the reverse. A safe migration runs both in parallel for a period. Your poller fetches both, your old mapping continues to serve readers, and your new mapping writes to a shadow store that you compare automatically. When the shadow output has matched for long enough across different kinds of match day, switch the reader-facing pages over and keep the old poller running for a short while as a fallback.

During the parallel period your request count roughly doubles for the score feeds. Budget for that explicitly. Two services polled every thirty seconds across a full day is 5,760 requests, which is above the Starter daily inclusion of 5,000, so a Starter customer would either poll less often or accept a small number of extra requests at EUR 0.002 each.

06

Writing an adapter layer

If you consume both scores services, write a small adapter for each that converts responses into your own internal match model. Your pages then render one model regardless of source. Keep the adapters separate and tested against saved samples, because the two services are documented separately and their structures should not be assumed to match.

Record in your internal model which service each match came from, so you can trace questions back to the right feed.

07

Testing the alternative service

Save responses from this service separately from the main scores service and test its adapter on its own. Do not reuse fixtures from the other service in these tests.

08

Errors from this service

Errors use the gateway's structured JSON body with a code, a message and a requestId. Handle a 429 by waiting for the Retry-After period, treat 502 and 504 as temporary, and keep showing your stored scores with their refresh time during an outage.

09

Plan scope

Scores-new is league filtered in the same way as the main feed. Starter responses at EUR 29 a month contain only your five saved leagues. Growth at EUR 99 and Pro at EUR 249 receive the available package competitions, with daily inclusions of 25,000 and 250,000 successful requests respectively. Whether a competition appears on a given day depends on the source on every plan.

There is no separate price for using both score services. Each successful request counts once towards the daily inclusion, whichever service answers it. Failed and denied requests are not billed, and the 100 requests per second account safety ceiling applies across all feeds together. There is no free trial and no VAT is currently charged.

10

What neither service is

Neither score service is a stream. Both are REST endpoints you poll, and each response is a snapshot. Neither contains positional or ball-tracking data, and subscribing to a plan does not activate any streaming or tracking product. Neither carries prices or predictions. If a product idea needs any of those, raise it with support before building on a score feed and hoping the gap closes later.

And neither replaces a fixture list. A score feed covers a current window; for a full season calendar, use the fixtures feed with a leagueId, and join the two on string match identifiers.

Questions developers ask

Which score service should I use?
Evaluate both on the same day against your product. Neither is deprecated here, and the choice depends on which structure suits your interface.
Can one mapping layer read both services?
We advise against it. The data structures differ, including the competition grouping in scores-new. Keep separate mappings.
Does scores-new take parameters?
No. Like the main scores feed, a single request returns the current window.
Does using both services cost extra?
Each successful request counts once against your daily inclusion. Polling both roughly doubles score-feed usage.
Is scores-new filtered on Starter?
Yes. Starter responses contain only your saved leagues.

Check the plan before you write the integration.

Starter EUR 29, Growth EUR 99, Pro EUR 249 per month. No free trial. No VAT currently charged.