Bundesliga Live Scores

FREEMIUM
Door Simone | Bijgewerkt il y a 4 jours | Sports
Populariteit

6.7 / 10

Latency

431ms

Serviceniveau

100%

Health Check

N/A

README

Bundesliga Live Scores

The Bundesliga Live Scores is already, without any doubt, in so little time from its birth, the best API available on the web for the top professional German football league and don’t believe we have finished, indeed we are only at the start.
You too can help us to make even better this API asking on the API Support tab for the features you dream, our developers will try to make them real.
In the meantime give a look at the always growing list of its unique features.
Have fun!

The Bundesliga Ninja Team

Talend Open Studio integration

You don’t need to be a developer or to recruit one to use this API, thanks to his easy integration with the Talend Open Studio suite.
At the Talend marketplace you can now download for free the tFootballDataInput component that let you to easily consume the mashape Bundesliga API into your integration jobs in a blink just using your Mashape key and without writing a single line of code!
The component is now released in beta version v.04 that integrates only some features now available on Mashape, but we count to release new versions with weekly schedule to add more.
The component let you either to easily access other European Football Leagues Mashape API that is, La Liga, Ligue 1, Premier League and Serie A.
For any trouble using the component the preferred mode to get support is to ask to the community at the Talend Forum, instead for any bug or new features request is better to open a ticket on the API Support.
For a demo on how using Talend and the tFootballDataInput component take a look at this YouTube demo here.

Season results

It’s possible to retrieve all the 2016-17 season matches calling the endpoint
/api/bundesliga
You can call the API
-without submitting any parameter, to get all the matches for the day (if there isn’t any match for the day you will get a 500 server error, that it isn’t count as an API call)
-submitting the parameter date, to retrieve the matches for that date (in the format mmddyyyy)
-submitting the parameter team1, to retrieve the matches that the team has played at home (together with team2 return that very match)
-submitting the parameter team2, to retrieve the matches that the team has played away (together with team1 return that very match)
-submitting the parameter matchday, to retrieve the matches for that round

If matches are already played, the API will give you data about red cards number if any, referee , final and first half scores too, otherwise only the matches schedule.
Here it is an example response for a call wit a match day already played (matchday=1)

 {"matches":[
      {"team1":{"teamScore":5,"teamName":"Bayern Munich","firstHalfScore":1},
      "team2":{"teamScore":0,"teamName":"Hamburger SV","firstHalfScore":0},"time":"FT","referee":"Bastian Dankert","when":"Friday, Aug 14 2015"},
      .....
      {"team1":{"teamScore":1,"teamName":"VfB Stuttgart","firstHalfScore":0},
      "team2":{"teamScore":3,"teamName":"FC Cologne","firstHalfScore":0},"time":"FT","referee":"Wolfgang Stark","when":"Sunday, Aug 16 2015"}
 ]}

and here it is an example response for a call wit a match day not yet played (matchday=22)

{"matches":[
  {"team1":{"teamName":"Bayern Munich"},"team2":{"teamName":"Darmstadt"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Schalke 04"},"team2":{"teamName":"VfB Stuttgart"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Bayer Leverkusen"},"team2":{"teamName":"Borussia Dortmund"},"when":"Saturday, Feb 20 2016"},
  .....
  {"team1":{"teamName":"Ingolstadt"},"team2":{"teamName":"Werder Bremen"},"when":"Saturday, Feb 20 2016"}
]}

Take in mind that this API returns only final results ("time":"FT") or not already played matches, and the final ones only after a while the matches are really finished (however always within 24 hours); if you need live updates you have to set thelive parameter to true (in this case time returns the minute for the match), if there isn’t any playing match for the parameters specified, the API give you the 500 error message ‘No games found’.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

You can get historical results either setting the optional parameter season (default value 2016-17); for now you can get results from the season 2008-09.
Historical data are only available with the MEGA plan.

Lineups, substitutes and coaches

It’s possible to get data about teams players and coaches for a game using the following API
/api/bundesliga/formations
The API requires two mandatory attributes, team1 and team2 to select the game of interest.
The result is a JSON object with two properties, team1 and team2, where each team property is an object containing the teamName and the players properties, where the first one is the name of the team (equals to the one in the request) and the second one an object with the arrays lineups and substitutes with each array item equals to an object containing the playerNamber, that is the shirt number for the player and the playerName attribute.
Captain players are identified by the property isCaptain.
Following an example response for the request
team1=Schalke+04&team2=Hannover+96

{
  "team1": {
    "teamName": "Schalke 04",
    "players": {
      "substitutes": [
        {
          "playerNumber": "3",
          "playerName": "Junior Caicara"
        },
        {
          "playerNumber": "6",
          "playerName": "Sead Kolasinac"
        },
        {
          "playerNumber": "9",
          "playerName": "Franco Di Santo"
        },
        {
          "playerNumber": "23",
          "playerName": "Pierre-Emile Højbjerg"
        },
        {
          "playerNumber": "24",
          "playerName": "Kaan Ayhan"
        },
        {
          "playerNumber": "30",
          "playerName": "Michael Gspurning"
        },
        {
          "playerNumber": "33",
          "playerName": "Roman Neustädter"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ralf Fährmann"
        },
        {
          "playerNumber": "27",
          "playerName": "Sascha Riether"
        },
        {
          "playerNumber": "15",
          "playerName": "Dennis Aogo"
        },
        {
          "playerNumber": "8",
          "playerName": "Leon Goretzka"
        },
        {
          "playerNumber": "4",
          "playerName": "Benedikt Höwedes"
        },
        {
          "playerNumber": "32",
          "playerName": "Joel Matip"
        },
        {
          "playerNumber": "19",
          "playerName": "Leroy Sané"
        },
        {
          "playerNumber": "5",
          "playerName": "Johannes Geis"
        },
        {
          "playerNumber": "25",
          "playerName": "Klaas-Jan Huntelaar"
        },
        {
          "playerNumber": "7",
          "playerName": "Max Meyer"
        },
        {
          "playerNumber": "13",
          "playerName": "Eric Maxim Choupo-Moting"
        }
      ]
    },
    "coach": "André Breitenreiter"
  },
  "team2": {
    "teamName": "Hannover 96",
    "players": {
      "substitutes": [
        {
          "playerNumber": "7",
          "playerName": "Edgar Prib"
        },
        {
          "playerNumber": "11",
          "playerName": "Felix Klaus"
        },
        {
          "playerNumber": "13",
          "playerName": "Philipp Tschauner"
        },
        {
          "playerNumber": "14",
          "playerName": "Allan Saint-Maximin"
        },
        {
          "playerNumber": "20",
          "playerName": "Felipe"
        },
        {
          "playerNumber": "31",
          "playerName": "Waldemar Anton"
        },
        {
          "playerNumber": "35",
          "playerName": "Charlison Benschop"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ron-Robert Zieler"
        },
        {
          "playerNumber": "29",
          "playerName": "Oliver Sorg"
        },
        {
          "playerNumber": "3",
          "playerName": "Miiko Albornoz"
        },
        {
          "playerNumber": "8",
          "playerName": "Manuel Schmiedebach"
        },
        {
          "playerNumber": "25",
          "playerName": "Marcelo"
        },
        {
          "playerNumber": "19",
          "playerName": "Christian Schulz"
        },
        {
          "playerNumber": "2",
          "playerName": "Leon Andreasen"
        },
        {
          "playerNumber": "5",
          "playerName": "Salif Sané"
        },
        {
          "playerNumber": "9",
          "playerName": "Artur Sobiech"
        },
        {
          "playerNumber": "6",
          "playerName": "Ceyhun Gülselam"
        },
        {
          "playerNumber": "26",
          "playerName": "Kenan Karaman"
        }
      ]
    },
    "coach": "Michael Frontzeck"
  }
}

The lineups players are ordered from goalkeeper to forward, to get more insight on how players are on the pitch see the events Module-Start and Module-Change you can get from the match events API without forgetting the attribute position returned by the player match statistics API.

You can get the formations starting from 30 minutes before a match start using thelive parameter set to true, if the API give you the 500 error message, that means the game is already finished from a while or it’s not playing or not going to play.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

The APIs can either respond with a 500 error if doesn’t exist a match in the 2016-17 season for them team1 and team2 parameters in the request (values are case sensitive, use the season results requests to find out valid values to use).

For now the API returns results for the current season only.

League Table

Using the endpoint API /api/bundesliga/table you will get the current table for the league.
The current table is compute considering all the finished games returned by the season results API (the one with no live updates).
The API let you to restrict the games considered using the following three optional parameters
from to include all the games played from (default the first played game returned by the no live version of the season results API)
to to include all the games played till to (default the last played game return by the no live version of the season results API)
mode set to home to consider only home games, to away to consider only away games (default all games)
time to compute the table considering only the first half (FH) or the second half (SH). Default is full time (FT)

The JSON response give you data about the team name the game played, win, loss, goalsFor, goalsAgainst and points.
The API at the moment don’t take into account any penalization a team could have to compute the total points number.

You can get table from previous seasons either setting the option parameter season; for now you can query for league table from the 2008-09 season (default value for season is 2016-17).

Match scorers

It’s possible to get all the scorers for a match with a single API call.
There are two version for this API, one without live update /api/bundesliga/scores that get you the answer after a while the game is finished (usually between few hours, and however always within 24 hours), and the other /api/live/bundesliga/scorers with live updates, so you can get the answer even while the match is still playing (check the season results API live version to know the games with goals).
All two versions require two mandatory parameters
team1 that is the home team name
and
team2 that is the away team name
(always the ones returned by the season results API).
The JSON response contains the player name who scored the goal and the minute it was scored, more it can contains other attributes either that qualify better the kind of goal.
At the moment the attributes handled by the API are:
isPenalty true if the goal is scored from a penalty, default false
isOwn true if the goal is an own goal, default false
isFromCorner true if the goal is scored from a corner, default false
isFreekick true if the goal is scored from a free kick, default false
isLeftFoot true if the goal is scored by left, default false
isRightFoot * true if the goal is scored by right, default false*
isHead true if the goal is scored by head, default false

Here it is a JSON response for the following query string
team1=Schalke+04&team2=Hannover+96

{"team1":{
  "teamName":"Schalke 04",
  "goals":[
    {"isRightFoot":true,"isPenalty":true,"player":"Johannes Geis","minute":"51'"},
    {"isRightFoot":true,"player":"Klaas-Jan Huntelaar","minute":"72'"},
    {"isHead":true,"player":"Franco Di Santo","minute":"81'"}
]},
"team2":{
  "teamName":"Hannover 96",
  "goals":[
    {"isRightFoot":true,"player":"Allan Saint-Maximin","minute":"81'"}
]}}

The API give you an answer even if there isn’t any goal for a match, in that case the goals attribute will be an empty array.

For now the API returns results for the current season only.

Top Scorers

The /api/bundesliga/table/scorers let you the get the top five scorers for the league.
The JSON result give you the player name, the number of goals scored in order from the first till the fifth and the number of ones scored by penalty.
You can either use optional parameters to query for a different set of games, that is
from to consider only the games played from the match day specified (default 1)
to to consider only the games played till to the match day specified (default last final match day returned by the season results API no live version)
mode to consider only goals scored at home or away (default all)
player to get the result only for the player name specified (useful to get the number of goals scored by those players that aren’t in top 5).
team *to consider only goals scored for the specified team *
If you specify a player name that hasn’t scored any goal yet, you will get an empty response, that is:

{"scorers":[]}

otherwise, like for example querying for
player=Anthony+Ujah

{"scorers":[{"playerName":"Anthony Ujah","goals":7","penalties":0}]}

or for for example with
mode=away&to=15

{"scorers":[
  {"playerName":"Yunus Malli","goals":5","penalties":0},
  {"playerName":"Anthony Ujah","goals":5","penalties":0},
  {"playerName":"Salomon Kalou","goals":5","penalties":1},
  {"playerName":"Paul Verhaegh","goals":4","penalties":1},
  {"playerName":"Kevin Volland","goals":4","penalties":0}
]}

or maybe simply without any parameter

{"scorers":[
  {"playerName":"Robert Lewandowski","goals":25","penalties":1},
  {"playerName":"Pierre-Emerick Aubameyang","goals":19","penalties":0},
  {"playerName":"Thomas Müller","goals":15","penalties":1},
  {"playerName":"Javier Hernández","goals":13","penalties":1},
  {"playerName":"Sandro Wagner","goals":13","penalties":1}
]}

For now the API returns results for the current season only.

Match events

The Bundesliga Live Scores API let you trace two different kind of events
Team events
Module-Start (tell you the team module, that is how players are on the pitch, as soon as the match start)
Module-Change (tell you each module change occurred during the match)
Players events
Yellow-Card
Red-Card
In and Out (substitutions)
Missed-Penalty (penalty failed)
Saved-Penalty (keeper save a penalty)
Saved-Goal (player avoid an already done goal clearance off the line)
Shot-On-Post
Error-Goal (player error that lead to a goal)
Assist-Goal (when a player intentionally do an assist that lead to a goal)
Goal-Disallowed
Penalty-Won (the player that won the penalty)
Penalty-Commited (the player that committed a penalty foul)
Changed-Captain (the new captain player if the previous goes out)

All teams and players events give you the minute the event occurred,
teams events have a value attribute more that get the value for the event (the team module),
players events instead a list of players name related to the event.

For example

 ....
{"eventName":"Module-Start","value":"4411","minute":"0'"}     *value is the formation module 4-4-1-1
....
{"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
....

There are two API version to get the data events, that is, with (/api/live/bundesliga/match/events) or without live updates (/api/bundesliga/match/events).
The version without live update get you the data only after a while the match is finished (usually within few hours), the one with live updates instead get you real time data.
When the match is finished the live version continue to get you the answer that will be the same you get with the no live one if this last one has been synchronised (usually always within 24 hours).
All the two API versions require two parameters
team1 that is the home team name
and
team2 that is the away team name
and returns all the events for the two teams
for example with
team1=Schalke+04&team2=Hannover+96
you will get

  {"team1":
      {"teamName":"Schalke 04","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Klaas-Jan Huntelaar"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Franco Di Santo"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Pierre-Emile Højbjerg"}],"eventName":"In","minute":"78'"},
          {"players":[{"playerName":"Max Meyer"}],"eventName":"Out","minute":"78'"},
          {"players":[{"playerName":"Johannes Geis"}],"eventName":"Out","minute":"87'"},
          {"players":[{"playerName":"Sead Kolasinac"}],"eventName":"In","minute":"87'"},
          {"players":[{"playerName":"Sascha Riether"}],"eventName":"Yellow-Card","minute":"9'"}
  ]},
  "team2":{
      "teamName":"Hannover 96","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Artur Sobiech"}],"eventName":"Out","minute":"16'"},
          {"players":[{"playerName":"Charleston Benschop"}],"eventName":"In","minute":"16'"},
          {"players":[{"playerName":"Marcelo"}],"eventName":"Yellow-Card","minute":"50'"},
          {"players":[{"playerName":"Manuel Schmiedebach"}],"eventName":"Out","minute":"62'"},
          {"players":[{"playerName":"Allan Saint-Maximin"}],"eventName":"In","minute":"62'"},
          {"players":[{"playerName":"Leon Andreasen"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Edgar Prib"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
  ]}}

For now the API returns results for the current season only.

Match statistics

The API requires two mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
In the JSON response you can find the following impressive amount of statistics for each team of the match selected:
totalSaves touches aerialsWon passesTotal passesSuccessful cornersTotal cornersAccurate tackleSuccessful throwInsTotal

aerialsTotal offensiveAerials defensiveAerials shotsOffTarget tacklesTotal dribblesLost shotsTotal shotsBlocked

dribblesAttempted dribbledPast dispossessed foulsCommited shotsOnTarget offsidesCaught tackleUnsuccesful interceptions dribblesWon clearances possession

goals foulsWon penatyWon penaltyCommited

Here it is an example response for the query string team1=Schalke+04&team2=Hannover+96

{"team1":{
    "teamName":"Schalke 04",
    "teamStats":{
        "cornersTotal":10,"dribbledPast":8,"tackleSuccessful":12,"throwInsTotal":31,"aerialsTotal":43,
        "offensiveAerials":24,"dispossessed":11,"foulsCommited":8,"passesTotal":443,"offsidesCaught":3,"shotsOnTarget":8,
        "tackleUnsuccesful":8,"defensiveAerials":19,"interceptions":19,"touches":617,"shotsOffTarget":10,"tacklesTotal":20,
        "dribblesWon":14,"dribblesLost":11,"shotsTotal":26,"shotsBlocked":8,"aerialsWon":18,"clearances":16,"dribblesAttempted":25}},
 "team2":{
 "teamName":"Hannover 96",
     "teamStats":{
         "cornersTotal":10,"dribbledPast":14,"tackleSuccessful":22,"throwInsTotal":26,"aerialsTotal":43,"offensiveAerials":19,
         "dispossessed":5,"foulsCommited":13,"passesTotal":351,"offsidesCaught":2,"shotsOnTarget":1,"tackleUnsuccesful":14,
         "defensiveAerials":24,"interceptions":15,"touches":514,"shotsOffTarget":3,"tacklesTotal":36,"dribblesWon":8,"dribblesLost":7,
         "shotsTotal":7,"shotsBlocked":3,"aerialsWon":25,"clearances":30,"dribblesAttempted":15}}}

Take in mind that this API exists in two version, the one without live update /api/bundesliga/match/stats and the one with live update /api/live/bundesliga/match/stats with the second one one giving you real time statistics updates during the game and the first one giving you only the final statistics after a while the match is finished, after this point in time all the two API give you the same answer.

For now the API returns results for the current season only.

Player statistics for a match

It’s possible to get all the player statistics for a match using one of the two API version, the no live and the live one, with the first giving you the result only after a while the game is finished (usually within few hours and however always within 24 hours) and the second you giving you the result starting from the first minute match, that is with live updates.
The API requires three mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
player the player name you want to know statistics

The result is a JSON format response containing player infos like data age, weight, height and player match stats like dribble won, fouls committed.
The complete data list handle at the moment from the API follows:
player info
isManOfTheMatch, shirtNo, name, weight, age, height, isFirstEleven, position
player match stats
totalSaves, touches, aerialsWon, passesTotal, passesSuccessful, cornersTotal, cornersAccurate, tackleSuccessful,

throwInsTotal, aerialsTotal, offensiveAerials, defensiveAerials, shotsOffTarget, tacklesTotal,

dribblesLost, shotsTotal, shotsBlocked, dribblesAttempted, dribbledPast, dispossessed,

foulsCommited, shotsOnTarget, offsidesCaught, tackleUnsuccesful, interceptions, dribblesWon,

clearances, possession, goals, foulsWon, penaltyWon, penaltyCommited

Follow an example for
player=Klaas-Jan+Huntelaar&team1=Schalke+04&team2=Hannover+96

{"isFirstEleven":true,"isManOfTheMatch":true,"stats":
  {"throwInsTotal":1,"aerialsTotal":2,"offensiveAerials":2,"foulsCommited":1,"passesTotal":19,
  "offsidesCaught":1,"shotsOnTarget":1,"interceptions":1,"touches":27,"shotsOffTarget":1,
  "dribblesLost":1,"shotsTotal":3,"shotsBlocked":1,"aerialsWon":1,"dribblesAttempted":1},
"shirtNo":"25","name":"Klaas-Jan Huntelaar","weight":83,"position":"FW","age":32,"height":186}

For the position attribute you can get the following values:
GK = Goalkeeper
DM = Defensive Midfielder (1)
D = Defender (1)
M = Midfielder (1)
AM = Attacking Midfielder (1)
FW = Forward
Sub = substitute player

(1) the attribute value can have one letter more to specify better the field position, that is C for Center, L for Left and R for Right.

For now the API returns results for the current season only.

Missing player for a match

The API Missing players for a match requires two parameters
team1 and team2,
and returns a response a few days before a match with continue updates till the match starts.
Even after a match is played, the API continue to give you the last answer.
The response returns for each team the player name who will miss with the reason.
If there is any doubt about the player will play the match the reason will be inside a square bracket, otherwise the reason will be with no bracket.
Typical reasons are Injured, Suspended, Unfit, Other.
For example calling the API with
team1=Hertha+Berlin&team2=Hannover+96
you will have the following response

{ "team1" : { "players" : { "missing" : [ { "playerName" : "Sami Allagui",
            "reason" : "Injured"
          },
          { "playerName" : "Sinan Kurt",
            "reason" : "Injured"
          },
          { "playerName" : "John Brooks",
            "reason" : "Injured"
          },
          { "playerName" : "Per Skjelbred",
            "reason" : "[Injured]"
          }
        ] },
  "teamName" : "Hertha Berlin"
  },
"team2" : { "players" : { "missing" : [ { "playerName" : "Leon Andreasen",
            "reason" : "Injured"
          },
          { "playerName" : "Charlison Benschop",
            "reason" : "Injured"
          },
          { "playerName" : "Felipe",
            "reason" : "Injured"
          },
          { "playerName" : "Hotaru Yamaguchi",
            "reason" : "Injured"
          }
        ] },
  "teamName" : "Hannover 96"
}
}

For now the API returns results for the current season only.

You don’t need to be a developer or to recruit one to use this API, thanks to his easy integration with the Talend Open Studio suite.
At the Talend marketplace you can now download for free the tFootballDataInput component that let you to easily consume the mashape Bundesliga API into your integration jobs in a blink just using your Mashape key and without writing a single line of code!
The component is now released in beta version v.04 that integrates only some features now available on Mashape, but we count to release new versions with weekly schedule to add more.
The component let you either to easily access other European Football Leagues Mashape API that is, La Liga, Ligue 1, Premier League and Serie A.
For any trouble using the component the preferred mode to get support is to ask to the community at the Talend Forum, instead for any bug or new features request is better to open a ticket on the API Support.
For a demo on how using Talend and the tFootballDataInput component take a look at this YouTube demo here.
It’s possible to retrieve all the 2016-17 season matches calling the endpoint
/api/bundesliga
You can call the API
-without submitting any parameter, to get all the matches for the day (if there isn’t any match for the day you will get a 500 server error, that it isn’t count as an API call)
-submitting the parameter date, to retrieve the matches for that date (in the format mmddyyyy)
-submitting the parameter team1, to retrieve the matches that the team has played at home (together with team2 return that very match)
-submitting the parameter team2, to retrieve the matches that the team has played away (together with team1 return that very match)
-submitting the parameter matchday, to retrieve the matches for that round

If matches are already played, the API will give you data about red cards number if any, referee , final and first half scores too, otherwise only the matches schedule.
Here it is an example response for a call wit a match day already played (matchday=1)

 {"matches":[
      {"team1":{"teamScore":5,"teamName":"Bayern Munich","firstHalfScore":1},
      "team2":{"teamScore":0,"teamName":"Hamburger SV","firstHalfScore":0},"time":"FT","referee":"Bastian Dankert","when":"Friday, Aug 14 2015"},
      .....
      {"team1":{"teamScore":1,"teamName":"VfB Stuttgart","firstHalfScore":0},
      "team2":{"teamScore":3,"teamName":"FC Cologne","firstHalfScore":0},"time":"FT","referee":"Wolfgang Stark","when":"Sunday, Aug 16 2015"}
 ]}

and here it is an example response for a call wit a match day not yet played (matchday=22)

{"matches":[
  {"team1":{"teamName":"Bayern Munich"},"team2":{"teamName":"Darmstadt"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Schalke 04"},"team2":{"teamName":"VfB Stuttgart"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Bayer Leverkusen"},"team2":{"teamName":"Borussia Dortmund"},"when":"Saturday, Feb 20 2016"},
  .....
  {"team1":{"teamName":"Ingolstadt"},"team2":{"teamName":"Werder Bremen"},"when":"Saturday, Feb 20 2016"}
]}

Take in mind that this API returns only final results ("time":"FT") or not already played matches, and the final ones only after a while the matches are really finished (however always within 24 hours); if you need live updates you have to set thelive parameter to true (in this case time returns the minute for the match), if there isn’t any playing match for the parameters specified, the API give you the 500 error message ‘No games found’.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

You can get historical results either setting the optional parameter season (default value 2016-17); for now you can get results from the season 2008-09.
Historical data are only available with the MEGA plan.
It’s possible to get data about teams players and coaches for a game using the following API
/api/bundesliga/formations
The API requires two mandatory attributes, team1 and team2 to select the game of interest.
The result is a JSON object with two properties, team1 and team2, where each team property is an object containing the teamName and the players properties, where the first one is the name of the team (equals to the one in the request) and the second one an object with the arrays lineups and substitutes with each array item equals to an object containing the playerNamber, that is the shirt number for the player and the playerName attribute.
Captain players are identified by the property isCaptain.
Following an example response for the request
team1=Schalke+04&team2=Hannover+96

{
  "team1": {
    "teamName": "Schalke 04",
    "players": {
      "substitutes": [
        {
          "playerNumber": "3",
          "playerName": "Junior Caicara"
        },
        {
          "playerNumber": "6",
          "playerName": "Sead Kolasinac"
        },
        {
          "playerNumber": "9",
          "playerName": "Franco Di Santo"
        },
        {
          "playerNumber": "23",
          "playerName": "Pierre-Emile Højbjerg"
        },
        {
          "playerNumber": "24",
          "playerName": "Kaan Ayhan"
        },
        {
          "playerNumber": "30",
          "playerName": "Michael Gspurning"
        },
        {
          "playerNumber": "33",
          "playerName": "Roman Neustädter"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ralf Fährmann"
        },
        {
          "playerNumber": "27",
          "playerName": "Sascha Riether"
        },
        {
          "playerNumber": "15",
          "playerName": "Dennis Aogo"
        },
        {
          "playerNumber": "8",
          "playerName": "Leon Goretzka"
        },
        {
          "playerNumber": "4",
          "playerName": "Benedikt Höwedes"
        },
        {
          "playerNumber": "32",
          "playerName": "Joel Matip"
        },
        {
          "playerNumber": "19",
          "playerName": "Leroy Sané"
        },
        {
          "playerNumber": "5",
          "playerName": "Johannes Geis"
        },
        {
          "playerNumber": "25",
          "playerName": "Klaas-Jan Huntelaar"
        },
        {
          "playerNumber": "7",
          "playerName": "Max Meyer"
        },
        {
          "playerNumber": "13",
          "playerName": "Eric Maxim Choupo-Moting"
        }
      ]
    },
    "coach": "André Breitenreiter"
  },
  "team2": {
    "teamName": "Hannover 96",
    "players": {
      "substitutes": [
        {
          "playerNumber": "7",
          "playerName": "Edgar Prib"
        },
        {
          "playerNumber": "11",
          "playerName": "Felix Klaus"
        },
        {
          "playerNumber": "13",
          "playerName": "Philipp Tschauner"
        },
        {
          "playerNumber": "14",
          "playerName": "Allan Saint-Maximin"
        },
        {
          "playerNumber": "20",
          "playerName": "Felipe"
        },
        {
          "playerNumber": "31",
          "playerName": "Waldemar Anton"
        },
        {
          "playerNumber": "35",
          "playerName": "Charlison Benschop"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ron-Robert Zieler"
        },
        {
          "playerNumber": "29",
          "playerName": "Oliver Sorg"
        },
        {
          "playerNumber": "3",
          "playerName": "Miiko Albornoz"
        },
        {
          "playerNumber": "8",
          "playerName": "Manuel Schmiedebach"
        },
        {
          "playerNumber": "25",
          "playerName": "Marcelo"
        },
        {
          "playerNumber": "19",
          "playerName": "Christian Schulz"
        },
        {
          "playerNumber": "2",
          "playerName": "Leon Andreasen"
        },
        {
          "playerNumber": "5",
          "playerName": "Salif Sané"
        },
        {
          "playerNumber": "9",
          "playerName": "Artur Sobiech"
        },
        {
          "playerNumber": "6",
          "playerName": "Ceyhun Gülselam"
        },
        {
          "playerNumber": "26",
          "playerName": "Kenan Karaman"
        }
      ]
    },
    "coach": "Michael Frontzeck"
  }
}

The lineups players are ordered from goalkeeper to forward, to get more insight on how players are on the pitch see the events Module-Start and Module-Change you can get from the match events API without forgetting the attribute position returned by the player match statistics API.

You can get the formations starting from 30 minutes before a match start using thelive parameter set to true, if the API give you the 500 error message, that means the game is already finished from a while or it’s not playing or not going to play.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

The APIs can either respond with a 500 error if doesn’t exist a match in the 2016-17 season for them team1 and team2 parameters in the request (values are case sensitive, use the season results requests to find out valid values to use).

For now the API returns results for the current season only.
Using the endpoint API /api/bundesliga/table you will get the current table for the league.
The current table is compute considering all the finished games returned by the season results API (the one with no live updates).
The API let you to restrict the games considered using the following three optional parameters
from to include all the games played from (default the first played game returned by the no live version of the season results API)
to to include all the games played till to (default the last played game return by the no live version of the season results API)
mode set to home to consider only home games, to away to consider only away games (default all games)
time to compute the table considering only the first half (FH) or the second half (SH). Default is full time (FT)

The JSON response give you data about the team name the game played, win, loss, goalsFor, goalsAgainst and points.
The API at the moment don’t take into account any penalization a team could have to compute the total points number.

You can get table from previous seasons either setting the option parameter season; for now you can query for league table from the 2008-09 season (default value for season is 2016-17).
It’s possible to get all the scorers for a match with a single API call.
There are two version for this API, one without live update /api/bundesliga/scores that get you the answer after a while the game is finished (usually between few hours, and however always within 24 hours), and the other /api/live/bundesliga/scorers with live updates, so you can get the answer even while the match is still playing (check the season results API live version to know the games with goals).
All two versions require two mandatory parameters
team1 that is the home team name
and
team2 that is the away team name
(always the ones returned by the season results API).
The JSON response contains the player name who scored the goal and the minute it was scored, more it can contains other attributes either that qualify better the kind of goal.
At the moment the attributes handled by the API are:
isPenalty true if the goal is scored from a penalty, default false
isOwn true if the goal is an own goal, default false
isFromCorner true if the goal is scored from a corner, default false
isFreekick true if the goal is scored from a free kick, default false
isLeftFoot true if the goal is scored by left, default false
isRightFoot * true if the goal is scored by right, default false*
isHead true if the goal is scored by head, default false

Here it is a JSON response for the following query string
team1=Schalke+04&team2=Hannover+96

{"team1":{
  "teamName":"Schalke 04",
  "goals":[
    {"isRightFoot":true,"isPenalty":true,"player":"Johannes Geis","minute":"51'"},
    {"isRightFoot":true,"player":"Klaas-Jan Huntelaar","minute":"72'"},
    {"isHead":true,"player":"Franco Di Santo","minute":"81'"}
]},
"team2":{
  "teamName":"Hannover 96",
  "goals":[
    {"isRightFoot":true,"player":"Allan Saint-Maximin","minute":"81'"}
]}}

The API give you an answer even if there isn’t any goal for a match, in that case the goals attribute will be an empty array.

For now the API returns results for the current season only.
The /api/bundesliga/table/scorers let you the get the top five scorers for the league.
The JSON result give you the player name, the number of goals scored in order from the first till the fifth and the number of ones scored by penalty.
You can either use optional parameters to query for a different set of games, that is
from to consider only the games played from the match day specified (default 1)
to to consider only the games played till to the match day specified (default last final match day returned by the season results API no live version)
mode to consider only goals scored at home or away (default all)
player to get the result only for the player name specified (useful to get the number of goals scored by those players that aren’t in top 5).
team *to consider only goals scored for the specified team *
If you specify a player name that hasn’t scored any goal yet, you will get an empty response, that is:

{"scorers":[]}

otherwise, like for example querying for
player=Anthony+Ujah

{"scorers":[{"playerName":"Anthony Ujah","goals":7","penalties":0}]}

or for for example with
mode=away&to=15

{"scorers":[
  {"playerName":"Yunus Malli","goals":5","penalties":0},
  {"playerName":"Anthony Ujah","goals":5","penalties":0},
  {"playerName":"Salomon Kalou","goals":5","penalties":1},
  {"playerName":"Paul Verhaegh","goals":4","penalties":1},
  {"playerName":"Kevin Volland","goals":4","penalties":0}
]}

or maybe simply without any parameter

{"scorers":[
  {"playerName":"Robert Lewandowski","goals":25","penalties":1},
  {"playerName":"Pierre-Emerick Aubameyang","goals":19","penalties":0},
  {"playerName":"Thomas Müller","goals":15","penalties":1},
  {"playerName":"Javier Hernández","goals":13","penalties":1},
  {"playerName":"Sandro Wagner","goals":13","penalties":1}
]}

For now the API returns results for the current season only.
The Bundesliga Live Scores API let you trace two different kind of events
Team events
Module-Start (tell you the team module, that is how players are on the pitch, as soon as the match start)
Module-Change (tell you each module change occurred during the match)
Players events
Yellow-Card
Red-Card
In and Out (substitutions)
Missed-Penalty (penalty failed)
Saved-Penalty (keeper save a penalty)
Saved-Goal (player avoid an already done goal clearance off the line)
Shot-On-Post
Error-Goal (player error that lead to a goal)
Assist-Goal (when a player intentionally do an assist that lead to a goal)
Goal-Disallowed
Penalty-Won (the player that won the penalty)
Penalty-Commited (the player that committed a penalty foul)
Changed-Captain (the new captain player if the previous goes out)

All teams and players events give you the minute the event occurred,
teams events have a value attribute more that get the value for the event (the team module),
players events instead a list of players name related to the event.

For example

 ....
{"eventName":"Module-Start","value":"4411","minute":"0'"}     *value is the formation module 4-4-1-1
....
{"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
....

There are two API version to get the data events, that is, with (/api/live/bundesliga/match/events) or without live updates (/api/bundesliga/match/events).
The version without live update get you the data only after a while the match is finished (usually within few hours), the one with live updates instead get you real time data.
When the match is finished the live version continue to get you the answer that will be the same you get with the no live one if this last one has been synchronised (usually always within 24 hours).
All the two API versions require two parameters
team1 that is the home team name
and
team2 that is the away team name
and returns all the events for the two teams
for example with
team1=Schalke+04&team2=Hannover+96
you will get

  {"team1":
      {"teamName":"Schalke 04","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Klaas-Jan Huntelaar"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Franco Di Santo"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Pierre-Emile Højbjerg"}],"eventName":"In","minute":"78'"},
          {"players":[{"playerName":"Max Meyer"}],"eventName":"Out","minute":"78'"},
          {"players":[{"playerName":"Johannes Geis"}],"eventName":"Out","minute":"87'"},
          {"players":[{"playerName":"Sead Kolasinac"}],"eventName":"In","minute":"87'"},
          {"players":[{"playerName":"Sascha Riether"}],"eventName":"Yellow-Card","minute":"9'"}
  ]},
  "team2":{
      "teamName":"Hannover 96","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Artur Sobiech"}],"eventName":"Out","minute":"16'"},
          {"players":[{"playerName":"Charleston Benschop"}],"eventName":"In","minute":"16'"},
          {"players":[{"playerName":"Marcelo"}],"eventName":"Yellow-Card","minute":"50'"},
          {"players":[{"playerName":"Manuel Schmiedebach"}],"eventName":"Out","minute":"62'"},
          {"players":[{"playerName":"Allan Saint-Maximin"}],"eventName":"In","minute":"62'"},
          {"players":[{"playerName":"Leon Andreasen"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Edgar Prib"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
  ]}}

For now the API returns results for the current season only.
The API requires two mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
In the JSON response you can find the following impressive amount of statistics for each team of the match selected:
totalSaves touches aerialsWon passesTotal passesSuccessful cornersTotal cornersAccurate tackleSuccessful throwInsTotal

aerialsTotal offensiveAerials defensiveAerials shotsOffTarget tacklesTotal dribblesLost shotsTotal shotsBlocked

dribblesAttempted dribbledPast dispossessed foulsCommited shotsOnTarget offsidesCaught tackleUnsuccesful interceptions dribblesWon clearances possession

goals foulsWon penatyWon penaltyCommited

Here it is an example response for the query string team1=Schalke+04&team2=Hannover+96

{"team1":{
    "teamName":"Schalke 04",
    "teamStats":{
        "cornersTotal":10,"dribbledPast":8,"tackleSuccessful":12,"throwInsTotal":31,"aerialsTotal":43,
        "offensiveAerials":24,"dispossessed":11,"foulsCommited":8,"passesTotal":443,"offsidesCaught":3,"shotsOnTarget":8,
        "tackleUnsuccesful":8,"defensiveAerials":19,"interceptions":19,"touches":617,"shotsOffTarget":10,"tacklesTotal":20,
        "dribblesWon":14,"dribblesLost":11,"shotsTotal":26,"shotsBlocked":8,"aerialsWon":18,"clearances":16,"dribblesAttempted":25}},
 "team2":{
 "teamName":"Hannover 96",
     "teamStats":{
         "cornersTotal":10,"dribbledPast":14,"tackleSuccessful":22,"throwInsTotal":26,"aerialsTotal":43,"offensiveAerials":19,
         "dispossessed":5,"foulsCommited":13,"passesTotal":351,"offsidesCaught":2,"shotsOnTarget":1,"tackleUnsuccesful":14,
         "defensiveAerials":24,"interceptions":15,"touches":514,"shotsOffTarget":3,"tacklesTotal":36,"dribblesWon":8,"dribblesLost":7,
         "shotsTotal":7,"shotsBlocked":3,"aerialsWon":25,"clearances":30,"dribblesAttempted":15}}}

Take in mind that this API exists in two version, the one without live update /api/bundesliga/match/stats and the one with live update /api/live/bundesliga/match/stats with the second one one giving you real time statistics updates during the game and the first one giving you only the final statistics after a while the match is finished, after this point in time all the two API give you the same answer.

For now the API returns results for the current season only.
It’s possible to get all the player statistics for a match using one of the two API version, the no live and the live one, with the first giving you the result only after a while the game is finished (usually within few hours and however always within 24 hours) and the second you giving you the result starting from the first minute match, that is with live updates.
The API requires three mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
player the player name you want to know statistics

The result is a JSON format response containing player infos like data age, weight, height and player match stats like dribble won, fouls committed.
The complete data list handle at the moment from the API follows:
player info
isManOfTheMatch, shirtNo, name, weight, age, height, isFirstEleven, position
player match stats
totalSaves, touches, aerialsWon, passesTotal, passesSuccessful, cornersTotal, cornersAccurate, tackleSuccessful,

throwInsTotal, aerialsTotal, offensiveAerials, defensiveAerials, shotsOffTarget, tacklesTotal,

dribblesLost, shotsTotal, shotsBlocked, dribblesAttempted, dribbledPast, dispossessed,

foulsCommited, shotsOnTarget, offsidesCaught, tackleUnsuccesful, interceptions, dribblesWon,

clearances, possession, goals, foulsWon, penaltyWon, penaltyCommited

Follow an example for
player=Klaas-Jan+Huntelaar&team1=Schalke+04&team2=Hannover+96

{"isFirstEleven":true,"isManOfTheMatch":true,"stats":
  {"throwInsTotal":1,"aerialsTotal":2,"offensiveAerials":2,"foulsCommited":1,"passesTotal":19,
  "offsidesCaught":1,"shotsOnTarget":1,"interceptions":1,"touches":27,"shotsOffTarget":1,
  "dribblesLost":1,"shotsTotal":3,"shotsBlocked":1,"aerialsWon":1,"dribblesAttempted":1},
"shirtNo":"25","name":"Klaas-Jan Huntelaar","weight":83,"position":"FW","age":32,"height":186}

For the position attribute you can get the following values:
GK = Goalkeeper
DM = Defensive Midfielder (1)
D = Defender (1)
M = Midfielder (1)
AM = Attacking Midfielder (1)
FW = Forward
Sub = substitute player

(1) the attribute value can have one letter more to specify better the field position, that is C for Center, L for Left and R for Right.

For now the API returns results for the current season only.
prova
The API Missing players for a match requires two parameters
team1 and team2,
and returns a response a few days before a match with continue updates till the match starts.
Even after a match is played, the API continue to give you the last answer.
The response returns for each team the player name who will miss with the reason.
If there is any doubt about the player will play the match the reason will be inside a square bracket, otherwise the reason will be with no bracket.
Typical reasons are Injured, Suspended, Unfit, Other.
For example calling the API with
team1=Hertha+Berlin&team2=Hannover+96
you will have the following response

{ "team1" : { "players" : { "missing" : [ { "playerName" : "Sami Allagui",
            "reason" : "Injured"
          },
          { "playerName" : "Sinan Kurt",
            "reason" : "Injured"
          },
          { "playerName" : "John Brooks",
            "reason" : "Injured"
          },
          { "playerName" : "Per Skjelbred",
            "reason" : "[Injured]"
          }
        ] },
  "teamName" : "Hertha Berlin"
  },
"team2" : { "players" : { "missing" : [ { "playerName" : "Leon Andreasen",
            "reason" : "Injured"
          },
          { "playerName" : "Charlison Benschop",
            "reason" : "Injured"
          },
          { "playerName" : "Felipe",
            "reason" : "Injured"
          },
          { "playerName" : "Hotaru Yamaguchi",
            "reason" : "Injured"
          }
        ] },
  "teamName" : "Hannover 96"
}
}

For now the API returns results for the current season only.

Missing player for a match

The API Missing players for a match requires two parameters
team1 and team2,
and returns a response a few days before a match with continue updates till the match starts.
Even after a match is played, the API continue to give you the last answer.
The response returns for each team the player name who will miss with the reason.
If there is any doubt about the player will play the match the reason will be inside a square bracket, otherwise the reason will be with no bracket.
Typical reasons are Injured, Suspended, Unfit, Other.
For example calling the API with
team1=Hertha+Berlin&team2=Hannover+96
you will have the following response

{ "team1" : { "players" : { "missing" : [ { "playerName" : "Sami Allagui",
            "reason" : "Injured"
          },
          { "playerName" : "Sinan Kurt",
            "reason" : "Injured"
          },
          { "playerName" : "John Brooks",
            "reason" : "Injured"
          },
          { "playerName" : "Per Skjelbred",
            "reason" : "[Injured]"
          }
        ] },
  "teamName" : "Hertha Berlin"
  },
"team2" : { "players" : { "missing" : [ { "playerName" : "Leon Andreasen",
            "reason" : "Injured"
          },
          { "playerName" : "Charlison Benschop",
            "reason" : "Injured"
          },
          { "playerName" : "Felipe",
            "reason" : "Injured"
          },
          { "playerName" : "Hotaru Yamaguchi",
            "reason" : "Injured"
          }
        ] },
  "teamName" : "Hannover 96"
}
}

For now the API returns results for the current season only.

League Table

Using the endpoint API /api/bundesliga/table you will get the current table for the league.
The current table is compute considering all the finished games returned by the season results API (the one with no live updates).
The API let you to restrict the games considered using the following three optional parameters
from to include all the games played from (default the first played game returned by the no live version of the season results API)
to to include all the games played till to (default the last played game return by the no live version of the season results API)
mode set to home to consider only home games, to away to consider only away games (default all games)
time to compute the table considering only the first half (FH) or the second half (SH). Default is full time (FT)

The JSON response give you data about the team name the game played, win, loss, goalsFor, goalsAgainst and points.
The API at the moment don’t take into account any penalization a team could have to compute the total points number.

You can get table from previous seasons either setting the option parameter season; for now you can query for league table from the 2008-09 season (default value for season is 2016-17).

Top Scorers

The /api/bundesliga/table/scorers let you the get the top five scorers for the league.
The JSON result give you the player name, the number of goals scored in order from the first till the fifth and the number of ones scored by penalty.
You can either use optional parameters to query for a different set of games, that is
from to consider only the games played from the match day specified (default 1)
to to consider only the games played till to the match day specified (default last final match day returned by the season results API no live version)
mode to consider only goals scored at home or away (default all)
player to get the result only for the player name specified (useful to get the number of goals scored by those players that aren’t in top 5).
team *to consider only goals scored for the specified team *
If you specify a player name that hasn’t scored any goal yet, you will get an empty response, that is:

{"scorers":[]}

otherwise, like for example querying for
player=Anthony+Ujah

{"scorers":[{"playerName":"Anthony Ujah","goals":7","penalties":0}]}

or for for example with
mode=away&to=15

{"scorers":[
  {"playerName":"Yunus Malli","goals":5","penalties":0},
  {"playerName":"Anthony Ujah","goals":5","penalties":0},
  {"playerName":"Salomon Kalou","goals":5","penalties":1},
  {"playerName":"Paul Verhaegh","goals":4","penalties":1},
  {"playerName":"Kevin Volland","goals":4","penalties":0}
]}

or maybe simply without any parameter

{"scorers":[
  {"playerName":"Robert Lewandowski","goals":25","penalties":1},
  {"playerName":"Pierre-Emerick Aubameyang","goals":19","penalties":0},
  {"playerName":"Thomas Müller","goals":15","penalties":1},
  {"playerName":"Javier Hernández","goals":13","penalties":1},
  {"playerName":"Sandro Wagner","goals":13","penalties":1}
]}

For now the API returns results for the current season only.

Talend Open Studio integration

You don’t need to be a developer or to recruit one to use this API, thanks to his easy integration with the Talend Open Studio suite.
At the Talend marketplace you can now download for free the tFootballDataInput component that let you to easily consume the mashape Bundesliga API into your integration jobs in a blink just using your Mashape key and without writing a single line of code!
The component is now released in beta version v.04 that integrates only some features now available on Mashape, but we count to release new versions with weekly schedule to add more.
The component let you either to easily access other European Football Leagues Mashape API that is, La Liga, Ligue 1, Premier League and Serie A.
For any trouble using the component the preferred mode to get support is to ask to the community at the Talend Forum, instead for any bug or new features request is better to open a ticket on the API Support.
For a demo on how using Talend and the tFootballDataInput component take a look at this YouTube demo here.

Player statistics for a match

It’s possible to get all the player statistics for a match using one of the two API version, the no live and the live one, with the first giving you the result only after a while the game is finished (usually within few hours and however always within 24 hours) and the second you giving you the result starting from the first minute match, that is with live updates.
The API requires three mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
player the player name you want to know statistics

The result is a JSON format response containing player infos like data age, weight, height and player match stats like dribble won, fouls committed.
The complete data list handle at the moment from the API follows:
player info
isManOfTheMatch, shirtNo, name, weight, age, height, isFirstEleven, position
player match stats
totalSaves, touches, aerialsWon, passesTotal, passesSuccessful, cornersTotal, cornersAccurate, tackleSuccessful,

throwInsTotal, aerialsTotal, offensiveAerials, defensiveAerials, shotsOffTarget, tacklesTotal,

dribblesLost, shotsTotal, shotsBlocked, dribblesAttempted, dribbledPast, dispossessed,

foulsCommited, shotsOnTarget, offsidesCaught, tackleUnsuccesful, interceptions, dribblesWon,

clearances, possession, goals, foulsWon, penaltyWon, penaltyCommited

Follow an example for
player=Klaas-Jan+Huntelaar&team1=Schalke+04&team2=Hannover+96

{"isFirstEleven":true,"isManOfTheMatch":true,"stats":
  {"throwInsTotal":1,"aerialsTotal":2,"offensiveAerials":2,"foulsCommited":1,"passesTotal":19,
  "offsidesCaught":1,"shotsOnTarget":1,"interceptions":1,"touches":27,"shotsOffTarget":1,
  "dribblesLost":1,"shotsTotal":3,"shotsBlocked":1,"aerialsWon":1,"dribblesAttempted":1},
"shirtNo":"25","name":"Klaas-Jan Huntelaar","weight":83,"position":"FW","age":32,"height":186}

For the position attribute you can get the following values:
GK = Goalkeeper
DM = Defensive Midfielder (1)
D = Defender (1)
M = Midfielder (1)
AM = Attacking Midfielder (1)
FW = Forward
Sub = substitute player

(1) the attribute value can have one letter more to specify better the field position, that is C for Center, L for Left and R for Right.

For now the API returns results for the current season only.

Match scorers

It’s possible to get all the scorers for a match with a single API call.
There are two version for this API, one without live update /api/bundesliga/scores that get you the answer after a while the game is finished (usually between few hours, and however always within 24 hours), and the other /api/live/bundesliga/scorers with live updates, so you can get the answer even while the match is still playing (check the season results API live version to know the games with goals).
All two versions require two mandatory parameters
team1 that is the home team name
and
team2 that is the away team name
(always the ones returned by the season results API).
The JSON response contains the player name who scored the goal and the minute it was scored, more it can contains other attributes either that qualify better the kind of goal.
At the moment the attributes handled by the API are:
isPenalty true if the goal is scored from a penalty, default false
isOwn true if the goal is an own goal, default false
isFromCorner true if the goal is scored from a corner, default false
isFreekick true if the goal is scored from a free kick, default false
isLeftFoot true if the goal is scored by left, default false
isRightFoot * true if the goal is scored by right, default false*
isHead true if the goal is scored by head, default false

Here it is a JSON response for the following query string
team1=Schalke+04&team2=Hannover+96

{"team1":{
  "teamName":"Schalke 04",
  "goals":[
    {"isRightFoot":true,"isPenalty":true,"player":"Johannes Geis","minute":"51'"},
    {"isRightFoot":true,"player":"Klaas-Jan Huntelaar","minute":"72'"},
    {"isHead":true,"player":"Franco Di Santo","minute":"81'"}
]},
"team2":{
  "teamName":"Hannover 96",
  "goals":[
    {"isRightFoot":true,"player":"Allan Saint-Maximin","minute":"81'"}
]}}

The API give you an answer even if there isn’t any goal for a match, in that case the goals attribute will be an empty array.

For now the API returns results for the current season only.

Match statistics

The API requires two mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
In the JSON response you can find the following impressive amount of statistics for each team of the match selected:
totalSaves touches aerialsWon passesTotal passesSuccessful cornersTotal cornersAccurate tackleSuccessful throwInsTotal

aerialsTotal offensiveAerials defensiveAerials shotsOffTarget tacklesTotal dribblesLost shotsTotal shotsBlocked

dribblesAttempted dribbledPast dispossessed foulsCommited shotsOnTarget offsidesCaught tackleUnsuccesful interceptions dribblesWon clearances possession

goals foulsWon penatyWon penaltyCommited

Here it is an example response for the query string team1=Schalke+04&team2=Hannover+96

{"team1":{
    "teamName":"Schalke 04",
    "teamStats":{
        "cornersTotal":10,"dribbledPast":8,"tackleSuccessful":12,"throwInsTotal":31,"aerialsTotal":43,
        "offensiveAerials":24,"dispossessed":11,"foulsCommited":8,"passesTotal":443,"offsidesCaught":3,"shotsOnTarget":8,
        "tackleUnsuccesful":8,"defensiveAerials":19,"interceptions":19,"touches":617,"shotsOffTarget":10,"tacklesTotal":20,
        "dribblesWon":14,"dribblesLost":11,"shotsTotal":26,"shotsBlocked":8,"aerialsWon":18,"clearances":16,"dribblesAttempted":25}},
 "team2":{
 "teamName":"Hannover 96",
     "teamStats":{
         "cornersTotal":10,"dribbledPast":14,"tackleSuccessful":22,"throwInsTotal":26,"aerialsTotal":43,"offensiveAerials":19,
         "dispossessed":5,"foulsCommited":13,"passesTotal":351,"offsidesCaught":2,"shotsOnTarget":1,"tackleUnsuccesful":14,
         "defensiveAerials":24,"interceptions":15,"touches":514,"shotsOffTarget":3,"tacklesTotal":36,"dribblesWon":8,"dribblesLost":7,
         "shotsTotal":7,"shotsBlocked":3,"aerialsWon":25,"clearances":30,"dribblesAttempted":15}}}

Take in mind that this API exists in two version, the one without live update /api/bundesliga/match/stats and the one with live update /api/live/bundesliga/match/stats with the second one one giving you real time statistics updates during the game and the first one giving you only the final statistics after a while the match is finished, after this point in time all the two API give you the same answer.

For now the API returns results for the current season only.

Lineups, substitutes and coaches

It’s possible to get data about teams players and coaches for a game using the following API
/api/bundesliga/formations
The API requires two mandatory attributes, team1 and team2 to select the game of interest.
The result is a JSON object with two properties, team1 and team2, where each team property is an object containing the teamName and the players properties, where the first one is the name of the team (equals to the one in the request) and the second one an object with the arrays lineups and substitutes with each array item equals to an object containing the playerNamber, that is the shirt number for the player and the playerName attribute.
Captain players are identified by the property isCaptain.
Following an example response for the request
team1=Schalke+04&team2=Hannover+96

{
  "team1": {
    "teamName": "Schalke 04",
    "players": {
      "substitutes": [
        {
          "playerNumber": "3",
          "playerName": "Junior Caicara"
        },
        {
          "playerNumber": "6",
          "playerName": "Sead Kolasinac"
        },
        {
          "playerNumber": "9",
          "playerName": "Franco Di Santo"
        },
        {
          "playerNumber": "23",
          "playerName": "Pierre-Emile Højbjerg"
        },
        {
          "playerNumber": "24",
          "playerName": "Kaan Ayhan"
        },
        {
          "playerNumber": "30",
          "playerName": "Michael Gspurning"
        },
        {
          "playerNumber": "33",
          "playerName": "Roman Neustädter"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ralf Fährmann"
        },
        {
          "playerNumber": "27",
          "playerName": "Sascha Riether"
        },
        {
          "playerNumber": "15",
          "playerName": "Dennis Aogo"
        },
        {
          "playerNumber": "8",
          "playerName": "Leon Goretzka"
        },
        {
          "playerNumber": "4",
          "playerName": "Benedikt Höwedes"
        },
        {
          "playerNumber": "32",
          "playerName": "Joel Matip"
        },
        {
          "playerNumber": "19",
          "playerName": "Leroy Sané"
        },
        {
          "playerNumber": "5",
          "playerName": "Johannes Geis"
        },
        {
          "playerNumber": "25",
          "playerName": "Klaas-Jan Huntelaar"
        },
        {
          "playerNumber": "7",
          "playerName": "Max Meyer"
        },
        {
          "playerNumber": "13",
          "playerName": "Eric Maxim Choupo-Moting"
        }
      ]
    },
    "coach": "André Breitenreiter"
  },
  "team2": {
    "teamName": "Hannover 96",
    "players": {
      "substitutes": [
        {
          "playerNumber": "7",
          "playerName": "Edgar Prib"
        },
        {
          "playerNumber": "11",
          "playerName": "Felix Klaus"
        },
        {
          "playerNumber": "13",
          "playerName": "Philipp Tschauner"
        },
        {
          "playerNumber": "14",
          "playerName": "Allan Saint-Maximin"
        },
        {
          "playerNumber": "20",
          "playerName": "Felipe"
        },
        {
          "playerNumber": "31",
          "playerName": "Waldemar Anton"
        },
        {
          "playerNumber": "35",
          "playerName": "Charlison Benschop"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ron-Robert Zieler"
        },
        {
          "playerNumber": "29",
          "playerName": "Oliver Sorg"
        },
        {
          "playerNumber": "3",
          "playerName": "Miiko Albornoz"
        },
        {
          "playerNumber": "8",
          "playerName": "Manuel Schmiedebach"
        },
        {
          "playerNumber": "25",
          "playerName": "Marcelo"
        },
        {
          "playerNumber": "19",
          "playerName": "Christian Schulz"
        },
        {
          "playerNumber": "2",
          "playerName": "Leon Andreasen"
        },
        {
          "playerNumber": "5",
          "playerName": "Salif Sané"
        },
        {
          "playerNumber": "9",
          "playerName": "Artur Sobiech"
        },
        {
          "playerNumber": "6",
          "playerName": "Ceyhun Gülselam"
        },
        {
          "playerNumber": "26",
          "playerName": "Kenan Karaman"
        }
      ]
    },
    "coach": "Michael Frontzeck"
  }
}

The lineups players are ordered from goalkeeper to forward, to get more insight on how players are on the pitch see the events Module-Start and Module-Change you can get from the match events API without forgetting the attribute position returned by the player match statistics API.

You can get the formations starting from 30 minutes before a match start using thelive parameter set to true, if the API give you the 500 error message, that means the game is already finished from a while or it’s not playing or not going to play.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

The APIs can either respond with a 500 error if doesn’t exist a match in the 2016-17 season for them team1 and team2 parameters in the request (values are case sensitive, use the season results requests to find out valid values to use).

For now the API returns results for the current season only.

Match events

The Bundesliga Live Scores API let you trace two different kind of events
Team events
Module-Start (tell you the team module, that is how players are on the pitch, as soon as the match start)
Module-Change (tell you each module change occurred during the match)
Players events
Yellow-Card
Red-Card
In and Out (substitutions)
Missed-Penalty (penalty failed)
Saved-Penalty (keeper save a penalty)
Saved-Goal (player avoid an already done goal clearance off the line)
Shot-On-Post
Error-Goal (player error that lead to a goal)
Assist-Goal (when a player intentionally do an assist that lead to a goal)
Goal-Disallowed
Penalty-Won (the player that won the penalty)
Penalty-Commited (the player that committed a penalty foul)
Changed-Captain (the new captain player if the previous goes out)

All teams and players events give you the minute the event occurred,
teams events have a value attribute more that get the value for the event (the team module),
players events instead a list of players name related to the event.

For example

 ....
{"eventName":"Module-Start","value":"4411","minute":"0'"}     *value is the formation module 4-4-1-1
....
{"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
....

There are two API version to get the data events, that is, with (/api/live/bundesliga/match/events) or without live updates (/api/bundesliga/match/events).
The version without live update get you the data only after a while the match is finished (usually within few hours), the one with live updates instead get you real time data.
When the match is finished the live version continue to get you the answer that will be the same you get with the no live one if this last one has been synchronised (usually always within 24 hours).
All the two API versions require two parameters
team1 that is the home team name
and
team2 that is the away team name
and returns all the events for the two teams
for example with
team1=Schalke+04&team2=Hannover+96
you will get

  {"team1":
      {"teamName":"Schalke 04","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Klaas-Jan Huntelaar"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Franco Di Santo"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Pierre-Emile Højbjerg"}],"eventName":"In","minute":"78'"},
          {"players":[{"playerName":"Max Meyer"}],"eventName":"Out","minute":"78'"},
          {"players":[{"playerName":"Johannes Geis"}],"eventName":"Out","minute":"87'"},
          {"players":[{"playerName":"Sead Kolasinac"}],"eventName":"In","minute":"87'"},
          {"players":[{"playerName":"Sascha Riether"}],"eventName":"Yellow-Card","minute":"9'"}
  ]},
  "team2":{
      "teamName":"Hannover 96","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Artur Sobiech"}],"eventName":"Out","minute":"16'"},
          {"players":[{"playerName":"Charleston Benschop"}],"eventName":"In","minute":"16'"},
          {"players":[{"playerName":"Marcelo"}],"eventName":"Yellow-Card","minute":"50'"},
          {"players":[{"playerName":"Manuel Schmiedebach"}],"eventName":"Out","minute":"62'"},
          {"players":[{"playerName":"Allan Saint-Maximin"}],"eventName":"In","minute":"62'"},
          {"players":[{"playerName":"Leon Andreasen"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Edgar Prib"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
  ]}}

For now the API returns results for the current season only.

Season results

It’s possible to retrieve all the 2016-17 season matches calling the endpoint
/api/bundesliga
You can call the API
-without submitting any parameter, to get all the matches for the day (if there isn’t any match for the day you will get a 500 server error, that it isn’t count as an API call)
-submitting the parameter date, to retrieve the matches for that date (in the format mmddyyyy)
-submitting the parameter team1, to retrieve the matches that the team has played at home (together with team2 return that very match)
-submitting the parameter team2, to retrieve the matches that the team has played away (together with team1 return that very match)
-submitting the parameter matchday, to retrieve the matches for that round

If matches are already played, the API will give you data about red cards number if any, referee , final and first half scores too, otherwise only the matches schedule.
Here it is an example response for a call wit a match day already played (matchday=1)

 {"matches":[
      {"team1":{"teamScore":5,"teamName":"Bayern Munich","firstHalfScore":1},
      "team2":{"teamScore":0,"teamName":"Hamburger SV","firstHalfScore":0},"time":"FT","referee":"Bastian Dankert","when":"Friday, Aug 14 2015"},
      .....
      {"team1":{"teamScore":1,"teamName":"VfB Stuttgart","firstHalfScore":0},
      "team2":{"teamScore":3,"teamName":"FC Cologne","firstHalfScore":0},"time":"FT","referee":"Wolfgang Stark","when":"Sunday, Aug 16 2015"}
 ]}

and here it is an example response for a call wit a match day not yet played (matchday=22)

{"matches":[
  {"team1":{"teamName":"Bayern Munich"},"team2":{"teamName":"Darmstadt"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Schalke 04"},"team2":{"teamName":"VfB Stuttgart"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Bayer Leverkusen"},"team2":{"teamName":"Borussia Dortmund"},"when":"Saturday, Feb 20 2016"},
  .....
  {"team1":{"teamName":"Ingolstadt"},"team2":{"teamName":"Werder Bremen"},"when":"Saturday, Feb 20 2016"}
]}

Take in mind that this API returns only final results ("time":"FT") or not already played matches, and the final ones only after a while the matches are really finished (however always within 24 hours); if you need live updates you have to set thelive parameter to true (in this case time returns the minute for the match), if there isn’t any playing match for the parameters specified, the API give you the 500 error message ‘No games found’.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

You can get historical results either setting the optional parameter season (default value 2016-17); for now you can get results from the season 2008-09.
Historical data are only available with the MEGA plan.

Bundesliga Live Scores

Bundesliga Live Scores

The Bundesliga Live Scores is already, without any doubt, in so little time from its birth, the best API available on the web for the top professional German football league and don’t believe we have finished, indeed we are only at the start.
You too can help us to make even better this API asking on the API Support tab for the features you dream, our developers will try to make them real.
In the meantime give a look at the always growing list of its unique features.
Have fun!

The Bundesliga Ninja Team

Talend Open Studio integration

You don’t need to be a developer or to recruit one to use this API, thanks to his easy integration with the Talend Open Studio suite.
At the Talend marketplace you can now download for free the tFootballDataInput component that let you to easily consume the mashape Bundesliga API into your integration jobs in a blink just using your Mashape key and without writing a single line of code!
The component is now released in beta version v.04 that integrates only some features now available on Mashape, but we count to release new versions with weekly schedule to add more.
The component let you either to easily access other European Football Leagues Mashape API that is, La Liga, Ligue 1, Premier League and Serie A.
For any trouble using the component the preferred mode to get support is to ask to the community at the Talend Forum, instead for any bug or new features request is better to open a ticket on the API Support.
For a demo on how using Talend and the tFootballDataInput component take a look at this YouTube demo here.

Season results

It’s possible to retrieve all the 2016-17 season matches calling the endpoint
/api/bundesliga
You can call the API
-without submitting any parameter, to get all the matches for the day (if there isn’t any match for the day you will get a 500 server error, that it isn’t count as an API call)
-submitting the parameter date, to retrieve the matches for that date (in the format mmddyyyy)
-submitting the parameter team1, to retrieve the matches that the team has played at home (together with team2 return that very match)
-submitting the parameter team2, to retrieve the matches that the team has played away (together with team1 return that very match)
-submitting the parameter matchday, to retrieve the matches for that round

If matches are already played, the API will give you data about red cards number if any, referee , final and first half scores too, otherwise only the matches schedule.
Here it is an example response for a call wit a match day already played (matchday=1)

 {"matches":[
      {"team1":{"teamScore":5,"teamName":"Bayern Munich","firstHalfScore":1},
      "team2":{"teamScore":0,"teamName":"Hamburger SV","firstHalfScore":0},"time":"FT","referee":"Bastian Dankert","when":"Friday, Aug 14 2015"},
      .....
      {"team1":{"teamScore":1,"teamName":"VfB Stuttgart","firstHalfScore":0},
      "team2":{"teamScore":3,"teamName":"FC Cologne","firstHalfScore":0},"time":"FT","referee":"Wolfgang Stark","when":"Sunday, Aug 16 2015"}
 ]}

and here it is an example response for a call wit a match day not yet played (matchday=22)

{"matches":[
  {"team1":{"teamName":"Bayern Munich"},"team2":{"teamName":"Darmstadt"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Schalke 04"},"team2":{"teamName":"VfB Stuttgart"},"when":"Saturday, Feb 20 2016"},
  {"team1":{"teamName":"Bayer Leverkusen"},"team2":{"teamName":"Borussia Dortmund"},"when":"Saturday, Feb 20 2016"},
  .....
  {"team1":{"teamName":"Ingolstadt"},"team2":{"teamName":"Werder Bremen"},"when":"Saturday, Feb 20 2016"}
]}

Take in mind that this API returns only final results ("time":"FT") or not already played matches, and the final ones only after a while the matches are really finished (however always within 24 hours); if you need live updates you have to set thelive parameter to true (in this case time returns the minute for the match), if there isn’t any playing match for the parameters specified, the API give you the 500 error message ‘No games found’.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

You can get historical results either setting the optional parameter season (default value 2016-17); for now you can get results from the season 2008-09.
Historical data are only available with the MEGA plan.

Lineups, substitutes and coaches

It’s possible to get data about teams players and coaches for a game using the following API
/api/bundesliga/formations
The API requires two mandatory attributes, team1 and team2 to select the game of interest.
The result is a JSON object with two properties, team1 and team2, where each team property is an object containing the teamName and the players properties, where the first one is the name of the team (equals to the one in the request) and the second one an object with the arrays lineups and substitutes with each array item equals to an object containing the playerNamber, that is the shirt number for the player and the playerName attribute.
Captain players are identified by the property isCaptain.
Following an example response for the request
team1=Schalke+04&team2=Hannover+96

{
  "team1": {
    "teamName": "Schalke 04",
    "players": {
      "substitutes": [
        {
          "playerNumber": "3",
          "playerName": "Junior Caicara"
        },
        {
          "playerNumber": "6",
          "playerName": "Sead Kolasinac"
        },
        {
          "playerNumber": "9",
          "playerName": "Franco Di Santo"
        },
        {
          "playerNumber": "23",
          "playerName": "Pierre-Emile Højbjerg"
        },
        {
          "playerNumber": "24",
          "playerName": "Kaan Ayhan"
        },
        {
          "playerNumber": "30",
          "playerName": "Michael Gspurning"
        },
        {
          "playerNumber": "33",
          "playerName": "Roman Neustädter"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ralf Fährmann"
        },
        {
          "playerNumber": "27",
          "playerName": "Sascha Riether"
        },
        {
          "playerNumber": "15",
          "playerName": "Dennis Aogo"
        },
        {
          "playerNumber": "8",
          "playerName": "Leon Goretzka"
        },
        {
          "playerNumber": "4",
          "playerName": "Benedikt Höwedes"
        },
        {
          "playerNumber": "32",
          "playerName": "Joel Matip"
        },
        {
          "playerNumber": "19",
          "playerName": "Leroy Sané"
        },
        {
          "playerNumber": "5",
          "playerName": "Johannes Geis"
        },
        {
          "playerNumber": "25",
          "playerName": "Klaas-Jan Huntelaar"
        },
        {
          "playerNumber": "7",
          "playerName": "Max Meyer"
        },
        {
          "playerNumber": "13",
          "playerName": "Eric Maxim Choupo-Moting"
        }
      ]
    },
    "coach": "André Breitenreiter"
  },
  "team2": {
    "teamName": "Hannover 96",
    "players": {
      "substitutes": [
        {
          "playerNumber": "7",
          "playerName": "Edgar Prib"
        },
        {
          "playerNumber": "11",
          "playerName": "Felix Klaus"
        },
        {
          "playerNumber": "13",
          "playerName": "Philipp Tschauner"
        },
        {
          "playerNumber": "14",
          "playerName": "Allan Saint-Maximin"
        },
        {
          "playerNumber": "20",
          "playerName": "Felipe"
        },
        {
          "playerNumber": "31",
          "playerName": "Waldemar Anton"
        },
        {
          "playerNumber": "35",
          "playerName": "Charlison Benschop"
        }
      ],
      "lineups": [
        {
          "playerNumber": "1",
          "playerName": "Ron-Robert Zieler"
        },
        {
          "playerNumber": "29",
          "playerName": "Oliver Sorg"
        },
        {
          "playerNumber": "3",
          "playerName": "Miiko Albornoz"
        },
        {
          "playerNumber": "8",
          "playerName": "Manuel Schmiedebach"
        },
        {
          "playerNumber": "25",
          "playerName": "Marcelo"
        },
        {
          "playerNumber": "19",
          "playerName": "Christian Schulz"
        },
        {
          "playerNumber": "2",
          "playerName": "Leon Andreasen"
        },
        {
          "playerNumber": "5",
          "playerName": "Salif Sané"
        },
        {
          "playerNumber": "9",
          "playerName": "Artur Sobiech"
        },
        {
          "playerNumber": "6",
          "playerName": "Ceyhun Gülselam"
        },
        {
          "playerNumber": "26",
          "playerName": "Kenan Karaman"
        }
      ]
    },
    "coach": "Michael Frontzeck"
  }
}

The lineups players are ordered from goalkeeper to forward, to get more insight on how players are on the pitch see the events Module-Start and Module-Change you can get from the match events API without forgetting the attribute position returned by the player match statistics API.

You can get the formations starting from 30 minutes before a match start using thelive parameter set to true, if the API give you the 500 error message, that means the game is already finished from a while or it’s not playing or not going to play.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

The APIs can either respond with a 500 error if doesn’t exist a match in the 2016-17 season for them team1 and team2 parameters in the request (values are case sensitive, use the season results requests to find out valid values to use).

For now the API returns results for the current season only.

League Table

Using the endpoint API /api/bundesliga/table you will get the current table for the league.
The current table is compute considering all the finished games returned by the season results API (the one with no live updates).
The API let you to restrict the games considered using the following three optional parameters
from to include all the games played from (default the first played game returned by the no live version of the season results API)
to to include all the games played till to (default the last played game return by the no live version of the season results API)
mode set to home to consider only home games, to away to consider only away games (default all games)
time to compute the table considering only the first half (FH) or the second half (SH). Default is full time (FT)

The JSON response give you data about the team name the game played, win, loss, goalsFor, goalsAgainst and points.
The API at the moment don’t take into account any penalization a team could have to compute the total points number.

You can get table from previous seasons either setting the option parameter season; for now you can query for league table from the 2008-09 season (default value for season is 2016-17).

Match scorers

It’s possible to get all the scorers for a match with a single API call.
There are two version for this API, one without live update /api/bundesliga/scores that get you the answer after a while the game is finished (usually between few hours, and however always within 24 hours), and the other /api/live/bundesliga/scorers with live updates, so you can get the answer even while the match is still playing (check the season results API live version to know the games with goals).
All two versions require two mandatory parameters
team1 that is the home team name
and
team2 that is the away team name
(always the ones returned by the season results API).
The JSON response contains the player name who scored the goal and the minute it was scored, more it can contains other attributes either that qualify better the kind of goal.
At the moment the attributes handled by the API are:
isPenalty true if the goal is scored from a penalty, default false
isOwn true if the goal is an own goal, default false
isFromCorner true if the goal is scored from a corner, default false
isFreekick true if the goal is scored from a free kick, default false
isLeftFoot true if the goal is scored by left, default false
isRightFoot * true if the goal is scored by right, default false*
isHead true if the goal is scored by head, default false

Here it is a JSON response for the following query string
team1=Schalke+04&team2=Hannover+96

{"team1":{
  "teamName":"Schalke 04",
  "goals":[
    {"isRightFoot":true,"isPenalty":true,"player":"Johannes Geis","minute":"51'"},
    {"isRightFoot":true,"player":"Klaas-Jan Huntelaar","minute":"72'"},
    {"isHead":true,"player":"Franco Di Santo","minute":"81'"}
]},
"team2":{
  "teamName":"Hannover 96",
  "goals":[
    {"isRightFoot":true,"player":"Allan Saint-Maximin","minute":"81'"}
]}}

The API give you an answer even if there isn’t any goal for a match, in that case the goals attribute will be an empty array.

For now the API returns results for the current season only.

Top Scorers

The /api/bundesliga/table/scorers let you the get the top five scorers for the league.
The JSON result give you the player name, the number of goals scored in order from the first till the fifth and the number of ones scored by penalty.
You can either use optional parameters to query for a different set of games, that is
from to consider only the games played from the match day specified (default 1)
to to consider only the games played till to the match day specified (default last final match day returned by the season results API no live version)
mode to consider only goals scored at home or away (default all)
player to get the result only for the player name specified (useful to get the number of goals scored by those players that aren’t in top 5).
team *to consider only goals scored for the specified team *
If you specify a player name that hasn’t scored any goal yet, you will get an empty response, that is:

{"scorers":[]}

otherwise, like for example querying for
player=Anthony+Ujah

{"scorers":[{"playerName":"Anthony Ujah","goals":7","penalties":0}]}

or for for example with
mode=away&to=15

{"scorers":[
  {"playerName":"Yunus Malli","goals":5","penalties":0},
  {"playerName":"Anthony Ujah","goals":5","penalties":0},
  {"playerName":"Salomon Kalou","goals":5","penalties":1},
  {"playerName":"Paul Verhaegh","goals":4","penalties":1},
  {"playerName":"Kevin Volland","goals":4","penalties":0}
]}

or maybe simply without any parameter

{"scorers":[
  {"playerName":"Robert Lewandowski","goals":25","penalties":1},
  {"playerName":"Pierre-Emerick Aubameyang","goals":19","penalties":0},
  {"playerName":"Thomas Müller","goals":15","penalties":1},
  {"playerName":"Javier Hernández","goals":13","penalties":1},
  {"playerName":"Sandro Wagner","goals":13","penalties":1}
]}

For now the API returns results for the current season only.

Match events

The Bundesliga Live Scores API let you trace two different kind of events
Team events
Module-Start (tell you the team module, that is how players are on the pitch, as soon as the match start)
Module-Change (tell you each module change occurred during the match)
Players events
Yellow-Card
Red-Card
In and Out (substitutions)
Missed-Penalty (penalty failed)
Saved-Penalty (keeper save a penalty)
Saved-Goal (player avoid an already done goal clearance off the line)
Shot-On-Post
Error-Goal (player error that lead to a goal)
Assist-Goal (when a player intentionally do an assist that lead to a goal)
Goal-Disallowed
Penalty-Won (the player that won the penalty)
Penalty-Commited (the player that committed a penalty foul)
Changed-Captain (the new captain player if the previous goes out)

All teams and players events give you the minute the event occurred,
teams events have a value attribute more that get the value for the event (the team module),
players events instead a list of players name related to the event.

For example

 ....
{"eventName":"Module-Start","value":"4411","minute":"0'"}     *value is the formation module 4-4-1-1
....
{"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
....

There are two API version to get the data events, that is, with (/api/live/bundesliga/match/events) or without live updates (/api/bundesliga/match/events).
The version without live update get you the data only after a while the match is finished (usually within few hours), the one with live updates instead get you real time data.
When the match is finished the live version continue to get you the answer that will be the same you get with the no live one if this last one has been synchronised (usually always within 24 hours).
All the two API versions require two parameters
team1 that is the home team name
and
team2 that is the away team name
and returns all the events for the two teams
for example with
team1=Schalke+04&team2=Hannover+96
you will get

  {"team1":
      {"teamName":"Schalke 04","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Klaas-Jan Huntelaar"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Franco Di Santo"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Pierre-Emile Højbjerg"}],"eventName":"In","minute":"78'"},
          {"players":[{"playerName":"Max Meyer"}],"eventName":"Out","minute":"78'"},
          {"players":[{"playerName":"Johannes Geis"}],"eventName":"Out","minute":"87'"},
          {"players":[{"playerName":"Sead Kolasinac"}],"eventName":"In","minute":"87'"},
          {"players":[{"playerName":"Sascha Riether"}],"eventName":"Yellow-Card","minute":"9'"}
  ]},
  "team2":{
      "teamName":"Hannover 96","events":[
          {"eventName":"Module-Start","value":"4231","minute":"0'"},
          {"players":[{"playerName":"Artur Sobiech"}],"eventName":"Out","minute":"16'"},
          {"players":[{"playerName":"Charleston Benschop"}],"eventName":"In","minute":"16'"},
          {"players":[{"playerName":"Marcelo"}],"eventName":"Yellow-Card","minute":"50'"},
          {"players":[{"playerName":"Manuel Schmiedebach"}],"eventName":"Out","minute":"62'"},
          {"players":[{"playerName":"Allan Saint-Maximin"}],"eventName":"In","minute":"62'"},
          {"players":[{"playerName":"Leon Andreasen"}],"eventName":"Out","minute":"77'"},
          {"players":[{"playerName":"Edgar Prib"}],"eventName":"In","minute":"77'"},
          {"players":[{"playerName":"Kenan Karaman"}],"eventName":"Shot-On-Post","minute":"80'"}
  ]}}

For now the API returns results for the current season only.

Match statistics

The API requires two mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
In the JSON response you can find the following impressive amount of statistics for each team of the match selected:
totalSaves touches aerialsWon passesTotal passesSuccessful cornersTotal cornersAccurate tackleSuccessful throwInsTotal

aerialsTotal offensiveAerials defensiveAerials shotsOffTarget tacklesTotal dribblesLost shotsTotal shotsBlocked

dribblesAttempted dribbledPast dispossessed foulsCommited shotsOnTarget offsidesCaught tackleUnsuccesful interceptions dribblesWon clearances possession

goals foulsWon penatyWon penaltyCommited

Here it is an example response for the query string team1=Schalke+04&team2=Hannover+96

{"team1":{
    "teamName":"Schalke 04",
    "teamStats":{
        "cornersTotal":10,"dribbledPast":8,"tackleSuccessful":12,"throwInsTotal":31,"aerialsTotal":43,
        "offensiveAerials":24,"dispossessed":11,"foulsCommited":8,"passesTotal":443,"offsidesCaught":3,"shotsOnTarget":8,
        "tackleUnsuccesful":8,"defensiveAerials":19,"interceptions":19,"touches":617,"shotsOffTarget":10,"tacklesTotal":20,
        "dribblesWon":14,"dribblesLost":11,"shotsTotal":26,"shotsBlocked":8,"aerialsWon":18,"clearances":16,"dribblesAttempted":25}},
 "team2":{
 "teamName":"Hannover 96",
     "teamStats":{
         "cornersTotal":10,"dribbledPast":14,"tackleSuccessful":22,"throwInsTotal":26,"aerialsTotal":43,"offensiveAerials":19,
         "dispossessed":5,"foulsCommited":13,"passesTotal":351,"offsidesCaught":2,"shotsOnTarget":1,"tackleUnsuccesful":14,
         "defensiveAerials":24,"interceptions":15,"touches":514,"shotsOffTarget":3,"tacklesTotal":36,"dribblesWon":8,"dribblesLost":7,
         "shotsTotal":7,"shotsBlocked":3,"aerialsWon":25,"clearances":30,"dribblesAttempted":15}}}

Take in mind that this API exists in two version, the one without live update /api/bundesliga/match/stats and the one with live update /api/live/bundesliga/match/stats with the second one one giving you real time statistics updates during the game and the first one giving you only the final statistics after a while the match is finished, after this point in time all the two API give you the same answer.

For now the API returns results for the current season only.

Player statistics for a match

It’s possible to get all the player statistics for a match using one of the two API version, the no live and the live one, with the first giving you the result only after a while the game is finished (usually within few hours and however always within 24 hours) and the second you giving you the result starting from the first minute match, that is with live updates.
The API requires three mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
player the player name you want to know statistics

The result is a JSON format response containing player infos like data age, weight, height and player match stats like dribble won, fouls committed.
The complete data list handle at the moment from the API follows:
player info
isManOfTheMatch, shirtNo, name, weight, age, height, isFirstEleven, position
player match stats
totalSaves, touches, aerialsWon, passesTotal, passesSuccessful, cornersTotal, cornersAccurate, tackleSuccessful,

throwInsTotal, aerialsTotal, offensiveAerials, defensiveAerials, shotsOffTarget, tacklesTotal,

dribblesLost, shotsTotal, shotsBlocked, dribblesAttempted, dribbledPast, dispossessed,

foulsCommited, shotsOnTarget, offsidesCaught, tackleUnsuccesful, interceptions, dribblesWon,

clearances, possession, goals, foulsWon, penaltyWon, penaltyCommited

Follow an example for
player=Klaas-Jan+Huntelaar&team1=Schalke+04&team2=Hannover+96

{"isFirstEleven":true,"isManOfTheMatch":true,"stats":
  {"throwInsTotal":1,"aerialsTotal":2,"offensiveAerials":2,"foulsCommited":1,"passesTotal":19,
  "offsidesCaught":1,"shotsOnTarget":1,"interceptions":1,"touches":27,"shotsOffTarget":1,
  "dribblesLost":1,"shotsTotal":3,"shotsBlocked":1,"aerialsWon":1,"dribblesAttempted":1},
"shirtNo":"25","name":"Klaas-Jan Huntelaar","weight":83,"position":"FW","age":32,"height":186}

For the position attribute you can get the following values:
GK = Goalkeeper
DM = Defensive Midfielder (1)
D = Defender (1)
M = Midfielder (1)
AM = Attacking Midfielder (1)
FW = Forward
Sub = substitute player

(1) the attribute value can have one letter more to specify better the field position, that is C for Center, L for Left and R for Right.

For now the API returns results for the current season only.

Missing player for a match

The API Missing players for a match requires two parameters
team1 and team2,
and returns a response a few days before a match with continue updates till the match starts.
Even after a match is played, the API continue to give you the last answer.
The response returns for each team the player name who will miss with the reason.
If there is any doubt about the player will play the match the reason will be inside a square bracket, otherwise the reason will be with no bracket.
Typical reasons are Injured, Suspended, Unfit, Other.
For example calling the API with
team1=Hertha+Berlin&team2=Hannover+96
you will have the following response

{ "team1" : { "players" : { "missing" : [ { "playerName" : "Sami Allagui",
            "reason" : "Injured"
          },
          { "playerName" : "Sinan Kurt",
            "reason" : "Injured"
          },
          { "playerName" : "John Brooks",
            "reason" : "Injured"
          },
          { "playerName" : "Per Skjelbred",
            "reason" : "[Injured]"
          }
        ] },
  "teamName" : "Hertha Berlin"
  },
"team2" : { "players" : { "missing" : [ { "playerName" : "Leon Andreasen",
            "reason" : "Injured"
          },
          { "playerName" : "Charlison Benschop",
            "reason" : "Injured"
          },
          { "playerName" : "Felipe",
            "reason" : "Injured"
          },
          { "playerName" : "Hotaru Yamaguchi",
            "reason" : "Injured"
          }
        ] },
  "teamName" : "Hannover 96"
}
}

For now the API returns results for the current season only.

Volgers: 97
Bronnen:
Gebruiksvoorwaarden
API maker:
Rapid account: Simone
Simone
heisenbug
Log in om API te beoordelen
Beoordeling: 5 - Stemmen: 1