A second-half comeback saw Brighton secure a ninth-placed finish in the Premier League, consigning West Ham to the Europa Conference League next season with a 3-1 victory at the AMEX Stadium.
Michail Antonio had thundered West Ham ahead with a great strike, but Joel Veltman equalised with a helping hand from Lukasz Fabianski and Pascal Gross finished exquisitely to hand the Seagulls all three points. Danny Welbeck later put some gloss on the scoreline to make it 3-1.
The hosts started excellently, moving the ball nicely and crafting the first chance when Moises Caicedo fired a shot straight at Lukasz Fabianski from the edge of the box.
West Ham grew into the contest as the opening 30 minutes progressed, though chances evaded them against a team they had never previously beaten in the Premier League.
But while the Seagulls were pretty in their build-up - yes, the same old story - they lacked any potency up front due to some slow decision-making and were made to pay when Antonio slammed in West Ham's first real chance.
The ball broke for the forward on the edge of the box and he sent a searing effort whizzing past Sanchez and into the far corner.
Neal Maupay replaced Yves Bissouma for Brighton at half time and got his first shot of the afternoon off quickly, forcing Fabianski into a simple save. The added threat paid off as the hosts broke through, with Solly March teeing up Joel Veltman to slam in an equaliser that Fabianski should have saved.
That goal galvanised Brighton and they soon went close to a second, with Danny Welbeck getting in behind and curling a shot just wide from a tight angle.
West Ham looked to tire during the late stages of the second half, understandably so given their European journey this season, and it was Welbeck who got the Seagulls' third in injury time. He rose well to nod in Gross' accurate corner.
Brighton have now secured their first ever top ten finish, finishing just five points behind West Ham, who ended up with a Europa Conference League spot. Had they won, they would have taken sixth due to Manchester United's 1-0 defeat at Crystal Palace.
Brighton vs West Ham player ratings
1. Brighton (3-4-2-1)
GK: Robert Sanchez - 6/10 - Not called into action all that often and couldn't get near Antonio's strike.
CB: Joel Veltman - 8/10 - Good strike to beat Fabianski for 1-1, though it should have been stopped. Diligent as ever in defence.
CB: Lewis Dunk - 7/10 - Felt he was fouled by Antonio before the striker's goal. Led well otherwise.
CB: Adam Webster - 7/10 - Lost his bearings in the second half at one point but recovered to make a good slide tackle.
RWB: Solly March - 6/10 - Laid off Veltman for the goal. Busy up and down the right.
CM: Yves Bissouma - 5/10 - Buzzed around with the ball but did find it tricky dealing with Rice and Soucek. Brought off at half time.
CM: Moises Caicedo - 7/10 - Continues to impress, imposing himself on one of the more established central midfield partnerships in the Premier League.
LWB: Marc Cucurella - 7/10 - A hive of activity on the left. Defensive positioning was spot on and he won a number of free kicks.
AM: Alexis Mac Allister - 6/10 - Accurate with his passing but not as influential as he would have liked.
AM: Pascal Gross - 9/10 - Awesome swivel and turn to beat the defender before firing in the winner from the edge of the box.
ST: Danny Welbeck - 9/10 - An excellent outlet all afternoon, grabbing a goal and an assist to continue his strong form of recent weeks.
SUB: Neal Maupay - 7/10 - Immediately into the action at the start of the second half, shooting straight at Fabianski. His arrival helped Brighton seize the initiative.
SUB: Tariq Lamptey - 6/10
SUB: Enock Mwepu - 6/10
2. West Ham (4-2-3-1)
GK: Lukasz Fabianski - 4/10 - At fault for Veltman's strike. Had made a couple of saves beforehand.
RB: Vladimir Coufal - 6/10 - A busy and forceful presence on West Ham's right. Got a few important blocks in.
CB: Craig Dawson - 5/10 - Took a whack but managed to soldier on. Did look quite leggy.
CB: Kurt Zouma - 5/10 - Struggled at the back once Brighton went with two strikers up front. Still getting booed.
LB: Aaron Cresswell - 5/10 - A little safe in possession and did struggle with Brighton's overlapping runners.
CM: Tomas Soucek - 5/10 - Caught Cucurella late for a yellow card. Aerial threat wasn't prominent.
CM: Declan Rice - 7/10 - Always busy and one of the few West Ham players who didn't look leggy. Mopped up well.
RW: Jarrod Bowen - 5/10 - Not as electric as he was against Manchester City recently. Got just one shot away and it was blocked.
AM: Manuel Lanzini - 5/10 - Saw plenty of the ball but didn't create much or get any shots away.
LW: Pablo Fornals - 5/10 - Got stuck in with a few tasty challenges. Disappointingly quiet after a good outing against Manchester City.
ST: Michail Antonio - 7/10 - Took his opportunity brilliantly to fire in the opener. Had little else to work with afterwards.
SUB: Andriy Yarmolenko - N/A
SUB: Ben Johnson - N/A
SUB: Mark Noble - 10/10 - Mr West Ham came on for his last ever appearance as a professional footballer. A one-club player always deserves full marks.