Borussia Dortmund will play Champions League football next season after a 3-0 home win over a 10-man Holstein Kiel on Saturday completed an incredible late-season run.
Sitting in 11th place just seven weeks ago, Dortmund collected 22 of a possible 24 points in their last eight league matches, climbing up to fourth, past Freiburg who lost 3-1 at home against Eintracht Frankfurt.
Dortmund, who had not been in the top four since the end of matchday three in September, got off to an excellent start against their already relegated opponents when Serhou Guirassy converted a third-minute penalty.
Knowing they needed a big win to guarantee a top-four finish, Dortmund's hopes looked even rosier just six minutes later when Kiel's Carl Johansson saw red for a last-man foul.
Marcel Sabitzer added a second with a deflected low shot two minutes after halftime and Felix Nmecha made it three when he scored from close range with 73 minutes gone.
Dortmund coach Niko Kovac, who took over in January, said his side, Champions League finalists a year ago, should not get carried away by reaching the club's "minimum goal"
"We're glad, I'm happy and what we've shown in the past few weeks has been sensational, but we shouldn't be celebrating," Kovac told reporters.
Dortmnd captain Emre Can was more upbeat, saying "we've had some great Champions League evenings, we want to experience that again."
Dortmund will be joined in the Champions League by Frankfurt, who came from a goal down to win at Freiburg, qualifying for Europe's top competition through league placing for the first time.
Freiburg, who started the weekend in fourth and needed to win to guarantee a debut Champions League spot, took the lead after 27 minutes when Ritsu Doan volleyed in.
Frankfurt's Ansgar Knauff did his former club Dortmund a favour when he levelled things up just before half-time.
Frankfurt added two goals in three second-half minutes through Rasmus Kristensen and Ellyes Skhiri to grab hold of the match and their Champions League fate.
Freiburg fell to fifth and will play in the Europa League next season; they will be joined in the competition by the winner of the German Cup final between Stuttgart and third-flight Arminia Bielefeld.
Elsewhere, champions Bayern Munich finished the season in style, farewelling departing veteran Thomas Mueller in a 4-0 win at Hoffenheim.
Harry Kane scored his 26th league goal of the year, winning the top goalscorer gong for the second straight season, with Michael Olise, Joshua Kimmich and Serge Gnabry on the scoresheet.
Kane said winning the Bundesliga top-scorer trophy was "more special," now he has tasted team success, adding "I've won a few golden boots in my career, but to do it when we win the championship is more meaningful."
Bayer Leverkusen were held to a 2-2 draw at Mainz in Xabi Alonso's final match in the dugout.
Last season's unbeaten champions fell behind with 35 minutes played when Paul Nebel scored but Patrick Schick scored twice in five minutes after halftime to take the lead, while bringing his season tally to 21 goals.
Mainz's Jonathan Burkardt levelled things up from the spot. Steffan Bell's stoppage time goal was rubbed off for a handball but Mainz stayed sixth and sealed a Europa Conference League placing.
Despite missing victory, Leverkusen set a Bundesliga record by going 34 games without defeat away from home.
"For sure I'm going to miss it, I've learned a lot and I'll take a lot from these three years for the future," Alonso told reporters. The coach is reportedly set to take over at Real Madrid in the summer.
RB Leipzig's poor season continued, losing 3-2 at home to Stuttgart to miss out on European football completely for the first time since their debut promotion in 2016.
Heidenheim will play in the relegation play-off after a 4-1 home loss against Werder Bremen.
Elsewhere, Union Berlin came from a goal down to win 2-1 at Augsburg, with Andrej Ilic scoring a brace.
Bochum, who were relegated last week, bade farewell to the top-flight with a 2-0 win at St Pauli, while Wolfsburg won 1-0 at Borussia Moenchengladbach.
G.Hendrickx--LCdB