India overcame a gallant century by Sri Lankan captain Angelo Mathews to win their final Test by 117 runs on Tuesday and end a 22-year wait for a series win on the island.
The hosts, set a victory target of 386, were bowled out for 268 after tea on the fifth day at the Sinhalese Sports Club in Colombo to hand the tourists a 2-1 series scoreline.
Sri Lanka were revived by a 135-run stand for the sixth wicket between Mathews and debutant Kusal Perera, but the dismissal of both batsmen on either side of tea sealed their fate.
Kohli celebrates the series win // Getty
Off-spinner Ravichandran Ashwin finished with 4-69 to complete the series with 21 wickets.
Seamer Ishant Sharma took three wickets in the innings, including the vital scalp of Mathews after tea, to take his tally to 200 wickets in his 65th Test.
India fought back after losing the opening Test in Galle by 63 runs to win the second at the P. Sara Oval in Colombo by 278 runs and then took the enthralling final Test in the last session of play.
India's last series success in Sri Lanka came under Mohammad Azharuddin's captaincy in 1993 when they won 1-0.
Sri Lanka had slipped to a shaky 5-107 before lunch when Mathews and Perera joined hands to bat out a major part of the afternoon session and lift the hosts to 6-249 by tea.
Mathews made 110, his seventh Test century and the second in successive matches after scoring 102 in the second Test, before he was leg-before to Sharma in the first over after tea with the second new ball.
Left-handed Perera followed his 55 in the first innings with 70, becoming only the second Sri Lankan after Dinesh Chandimal to score two half-centuries in his debut Test.
Perera looked set for a bigger score when he was dismissed shortly before tea, playing a reverse sweep off Ashwin straight to Rohit Sharma at point.
India grabbed the last five wickets for 26 runs after Sri Lanka were sailing at a comfortable 5-242 before Perera's dismissal.
Sri Lanka began the final session with a reasonable hope of surpassing the difficult target - needing 137 runs more with a possible 36 overs remaining - but India tightened the screws after tea to emerge victorious.
The tourists grabbed two key wickets on the fifth morning when Sri Lanka resumed at the overnight score of 3-67.
Sri Lanka added seven runs when they lost opener Kaushal Silva for 27, caught at mid-wicket by Cheteshwar Pujara attempting to hook Umesh Yadav.
Left-hander Lahiru Thirimanne made 12 when an alert Lokesh Rahul at silly point pounced on the ball and held it on second attempt as a delivery from Ashwin found an outside edge.
Mathews reached his century by pulling medium-pacer Stuart Binny for his 12th boundary and celebrated the feat by driving the next ball to mid-on for another four.
Disappointed about the series results and top order should done have much better than this.— Sanath Jayasuriya (@sanath07) September 1, 2015