CHARLOTTE, N.C. - Kirk Cousins with the dagger, and K.J. Osborn for the win.
The quarterback found the second-year receiver on a deep corner route. Osborn secured the catch shy of the goal line and reached across the goal line for a 34-28 victory.
It was the second walk-off win in as many weeks for Minnesota, which has improved to 3-3 heading into its bye, climbing out of an 0-2 start.
Osborn had come up big earlier during the drive with a 13-yard catch on third-and-3 from the Minnesota 43. He finished with six catches for 78 yards, complementing a monster day by Adam Thielen (11 catches for 126 yards and a touchdown) and eight catches for 80 yards by Justin Jefferson and three catches for 71 yards by Tyler Conklin.
Cousins finished 33-of-48 passing for 373 yards with three touchdowns and a passer rating of 112.6.
Dalvin Cook returned to the lineup and the end zone for Minnesota. Cook rushed 29 times for 140 yards, highlighted by his 16-yard touchdown run.
The Panthers rallied from 11 down with less than five minutes remaining to force overtime.
Carolina kicked a 23-yard field goal with 4:41 remaining to make it 28-20 and forced a punt.
The Panthers then drove 96 yards by completing a pair of fourth down passes for gains of 41 and 25 on the way to Sam Darnold hitting Robby Anderson for a 7-yard touchdown.
Darnold then completed a shovel pass to Tommy Tremble to tie the game at 28 with 42 seconds remaining.
The Vikings followed by driving 46 yards to the Panthers in 36 seconds, but Greg Joseph missed the 47-yard game winner with one second left in regulation.
The Vikings had rallied earlier after allowing a blocked punt with a pair of touchdowns in the third quarter.
A 12-10 halftime score opened up in the third quarter, beginning with Frankie Luvu's block of a punt by Jordan Berry. Kenny Robinson returned the ball 4 yards for a touchdown and a 17-12 lead.
The Vikings snapped out of their second-half slump with a five-play, 79-yard drive to reclaim the edge. C.J. Ham rumbled for a gain of 30 yards on a third-and-1 to the Carolina 40. Cousins followed with a 24-yard completion to Tyler Conklin.
Cook showed his nose for the end zone and some gravity-defying skills by extending the ball across the goal line for a 16-yard touchdown, his second of 2021, and an narrow 18-17 lead.
Cameron Dantzler forced a fumble that Eric Kendricks recovered on the very next play, and Minnesota followed with a 35-yard pass to Adam Thielen three plays before Thielen secured a 5-yard touchdown.
Q1, 11:52 remaining
Vikings 3, Panthers 0
Greg Joseph kicks a 25-yard field goal [7 plays, 16 yards, 2:56 time of possession]
Slow start: The Vikings were unable to capitalize on the short field (after an interception by Bashaud Breeland), suffering a pair of 3-yard losses on their two first downs of the possession.
Q1, 8:27 remaining
Panthers 7, Vikings 3
Chuba Hubbard rushes for 2 yards (Zane Gonzalez kicks PAT) [2 plays, 18 yards, 0:42 time of possession]
Quick turnaround: The Panthers made the most of the great field position that followed Haason Reddick's 22-yard return of a Justin Jefferson fumble.
Q1, 2:57 remaining
Panthers 7, Vikings 6
Joseph kicks a 25-yard field goal [11 plays, 46 yards, 5:30 time of possession]
Missed opportunity: The Vikings failed to fully capitalize on their second trip to the red zone. After a 14-yard run by Dalvin Cook to the Panthers 15-yard line, Alexander Mattison gained 5 on first down, but Kirk Cousins' feet got caught as he was backing away from the line of scrimmage on second down. He fell, got up and threw the ball out of the end zone. It looked like Adam Thielen had beaten his man and was open. Thielen caught a 3-yard pass on third-and-5.
Q2, 10:59 remaining
Vikings 12, Panthers 7
Chris Herndon catches a 2-yard pass from Kirk Cousins (2-point conversion run by Dalvin Cook fails) [10 plays, 85 yards, 4:08 time of possession]
Heavy personnel: The Vikings max protected with C.J. Ham lining up at tight end on a 20-yard pass to Thielen to kick-start the drive. Ham and reserve offensive lineman Mason Cole were in at tight ends on the pass to Herndon.
Q2, 4:20 remaining
Vikings 12, Panthers 10
Gonzalez kicks a 47-yard field goal [10 plays, 32 yards, 4:23 time of possession]
Moving the chains: DJ Moore recorded his first catch of the day on a gain of 18 that converted a third-and-10 from the 50 to move Carolina into range for the field goal.
Q3, 6:49 remaining
Panthers 17, Vikings 12
Kenny Robinson returns a blocked punt 4 yards (Gonzalez kicks PAT)
Second score: The touchdown, which was set up by Frankie Luvu's blocked punt, was just Carolina's second in a third quarter this season.
Q3, 4:00 remaining
Vikings 18, Panthers 17
Cook rushes for 16 yards (conversion pass fails) [5 plays, 79 yards, 2:49 time of possession]
Ready to rumble: Fullback C.J. Ham tripled his previous career long (a 10-yarder last season against Carolina) with a 30-yard rush on third-and-2 to plays before Cook impressively reeeeeaaaached the end zone.
Q3, 2:24 remaining
Vikings 25, Panthers 17
Thielen catches a 5-yard pass from Cousins (Joseph kicks PAT) [4 plays, 39 yards, 1:27 time of possession]
Q4, 10:15 remaining
Vikings 28, Panthers 17
Joseph kicks a 38-yard field goal [8 plays, 63 yards, 4:37 time of possession]
Going long: The Vikings gained 26 yards on a third-and-2 pass from Cousins to Justin Jefferson. Cousins eclipsed 30,000 career passing yards on the play.
Q4, 4:41 remaining
Vikings 28, Panthers 20
Gonzalez kicks a 23-yard field goal [7 plays, 55 yards, 2:19 time of possession]
Hello, old friend: The Panthers gained 21 yards during the drive on a pass to former Viking Brandon Zylstra, advancing to the 5-yard line. But Minnesota forced a short field goal.
Q4, 0:42 remaining
Vikings 28, Panthers 28
Robby Anderson catches a 7-yard pass from Sam Darnold (Darnold conversion pass to Tommy Tremble) [11 plays, 96 yards, 1:27 remaining]
Fourth-and-longs: Carolina converted a fourth-and-10 with a 41-yard pass to Ian Thomas and a fourth-and-6 with a 25-yarder to Moore.
Overtime, 5:48 remaining
Vikings 34, Panthers 28
Osborn catches a 27-yard pass from Cousins (no extra point attempted) [9 plays, 75 yards, 4:12 time of possession]