The visitors were ahead less than two minutes into the tie as Oscar Trejo crossed the ball in from a free kick out wide, leaving Issa Diop to head the ball in at the far post from just a couple of metres out.
Toulouse came close to doubling their advantage midway through the first half as Martin Braithwaite attempted to tap the ball in from a Jean-Daniel Akpa-Akpro cross, only to miss the target, while Wissam Ben Yedder was denied by Paul Bernardoni.
The home side continued to create chances down the other end as they tried to get back on level terms, but Lossemy Karaboue's long-range strike was tipped behind, before Thomas Ayasse nodded the ball straight at the keeper from the resulting corner.
It did not take Toulouse long to double their advantage in the second half as Ben Yedder played the ball through the middle to Akpa-Akpro, who hit the ball first time to pick out the bottom right corner.
Troyes started to dominate the action as they sought a way back into the tie, but Stephane Darbion and Karaboue both had efforts saved, while Benjamin Nivet was denied while trying to head in from close range, before putting the rebound wide.
The visitors' hopes of holding on to their two-goal cushion were dealt a blow inside the final half-hour as Marcel Tisserand was booked for the second time, reducing Toulouse to 10 men.
It was just over 10 minutes before Troyes also found themselves a player short, with Darbion picking up two bookings in the space of seven minutes to earn himself an early exit.
With the sides even again, Toulouse were able to keep possession to run down the remaining time, before Akpa-Akpro spotted a chance to play a ball through to Aleksandar Pesic in the final moments, setting him up to rifle in from the centre of the box.
Despite the win, Toulouse remain in the relegation zone on goal difference, while Troyes stay bottom of the table, still looking for their first win of the season.