Cunningham was drafted in the second round, 53rd overall, in the 2008 MLB Draft by the Atlanta Braves, and he signed. He was assigned to Single-A Rome as an outfielder. In 65 games, he hit.260 with 1 HR, 20 RBI and 7 SB. Cunningham played 2011 with A-Advanced Lynchburg, where in 87 games, he hit.257 with 4 HR, 20 RBI and 14 SB. He was named to the Carolina League All-Star team, joining fellow Hillcats Joey Terdoslavich, Andrelton Simmons and Adam Milligan. After the season, he played with the Surprise Saguaros of the Arizona Fall League. Cunningham played 2012 with Double-A Mississippi, where in 120 games, he hit.309 with 3 HR, 51 RBI and 24 SB. Cunningham was a mid-season and post-season All-Star. After the year, he was announced the Braves' Organizational Player of the Year. Cunningham was invited to spring training as a non-roster invitee. Cunningham began 2013 with Triple-A Gwinnett, where he hit.279 with 2 HR, 30 RBI and 18 SB in 99 games before being called up. He was called up to the major leagues for the first time on July 30, 2013 to replace the injured Reed Johnson, and recorded his first career major league hit and subsequent run the same day against the Colorado Rockies. Cunningham was optioned to the minors on August 11, having made six appearances in his first major league stint. After Brandon Beachy was placed on the disabled list, Cunningham was recalled on August 23, only to be sent to the minors five days later, when Dan Uggla was reactivated. He was invited to spring training in 2014, and sent down to Gwinnett on March 20. Cunningham spent the entire 2014 season in the minors. He was again invited to spring training in 2015, but not recalled until May 15, 2015, to make his first major league start against the Miami Marlins. On June 14, Cunningham was optioned to Gwinnett, and returned to the majors for a one-day stint on August 7. He was recalled on September 8 and spent the final three weeks of the season in Atlanta.
Los Angeles Angels
Cunningham was claimed off waivers by the Los Angeles Angels of Anaheim on October 9, 2015. He was outrighted to the minors on April 2, 2016. On June 11, Cunningham was recalled for the first time in 2016. Seven days later, Cunningham was designated for assignment and subsequently sent to the Triple ASalt Lake Bees. He was recalled on July 6, and redesignated for assignment on July 26. Cunningham spent the rest of the season with the Bees.
St. Louis Cardinals/Los Angeles Dodgers
On November 18, 2016, Cunningham signed a minor league deal with the St. Louis Cardinals that included an invitation to spring training. On July 10, 2017, he was traded to the Los Angeles Dodgers for cash. Between the Memphis Redbirds and the Oklahoma City Dodgers he played in 96 games and he hit.284.