Attending American Heritage High School, James recorded 78 goals and 168 assists during his school career. He then attended the University of Virginia for two years, where he scored four goals in 35 appearances. During his college career, James took a wealth of accolades, including a place in 2014 College Sports Madness All-Big Ten Second Team. He was named two-time ESPN Rise All-American First Team in 2011 and 2012, as well as Florida's 2012 Gatorade Player of the Year. He was crowned Palm Beach Player of the Year in 2010, 2011 and 2012, having guided his school to become FHSAA State Champions twice in three years. James was also Sun-Sentinel Player of the Year on two occasions. While studying, James played club football for Weston from 2010 to 2012. It was during this time he was chosen to feature in the United States Under-18 National Team camp, and named in the USSF Academy Starting XI Southern Conference side three times. He moved to Pennsylvania State University in 2014 for a further two years, where he scored four goals in 38 appearances.
Professional
James was drafted in the fourth round, 80th overall, in the 2016 MLS SuperDraft by Toronto FC on January 19, 2016. On March 24, 2016, it was announced that he would join affiliate team Toronto FC II ahead of the 2016 USL season. He made his debut in a 2–2 draw with New York Red Bulls II two days later. He was called up to the Toronto FC squad later in the season, and made his debut in the Canadian Championship on June 2, 2016. He replaced Daniel Lovitz for the final six minutes of the 4–2 semi-final first leg win over Montreal Impact. In mid 2018 James was signed by Miami FC 2, the National Premier Soccer League side of Miami FC, and was made his debut for the team in its June 27 match against Naples United FC as a 90th minute substitution. He played put the remainder of the regular season with the team and made four appearances in the playoffs as Miami went on to win the NPSL National Championship. The team, now playing under the name "Miami FC," repeated as champions the following season and James scored his first goal with Miami on June 1, 2019 against Storm FC in a 10-1 win. On July 24, Miami FC was accepted into the National Independent Soccer Association ahead of its inaugural season. James remained with Miami during this transition as the team went undefeated during the Fall season. On November 9, James started in the NISA East Coast Championship against Stumptown Athletic which Miami won, 3-0, for its ninth trophy in three years. Miami announced it would be joining the USL Championship in December 2019 and later announced James was re-signed for his third season with the club.