After rattling India's top order on the opening day, Sri Lanka pace spearhead Suranga Lakmal returned to claim another wicket to end with fine figures of 19-12-26-4.
Lahiru Gamage, Dasun Shanaka and Dilruwan Perera also dished out superb bowling performances, snapping two wickets apiece to bring an end to India's first innings in 59.3 overs.
This was India's second lowest score against Sri Lanka at home after the hosts were dismissed for 167 at Chennai in December 2005. It is only the second time the islanders have dismissed India below 200.
Coming out to bat at an overnight score of 47, Cheteshwar Pujara (52 off 117, 10x4) completed his half-century in the morning but could not make it big after being cleaned up by Gamage (2/59) with a superb in-cutter.
Wriddhiman Saha (29 from 83 balls; 6X4) and Ravindra Jadeja (22 from 37 balls; 2x4, 1x6) produced a brisk 48-run seventh wicket partnership but off-spinner Perera (2/19) struck twice in space of three ball to remove both of them.
Perera broke the partnership as the tourists successfully used a review to overturn the decision of Joel Wilson who stood in for Richard Kettleborough who is down with a throat infection.
Jadeja was trapped in line but was given not out by the umpire as it seemed that the ball might have nicked the bat first but the review made it clear that there was pad first and the lefthander had to walk back to the pavillion.
Two balls later, Saha got out with a faint edge which was taken by Angelo Mathews at the first slip as India reviewed unsuccessfully.
Bhuvneshwar Kumar (13 from 17 balls; 1x4) and Mohammed Shami (22 off 24 balls; 3x4) made some quick runs and the latter was involved in a 26-run last wicket partnership with Umesh Yadav (6 not out) to prop India's total.
Earlier resuming on 74/5 in 32.5 overs after two rain- truncated days, India went about their task with Pujara bringing up his 16th half-century.
Sun began to shine and the resolute Pujara showed India the way as he swept left-arm spinner Rangana Herath through fine leg in the fourth ball of Sri Lanka's seniormost bowler.
Overnight six, Saha gave Pujara a fine support and looked in good nick with his offstump guard outside the popping crease.
It was in fifth over of the day, Gamage gave the day's first breakthrough when he cleaned up Pujara with a beauty.
The ball sharply cut in sneaking through Pujara's solid defence as the most dependable Indian batsman looked clueless as his long innings came to an end in the 38th over.
With Jadeja in the middle, India's run-rate began to rise as the left and right-handed duo started scoring briskly and the Indian allrounder slammed the first six, slamming Perera over long-on.
It was India's consolidation phase and to make it worse for Sri Lanka, wicketkeeper Dickwella missed an easy stumping when Saha was on 25 in the 50th over.
The Indian duo however could not make it big as the offspinner evicted both of them in space of three balls before Shami's quickfire cameo took them to 172.
Gamage brought India's innings to a close at 59.3 overs, six minutes ahead of the scheduled lunch time after dismissing Shami, who was caught at deep midwicket.