Despite having goal-scorer Nicolas Pallois sent off with 27 minutes left, Bordeaux triumphed over their local rivals to join fellow Ligue 1 clubs Lorient, Bastia and Caen in the next round of the French knockout competition.
Toulouse struck with just six minutes left to give themselves slim hope of forcing extra time in front of their home fans but they could not find another two goals, losing their third straight match in all competitions, while they have not beaten Bordeaux at home since 2011.
Pallois gave Bordeaux the lead in the 17th minute with a header, while Diego Contento made it 2-0 by half-time with a volley from Mariano's cross after 24 minutes.
Bordeaux suffered a blow in the 63rd minute when Pallois received his second yellow card but the visitors struck again just five minutes later with Cheick Diabate bursting onto Wahbi Khazri's pass, before cutting inside to curl a shot past Toulouse goalkeeper Marc Vidal.
Jean-Daniel Akpa Akpro pulled a goal back for Toulouse in the 84th minute with a close-range header but it meant little in the end as Bordeaux progressed.
Lorient and Bastia defeated Evian TG 2-1 and Auxerre 3-1 respectively to advance, while Caen came from behind twice to trump Ligue 2 club Clermont 4-3 in extra time thanks to Mathieu Duhamel's 121st-minute goal.
Top-tier clubs Lens, Montpellier and Reims all lost, with the latter falling to Arles, who are in the relegation zone of Ligue 2.
Reims led 1-0 and forced extra time with a goal in the 90th minute after Arles had claimed a 2-1 lead with 10 minutes remaining.
But Fawzi Ouaamar's goal in the 102nd minute saw the second-tier visitors triumph, despite having Samuel Gigot sent off 11 minutes earlier.
Ajaccio defeated Montpellier 1-0 and Creteil won 2-0 over Lens, while in the other round of 32 tie, Nantes thrashed Laval 4-0.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.