Schalke booked a place in the Champions League qualifiers next season by winning away at Freiburg, but the real drama came at the other end of the table as Fortuna Dusseldorf were relegated after dropping into the bottom two with just eight minutes of the season to go.
Schalke won 2-1 at Freiburg, who will return to the Europa League for the first time in over a decade despite suffering defeat at home.
Freiburg would have been in the Champions League themselves if they had won the match, but
Julian Draxler gave Schalke the lead in the 20th minute of a tense opening half in which neither side appeared keen to take any risks.
• Schaaf: Heynckes leaves the Bundesliga in triumphant fashion
The home side had to open up more in the second half and they got their reward through Jonathan Schmid, but a comedy of errors in defence soon led to Julian Schuster putting through his own goal to gift Schalke the victory.
Eintracht Frankfurt came from two goals behind to seal their place in the Europa League next season with a 2-2 draw against 10-man Wolfsburg.
Goals from Jan Polak and Diego silenced a sell-out Waldstadion crowd, but as the home team's fans awaited agonisingly for news of Hamburg's game against Bayer Leverkusen, Alexander Meier gave them hope with a penalty.
A Ricardo Rodriguez own goal in the last minute then brought the Eagles level and earned them a place in the Europa League as Hamburg succumbed against Leverkusen.
Wolfsburg had to play for 55 minutes of the game with 10 men after Makoto Hasebe was shown the red card for giving away the penalty.
Hannover condemned Fortuna Dusseldorf to relegation thanks to a comfortable 3-0 win at the Niedersachsenstadion.
Mame Diouf's goal and a brace from Didier Ya Konan earned the Reds all three points to leave the visiting players in tears.
Hoffenheim's dramatic win over Borussia Dortmund meant they slipped two places and were relegated after only one season in the top flight following their 12th game in a row without a win.
Augsburg salvaged their Bundesliga status for a second straight season as a dramatic 3-1 win over Bavarian rivals Greuther Furth lifted them out of the relegation zone for the first time all season on the final day.
Furth missed a penalty early on through Edgar Prib before Tobias Werner put Augsburg in front. With Fortuna Dusseldorf behind at Hannover, that goal meant Augsburg were safe, and survival looked certain when Jan-Ingwer Callsen-Bracker headed in a second.
However, Furth refused to lie down and Florian Trinks brought them back into the game, setting up a nervous ending in the Augsburg Arena. The home fans' nerves were settled by Ji Dong-won, though, as Markus Weinzierl's side completed an amazing recovery in the second half of the season to stay up.
Sejad Salihovic converted two penalties in the final 13 minutes as Hoffenheim booked a spot in the relegation play-off with a thrilling 2-1 win against 10-man Borussia Dortmund.
Robert Lewandowski gave Dortmund the lead after six minutes before Salihovic scored from the spot in the 77th and 82nd minutes.
On the second occasion he beat Dortmund midfielder Kevin Grosskreutz from 12 yards after goalkeeper Roman Weidenfeller was red-carded.
Dortmund finished the season with 66 points, taking second place, while Hoffenheim came in 16th with 31 points.
Franck Ribery scored two goals and set up two more as Bayern Munich came from behind to end their victorious campaign with a 4-3 win at Borussia Monchengladbach.
The home side made a flying start and opened up a two-goal lead within the first five minutes thanks to Martin Stranzl and Mike Hanke. Javi Martinez reduced arrears soon after but Harvard Nordtveit restored Gladbach's two-goal advantage in a frantic opening 10 minutes.
However, Ribery cut the deficit to 3-2 after 18 minutes and then hit an equaliser early in the second half, before setting up Arjen Robben's decisive goal on the hour.
The win sees Bayern finish the season on 91 points, the highest total in Bundesliga history and the perfect preparation for next weekend's Champions League showdown with Borussia Dortmund at Wembley.
Stefan Kiessling left it late but secure the golden boot with a 90th minute goal that gave Bayer Leverkusen a 1-0 victory away to Hamburg, who missed out on a Europa League place with defeat.
Borussia Dortmund's Robert Lewandowski had pulled even with Kiessling earlier in the day but his dramatic late strike moved him clear with 25 goals.
With Dortmund having beaten Hoffenheim 1-0 to secure second, Leverkusen settled for third place with 65 points, while Hamburg finished seventh with 48 - three points behind Eintracht Frankfurt and the final European place.
Werder Bremen began the post Thomas Schaaf era on a negative note after suffering a 3-2 defeat at Nurnberg.
Bremen parted company with Schaaf after 14 years in midweek following a run of 12 games without a victory, but it got no better as they finished their Bundesliga on a familiar note.
Kevin De Bruyne gave them hope with a 37th-minute lead, but Per Nilsson equalised just after the hour mark and Sebastian Polter made it 2-1 for the hosts after 82 minutes. Tomas Pekhart doubled Nurnberg's advantage two minutes from time before De Bruyne set up a tense finale in the closing stages.
Mainz rescued a 2-2 draw at the Mercedes-Benz Arena as Stuttgart failed to hold out in their warm-up for the DFB-Pokal final.
Chinedu Ede gave Mainz the lead after 16 minutes before Stuttgart equalised through own goal by Mainz goalkeeper Christian Wetklo in the 22nd minute.
Arthur Boka then put Stuttgart ahead in the 33rd minute only for Nicolai Muller to equalise for the visitors in the 42nd minute.
Stuttgart, who will face Bayern Munich in the German cup final in Berlin on June 1, finished the season in 12th place with 43 points while Mainz claimed 13th spot with 42 points after ending the season with a nine-game winless drought.
Information from the Press Association was used in this report