Roma survived a grandstand finish from Udinese to seal a Coppa Italia final against Inter Milan for the fifth time in six years.
Mirko Vucinic and Philippe Mexes had given the Giallorossi a 2-0 first-leg advantage and they appeared comfortable for 80 minutes.
But Alexis Sanchez then pulled a goal back and the needless sending-off of Marco Cassetti left his side to withstand an onslaught from the home team. Gokhan Inler hit a post and Bernardo Corradi should have scored, but Claudio Ranieri's 10 men held on.
Simone Pepe was lively for Udinese but endured a frustrating evening in front of goal, and Julio Sergio blocked his early effort.
Mexes brilliantly cleared Antonio Di Natale's cross with Pepe lurking, but home goalkeeper Samir Handanovic was then fortunate to get away with dwelling on the ball as Luca Toni closed him down.
Inler replaced the injured Paolo Sammarco before Kwadwo Asamoah's volley from wide on the left flashed into the side-netting.
Runaway Serie A top scorer Di Natale produced an incredible miss shortly after half-time when he skied Sanchez's low cross over the bar from six yards, and Pepe then curled a free-kick from the left narrowly beyond the far post.
The latter then saw an awkward volley bobble wide as Udinese pressed for a way back into the game - which arrived courtesy of Sanchez in the 81st minute.
Mauricio Isla's excellent long ball was well controlled by the Chile forward, who then held off John Arne Riise and fired through Julio Sergio's legs.
Cassetti's foolish kick at Pepe earned him a second booking and left his side down to 10 for the final seven minutes.
And they were almost made to pay when Inler's thunderous left-foot drive crashed off the woodwork onto the head of the diving Julio Sergio and rebounded wide for a corner.
Fellow substitute Corradi headed over after beating the keeper to a long ball and then saw a diving header saved, and when Christian Zapata's deep cross was steered over by the knee of the leaping Pepe Udinese's last chance had gone.