Observed since 20 Oct, 18:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
JavaScript/Node.js client for the 11elo Soccer ELO API
JavaScript/Node.js client for the 11elo Soccer ELO API — live and historical Elo ratings for German football (Bundesliga, 2. Bundesliga, 3. Liga).
Works in Node.js 18+, modern browsers, Deno and Bun — uses the native fetch API with no extra dependencies.
npm install 11elo
import { Client } from '11elo';
const client = new Client({ apiKey: '11e_fre_your_key_here' });
// List all teams
const teams = await client.getTeams();
teams.forEach(t => console.log(t.teamName, t.currentElo));
// Get detailed info for one team
const { team, eloHistory } = await client.getTeam('Bayern München');
console.log(team.currentElo);
// Upcoming matches
const upcoming = await client.getUpcomingMatches({ league: 'BL1', limit: 10 });
upcoming.forEach(m => console.log(m.homeTeam, 'vs', m.awayTeam));
Register for free at https://www.11elo.com/docs.
Keys follow the format 11e_<tier>_<hex> and are sent via the X-API-Key request header (handled automatically by this client).
Rate limits by tier:
| Tier | Requests / day |
|---|---|
| Free | 100 |
| Basic | 1,000 |
| Pro | 10,000 |
new Client(options)| Option | Default | Description |
|---|---|---|
apiKey | — | Your 11elo API key (required) |
baseUrl | https://api.11elo.com | Override for self-hosted / local dev |
timeoutMs | 30000 | Request timeout in milliseconds |
client.getTeams() → Promise<object[]>Returns all teams with current ELO stats, league info and trend data.
const teams = await client.getTeams();
// [{ teamName: 'Bayern München', currentElo: 1847, league: 'BL1', ... }, ...]
client.getTeam(teamName) → Promise<object>Full detail for one team — ELO history, recent form, upcoming matches, career stats.
const { team, eloHistory, recentForm, upcomingMatches } =
await client.getTeam('Borussia Dortmund');
client.getHeadToHead(team1, team2) → Promise<object[]>Historical head-to-head match results between two teams.
const h2h = await client.getHeadToHead('Bayern München', 'Borussia Dortmund');
// [{ date: '2026-02-15', result: '2:1', winner: 'Bayern München', ... }, ...]
client.getMatches(options?) → Promise<object[]>Paginated match history. All options are optional.
| Option | Description |
|---|---|
season | Filter by season, e.g. "2024/2025" |
from | ISO-8601 start date ("YYYY-MM-DD") |
to | ISO-8601 end date ("YYYY-MM-DD") |
limit | Max results (default 100, max 500) |
offset | Pagination offset (default 0) |
const matches = await client.getMatches({ season: '2024/2025', limit: 50 });
client.getUpcomingMatches(options?) → Promise<object[]>Upcoming fixtures with ELO-difference predictions.
| Option | Description |
|---|---|
league | League code filter, e.g. "BL1" |
sort | Sort order (default "date") |
limit | Max results (default 50, max 200) |
const upcoming = await client.getUpcomingMatches({ league: 'BL1' });
client.getMatch(matchId) → Promise<object>Full detail for a single match.
const { match, homeRecentForm, headToHead } = await client.getMatch(12345);
client.getSeasons() → Promise<{ seasons: string[], latestSeason: string }>List all available seasons.
const { seasons, latestSeason } = await client.getSeasons();
client.getSeason(season, options?) → Promise<object[]>Per-team ELO change statistics for a given season.
| Option | Description |
|---|---|
league | Optional league filter, e.g. "BL1" |
const entries = await client.getSeason('2024/2025', { league: 'BL1' });
// [{ teamName: 'Bayern München', startElo: 1820, endElo: 1847, change: 27, ... }, ...]
client.getComparisonHistory(teams) → Promise<object>Time-series ELO data for multiple teams in one call.
const history = await client.getComparisonHistory([
'Bayern München',
'Borussia Dortmund',
]);
// {
// 'Bayern München': [{ Date: 1709856000000, ELO: 1847 }, ...],
// 'Borussia Dortmund': [{ Date: 1709856000000, ELO: 1720 }, ...]
// }
All exceptions extend ElevenEloError.
| Class | When thrown |
|---|---|
AuthenticationError | API key is missing or invalid (HTTP 401) |
RateLimitError | Daily quota exceeded (HTTP 429) |
NotFoundError | Resource does not exist (HTTP 404) |
ApiError | Any other non-2xx response |
import { Client, AuthenticationError, RateLimitError, NotFoundError } from '11elo';
const client = new Client({ apiKey: '11e_fre_your_key_here' });
try {
const team = await client.getTeam('Unknown FC');
} catch (err) {
if (err instanceof NotFoundError) {
console.error('Team not found');
} else if (err instanceof RateLimitError) {
console.error('Rate limit hit, resets at', err.resetAt);
} else if (err instanceof AuthenticationError) {
console.error('Bad API key');
} else {
throw err;
}
}
The package ships as ES modules ("type": "module"). For CommonJS projects, use dynamic import():
const { Client } = await import('11elo');
Or use a bundler (webpack, Rollup, esbuild) which handles the interop automatically.
MIT
npm · 90 observations shown. Missing days are unknown.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-22 – 2026-10-22 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-21 – 2026-10-21 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-20 – 2026-10-20 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-19 – 2026-10-19 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-18 – 2026-10-18 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-17 – 2026-10-17 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-16 – 2026-10-16 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-15 – 2026-10-15 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-14 – 2026-10-14 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-13 – 2026-10-13 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-12 – 2026-10-12 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-11 – 2026-10-11 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-10 – 2026-10-10 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-09 – 2026-10-09 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-08 – 2026-10-08 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-07 – 2026-10-07 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-06 – 2026-10-06 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-05 – 2026-10-05 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-04 – 2026-10-04 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-03 – 2026-10-03 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-02 – 2026-10-02 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-10-01 – 2026-10-01 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-30 – 2026-09-30 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-29 – 2026-09-29 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-28 – 2026-09-28 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-27 – 2026-09-27 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-26 – 2026-09-26 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-25 – 2026-09-25 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-24 – 2026-09-24 | 5 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-23 – 2026-09-23 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-22 – 2026-09-22 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-21 – 2026-09-21 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-20 – 2026-09-20 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-19 – 2026-09-19 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-18 – 2026-09-18 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-17 – 2026-09-17 | 38 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-16 – 2026-09-16 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-15 – 2026-09-15 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-14 – 2026-09-14 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-13 – 2026-09-13 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-12 – 2026-09-12 | 5 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-11 – 2026-09-11 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-10 – 2026-09-10 | 4 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-09 – 2026-09-09 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-08 – 2026-09-08 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-07 – 2026-09-07 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-06 – 2026-09-06 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-05 – 2026-09-05 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-04 – 2026-09-04 | 14 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-03 – 2026-09-03 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-02 – 2026-09-02 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-09-01 – 2026-09-01 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-31 – 2026-08-31 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-30 – 2026-08-30 | 8 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-29 – 2026-08-29 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-28 – 2026-08-28 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-27 – 2026-08-27 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-26 – 2026-08-26 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-25 – 2026-08-25 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-24 – 2026-08-24 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-23 – 2026-08-23 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-22 – 2026-08-22 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-21 – 2026-08-21 | 3 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-20 – 2026-08-20 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-19 – 2026-08-19 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-18 – 2026-08-18 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-17 – 2026-08-17 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-16 – 2026-08-16 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-15 – 2026-08-15 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-14 – 2026-08-14 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-13 – 2026-08-13 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-12 – 2026-08-12 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-11 – 2026-08-11 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-10 – 2026-08-10 | 5 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-09 – 2026-08-09 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-08 – 2026-08-08 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-07 – 2026-08-07 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-06 – 2026-08-06 | 2 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-05 – 2026-08-05 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-04 – 2026-08-04 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-03 – 2026-08-03 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-02 – 2026-08-02 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-31 – 2026-07-31 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-30 – 2026-07-30 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-29 – 2026-07-29 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-28 – 2026-07-28 | 0 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-27 – 2026-07-27 | 1 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-26 – 2026-07-26 | 5 | 2026-10-23T10:56:20.8381216Z |
| 2026-07-25 – 2026-07-25 | 4 | 2026-10-23T10:56:20.8381216Z |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 18:05 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:bede0bdfbd1f671b945c9dcee90b5fdcc756fab4fbfffd97276c31799492d659