Bonham signed a scholarship deal with Watford in June 2010, but quickly signed his first professional contract three months later, having just turned 17. Due to first team goalkeeper Scott Loach incurring a suspension, Bonham received his first call up to the first team squad on 26 November 2011, when he was an unused substitute for a 0–0 Championship draw with Doncaster Rovers. During the 2012–13 season, Bonham was an unused substitute on 12 occasions. Bonham made his only appearance for Watford on 4 May 2013, when he came on as a substitute for injured goalkeeper Jonathan Bond after 24 minutes of the final game of the season against Leeds United. He was only included in the squad due to an injury sustained in the warm up by first-choice goalkeeper Manuel Almunia and was at fault for both Leeds' goals in the 2–1 defeat, which cost Watford the chance of automatic promotion to the Premier League. After the match, Watford manager Gianfranco Zola refused to blame Bonham for his actions. Bonham was not called into the squad for Watford's unsuccessful playoff campaign. On 7 June 2013, Watford announced that Bonham's contract would not be renewed and he was released by the club.
Harrow Borough (loan)
On 17 February 2012, Bonham joined Isthmian League Premier Division club Harrow Borough on a one-month emergency loan deal. He made the first senior appearance of his career the following day, conceding two goals in a 2–2 draw with Bury Town. On 14 March, the loan was extended by a further month. He returned to Watford in April after he broke a bone in his hand during a 4–3 defeat to Canvey Island. He made 9 appearances for the club and failed to keep a clean sheet.
Brentford
2013–2015
On 12 June 2013, Bonham signed a two-year contract with League One club Brentford. He made his debut for the club in a League Cup first round tie at home to Dagenham & Redbridge on 6 August, in which Brentford ran out 3–2 extra time winners. His second appearance came in the following round away to Derby County, in which he endured a torrid evening as the home side cruised to a 3–0 lead before half time, eventually winning 5–0. Bonham made his league debut on 7 September, coming off the bench against Bradford City after starting keeper David Button was sent off. Described as a 'nightmare afternoon' in press reports, he conceded four goals as Brentford lost 4–0. Bonham spent much of the remainder of the 2013–14 season away on loan. A persistent shoulder injury suffered by Richard Lee saw Bonham serve as backup to David Button through the Bees' 2014–15 Championship season. He signed a new three-and-a-half year contract on 2 January 2015 and celebrated his signing the following day with his first appearance of the season with a start in an FA Cup third round match versus Brighton & Hove Albion. He conceded two late goals as Brentford were knocked out after suffering a 2–0 defeat, though winning the club's social mediaman of the match award proved to be a consolation. It was his only appearance of the 2014–15 season.
2015–2019
Bonham had a nightmare start to the 2015–16 season, conceding four goals on his sole appearance against Oxford United in the League Cup first round on 11 August 2015. He again served as David Button's backup throughout the campaign. Despite the departure of Button on 19 July 2016, Bonham entered the 2016–17 season as second-choice behind new signing Daniel Bentley. He made his first appearance of the season in a 1–0 EFL Cup first round defeat to Exeter City on 9 August 2016. Having failed to make an appearance in nearly five months, Bonham revealed in late December 2016 that it was "frustrating" to be denied the chance to move away on loan. He made his second and final appearance of the season with his first Brentford start in a 1–1 draw versus Barnsley on 17 April 2017 and won the club's man of the match award for his performance. Bonham signed a one-year contract extension in June 2017, which would keep him at Griffin Park until the end of the 2018–19 season. He spent the entire 2017–18 season away on loan and departed on another season-long loan in August 2018. Bonham departed Brentford when his contract expired at the end of the 2018–19 season and he made just seven appearances during six seasons at Griffin Park.
On 15 November 2013, Bonham joined Southern League Premier Division club Arlesey Town on loan until 2 January 2014. He made his debut the following day in a 2–0 FA Trophy third qualifying round victory over Marlow. He endured another nightmare afternoon in the following round, conceding five goals in a 5–1 defeat to Whitehawk on 30 November. After four successive defeats and conceding 12 goals, Bonham helped Arlesey to three league wins in a row in December and at the end of the month, his loan was extended until the end of the 2013–14 season. Bonham was recalled on 8 February 2014, after making 19 appearances.
On 27 June 2017, Bonham joined League Two club Carlisle United on a half-season loan, which was later extended to the end of the 2017–18 season. His performances in January 2018 saw him nominated for the PFA League Two Fans' Player of the Month award and he finished the season with 49 appearances.
On 27 August 2018, Bonham joined League One club Bristol Rovers on loan until the end of the 2018–19 season. He had an impressive start to his time with the club and was reported on 15 October 2018 to have "the best save percentage of any first-choice goalkeeper in England so far this season, with 91.5%". Bonham finished the season with 46 appearances.
Gillingham
On 4 June 2019, Bonham signed a two-year contract with League One club Gillingham on a free transfer, effective 1 July 2019. He made 40 appearances during a truncated mid-table 2019–20 season.
International career
Bonham won five caps for the Republic of Ireland U17 team in 2009 and 2010. In October 2018, it was reported that the full Republic of Ireland team were considering calling up Bonham, due to his club form at Bristol Rovers.