Born in Galway, County Galway, Cunningham began his career with Cregmore FC. In 2004, he joined Mervue United before earning a contract in the Manchester City Academy. Cunningham made his first team debut for Manchester City as a 46th minute substitute in a 4–2 victory over Scunthorpe United in the FA Cup on 24 January 2010 where he played on the left side of the City defence. Cunningham made his first Premier League appearance on 11 April 2010 against Birmingham City as a substitute for Adam Johnson in the final minutes of the game. Cunningham made his second Premier League appearance on 9 May 2010 against West Ham United as a substitute for Johnson, just 2 minutes of the final minutes of the game. On 26 August 2010, Cunningham made his European debut in Europa League Qualifiers Second Leg against Politehnica Timișoara, coming on as a 54th-minute substitute for Nigel de Jong in a 2–0 win. On 22 September 2010, Cunningham made his first start for the club and played 90 minutes in a 2-loss against West Bromwich Albion in the League Cup.
On 21 October 2010, Cunningham joined Championship side Leicester City on loan until January 2011. On 23 October 2010, Cunningham made his debut for the club in a 2–0 loss against Swansea City where he played the full 90 minutes. Cunningham became a regular left-back in the starting eleven and made 12 starts. On 1 January 2011, Cunningham fractured his tibia in a challenge with Hull City's Liam Rosenior. Rosenior was sent off and Cunningham had to be substituted in a 1–0 win for Leicester and he was ruled out of action for up to four months, which ended his loan spell at Leicester City. After the match, Sven-Göran Eriksson say his injury was 'a complete accident' and said:
On 25 October 2011, Cunningham joined Championship side Nottingham Forest on loan until 31 December after an injury crisis at the club left them desperately on short defensive options. After his move to Nottingham Forest, Cunningham says he expected to make an impact for the club and was looking forward to playing regularly for the club Nottingham Forest duo Lee Camp and Ishmael Miller agreed with Cunningham's expectations. On 29 October 2011, Cunningham made his debut for the club in a 1–0 loss against Hull City before being substituted early in the second-half. On 1 November 2011, Cunningham played 90 minutes in a 1–0 win over Reading. Since making his debut, Cunningham became a regular in the starting eleven, playing at left back.
On 29 December, Cunningham's loan was extended until the end of the season. After his loan was extended, manager Steve Cotterill says he would want to sign Cunningham on a permanent basis, only if the money can be found in the near future. After his loan spell ended, Cotterill praised Cunningham (among the loan signing) for helping the club pull away from the relegation zone and stay in the Championship next season.
The following season, Cunningham told BBC Sport he intended to leave Manchester City to further his career. On 5 July 2012, Cunningham signed a four-year contract at Bristol City, for an undisclosed fee.
Cunningham made his debut on the opening game of the season, in a 1–0 loss against Nottingham Forest. Then, in a 2–1 win over Peterborough United, on 18 September 2012, Cunningham received a heavy tackle from Tyrone Barnett after Barnett made a reckless challenge on him, which resulted in Cunningham being stretched off and Barnett being booked. After the match, Derek McInnes believes that Barnett should have been sent-off for the challenge Cunningham was ruled out for two months after rupturing his tendon. In mid-December, Cunningham recovered from the injury and made his return in a 2–0 loss against Derby County on 15 December 2012. On 29 January 2013, Cunningham scored his first goal for Bristol City against Watford, a cross that had looped over Manuel Alumunia and found its way into the back of the net. Since his recovery from injury, Cunningham continued to retain his first team place in the left-back position, though sometimes plays in the left-midfield, but unfortunately, the club was relegated to League One.
Bristol City gave Cunningham permission to speak to Preston North End after accepting an undisclosed bid, he spent the weekend with Preston in Scotland at a training camp before the deal was completed on Monday the 27th of July.
On the 24th July 2017, Cunningham was appointed captain of Preston until such a time as Tom Clarke became fit again.
Cunningham had been capped by the Republic of Ireland at youth level before being called up to the senior international squad by manager Giovanni Trapattoni on 22 February 2010 for a friendly against Brazil. On 28 May 2010, Cunningham made his debut for Ireland in a 3–0 win against Algeria at the RDS.As of match played 30 April 2016.
As of match played 6 February 2013.
Bristol CityFootball League Trophy: 2014–15