Born in Lourosa, Pinto played youth football for three clubs, including six years with Boavista FC. In 2008, he joined neighbouring FC Porto, where he turned professional. Pinto did not appear for Porto in the Primeira Liga, featuring as an unused substitute in two games. His only competitive appearance for the first team took place on 4 February 2009, when he came on as an 88th-minute substitute for Andrés Madrid in a 1–4 away loss against Sporting CP in the semi-finals of the Taça da Liga. Pinto was consecutively loaned for the duration of his contract, to Gil Vicente FC, Vitória F.C. and S.C. Covilhã. He made his first top division appearance with the second club, playing five minutes in a 0–2 defeat at precisely Porto on 13 December 2009. In the summer of 2011, Pinto was bought by Rio Ave F.C. but never represented the team, being immediately loaned to U.D. Leiria also of the top level. He started regularly for the side, but the season ended in relegation.
On 30 June 2013, Pinto signed a four-year deal with Croatian club GNK Dinamo Zagreb for a reported fee of €3 million. Upon his arrival, he stated he was aware of all the goals and ready to accept the challenge. Pinto's maiden appearance in the Prva HNL occurred on 12 July 2013, in a 3–1 victory over NK Osijek where he replaced Jerko Leko at half-time. During his two-and-a-half-year tenure, he played 112 matches across all competitions and won the national championship three times.
Pinto joined English club Norwich City on 8 January 2016, for a reported fee of £2.2 million. He made his Premier League debut 15 days later, playing the full 90 minutes in a 4–5 home loss against Liverpool. Pinto scored the first goal of his career on 24 September 2016, in a 3–1 win over Burton Albion also at Carrow Road. They returned to the English top division at the end of the 2018–19 campaign, but he contributed with only three appearances to this feat. In May 2019, Pinto announced he would be leaving Norwich as a free agent on 30 June. During his spell, he took part in 94 official matches.
Return to Dinamo
Pinto returned to Dinamo Zagreb on 10 May 2019, signing a three-year contract. In the following transfer window, he was loaned to newly promoted F.C. Famalicão until the end of the Portuguese top-tier season.
Upon his arrival at Norwich City, manager Alex Neil described Pinto as a "good and athletic" defender. The player viewed himself as an intense and fast full back, whilst his boss at Dinamo Zagreb Krunoslav Jurčić stated that he liked to attack in addition to being "solid defensively".