EAST RUTHERFORD, N.J. — Josh Allen threw a 38-yard touchdown pass to John Brown with 3 minutes left, and the Buffalo Bills rallied from a 16-point second-half deficit to stun the New York Jets 17-16 in the season opener Sunday.

After struggling to get much going on offense, the Bills (1-0) finally were able to move the ball after Jets middle linebacker C.J. Mosley left with a groin injury.

Buffalo also took advantage of kicking woes by the Jets (0-1) as Kaare Vedvik, claimed last week off waivers from Minnesota, missed an extra point and a 45-yard attempt and ended up being the difference in the game.

PHOTO GALLERY: Buffalo Bills 17, New York Jets 16

Le'Veon Bell caught a touchdown pass and had a 2-point conversion in his Jets debut, and Jamison Crowder had 14 catches for 99 yards in his first game with his new team - but Adam Gase's offense otherwise sputtered behind a line that gave Sam Darnold little time to throw.

Allen finished 24 of 37 for 254 yards and a touchdown, and had one of his two interceptions returned 17 yards for a touchdown by Mosley. Brown caught seven passes for 123 yards.

Darnold was 27 of 40 for 179 yards and the TD to Bell, who ran for 60 yards on 17 carries. The running back, who sat out all last season in a contract dispute with Pittsburgh, also caught six passes for 32 yards.

Leading 8-0 in the third quarter, it appeared the Jets scored on a 5-yard throw from Darnold to Ryan Griffin, when the quarterback kept the ball instead of handing it off, took a few steps to his right and pulled up suddenly before finding his wide-open tight end in the front of the end zone.

The play was reviewed and overturned, though, as Quincy Enunwa was called for offensive pass interference.

Two plays later, New York got into the end zone again - and it counted - as Bell reached down for a low throw and stepped into the end zone for a 9-yard touchdown.

Gase then opted for the 2-point conversion and Bell leaped in the back of the end zone and came down with Darnold's desperate heave to put New York up 16-0 with 7:01 left in the third quarter.

Buffalo got onto the scoreboard on its next possession on Stephen Hauschka's 43-yard field goal. The drive was kept alive when Henry Anderson was called for roughing the passer on third-and-10 from the Jets 49. A diving Marcus Maye also dropped an interception on the play right before Hauschka's field goal.

Mosley injured his groin during the drive while breaking up a pass into the end zone. Rookie Blake Cashman replaced him, but the loss of New York's middle linebacker was clear on Buffalo's next drive.

Rookie Devin Singletary gouged the defense on runs of 23, 12 and 15 yards, and Allen capped the impressive drive by pump faking, taking off to his right and stepping inside the right-front pylon to make it 16-10 with 10:21 remaining.

FIRST IMPRESSIONS 

Mosley, making his Jets debut after five years with Baltimore, snatched a tipped pass from Allen and took it 17 yards into the end zone for a touchdown less than five minutes into the game.

But Vedvik clanked the extra point off the left upright. Vedvik is the third kicker with the team since training camp began, with Chandler Catanzaro retiring after struggling in the preseason opener and Taylor Bertolet missing three field goals in the preseason finale.

SAFETY DANCE

Poole stuffed Frank Gore before he could get out of the end zone for a safety, giving the Jets an 8-0 lead 3:08 into the second half.     

MAKING HISTORY

Bell became the fastest player in NFL history to get 8,000 yards from scrimmage for his career. He reached the milestone with a 5-yard run, his first carry for New York in the first quarter of his 63rd career game. The 27-year-old Bell entered the game with 7,996 yards from scrimmage.     

The previous fastest was Pro Football Hall of Famer Eric Dickerson, who accomplished the feat in 64 games.     

INJURIES

Bills: S Taron Johnson left with a hamstring injury.     

Jets: Rookie DL Quinnen Williams, the No. 3 overall pick, left in the fourth quarter with an ankle injury.     

UP NEXT

Bills: Play at MetLife Stadium for the second straight week when they face the New York Giants next Sunday.     

Jets: At home against Baker Mayfield and the Cleveland Browns next Monday night.

RELATED: Bills rally from 16-point deficit in second half, stun Jets

RELATED: Bills Mafia gets dressed up to celebrate new season

RELATED: Bills' QB pledges money to Oishei Children's Hospital with each touchdown he scores