The contract will have a player option for the fourth season.
On Monday, Joseph tweeted a thank you to the Spurs organization, writing that San Antonio "will always be close to my heart."
A sincere thank you to all the fans, RC, Coach Pop and the entire Spurs organization for all the (cont) http://t.co/2GktH0gc6V— Cory Joseph (@Cory_Joe) July 6, 2015
The deal was made possible after the Spurs pulled a qualifying offer to Joseph Sunday, making him an unrestricted free agent in an effort to generate cap space to sign LaMarcus Aldridge.
The move to Toronto represents a homecoming for the 23-year-old Joseph, who was born in Toronto.
Joseph put together a breakout season in 2014-15 for the Spurs, playing in 79 games and posting career bests in almost every major statistical category. Joseph connected on 50.4 percent from the field and hit 36.4 percent of his 3-point attempts, while averaging 6.8 points, 2.4 rebounds and 2.4 assists per game.
According to Basketball-Reference.com, Joseph recorded an offensive rating of 115 and a 104 rating on defense.
ESPN.com's Michael C. Wright contributed to this report.