Bundesliga Review: Stuttgart relegated as late Djilobodji goal saves Werder Bremen
Stuttgart's relegation from the Bundesliga was confirmed after they lost 3-1 at Wolfsburg on the last day of the season, while a late winner secured safety for Werder Bremen.
Jurgen Kramny's men needed Bremen to lose if they were to have any hope of survival, but Andre Schurrle's two goals condemned the 2007 champions to second-tier football next season.
On-loan Chelsea defender Papy Djilobodji's close-range strike in the 88th minute handed Bremen a 1-0 victory at home to Eintracht Frankfurt, who now face a two-legged play-off against 2.Bundesliga side Nurnberg to save their top-flight status.
Champions Bayern Munich marked their last Bundesliga game with Pep Guardiola at the helm in style by beating bottom side Hannover, who were already relegated, 3-1 at home.
Mario Gotze hit a double after Robert Lewandowski had struck his 30th league goal of the season to finish 2015-16 as the Bundesliga's top goalscorer.
Borussia Dortmund needed a late free-kick by Marco Reus to preserve their season-long unbeaten home record, drawing 2-2 with Cologne at Signal Iduna Park.
Thomas Tuchel's side led through Gonzalo Castro's stunner, but Anthony Modeste and former Dortmund midfielder Milos Jojic were on target for the visitors before Reus' deflected equaliser.
Bayer Leverkusen – already assured of an automatic place in next season's Chamions League – recorded a 3-2 home win against Ingolstadt, Stefan Kiessling's goal proving decisive as Roger Schmidt's side came back from a goal down.
It will be the Champions League play-offs for Borussia Monchengladbach, who won 2-0 at Darmstadt to end their season ahead of fifth-placed Schalke, 4-1 winners at Hoffenheim in Andre Breitenreiter's last game in charge.
Mainz and Hertha Berlin finished sixth and seventh respectively after their 0-0 draw, with both sides qualifying for the Europa League - the first time Mainz will be in the competition's group stages after losing in the qualifiers twice.
Elsewhere, Hamburg fought back from behind to win 3-1 at Augsburg and finish in 10th place, with the hosts ending up 12th.