The game was only a few minutes old when Lars Stindl made it 1-0. Denis Zakaria – in the team for the rested Christoph Kramer – laid a delightful pre-assist on with a backheel for Stefan Lainer, and he cut back for the Gladbach captain, who steered his 14th goal of the season into the bottom corner.
Bremen should have got back on level terms when Josh Sargent teed up Davie Selke, but Foals goalkeeper Yann Sommer pulled off a wonderful double save, and the chance went begging.
Gladbach thought it had pulled further clear when Marcus Thuram fired the ball beyond Sommer's opposite number, Jiri Pavlenka, but the flag went off for offside against the young Frenchman.
Lainer should have added to Gladbach's advantage when he headed Stindl's corner over from close-range, and Felix Brych's whistle for half-time went with the Foals just one goal to the good.
Theodor Gebre Selassie got plenty of power behind a shot from the edge of the Gladbach box soon after the restart, but Sommer was able to tip his effort over the bar, and Gladbach made it 2-0 moments later when Thuram played a smart one-two to take Omer Toprak out of the equation before sliding his eighth goal of the campaign low past Pavlenka.
Ramy Bensebaini then got his name on the scoresheet, his looping header from Stindl's free-kick leaving Pavlenka with no chance.
Florian Neuhaus looked to have put the game beyond any doubt before Oscar Wendt replaced Stindl as captain for the final 15 minutes, before he bids farewell to the club this summer.
Bremen pulled two goals back through Milot Rashica and Nicolas Fullkrug, but it was too little, too late for the host, which is relegated for the first time in 40 years.