Farveez Maharoof's five wicket haul - including a sensational hat-trick - helped Sri Lanka restrict India to 209 all out in their Asia Cup dead rubber in Dambulla.
Rohit Sharma played a fighting innings of 69, but did not get support from his team-mates to help the visitors post a challenging total.
Openers Dinesh Karthik and Gautam Gambhir gave a steady start to their side.
They mainly dealt in ones and twos and dispatched lose deliveries for fours.
Karthik brought 50 up for the visitors with consecutive boundaries off Maharoof in the 11th over.
Gambhir (23) lost his wicket to Angelo Mathews in the next, thanks to a stunning diving catch by Suraj Randiv at short midwicket.
Virat Kohli (10) did not last long either as Maharoof dismissed him in the 15th over.
Karthik (40) and Suresh Raina (18) could not convert their starts into big scores and fell in the following overs, leaving skipper Mahendra Singh Dhoni and Sharma to steady the ship.
The duo responded to the challenge and brought 150 up for their side in the 31st over.
Sharma reached his half-century in the 37th over, but lost his partner in the next.
Dhoni tried to steal a quick single but fell short of his ground as Chamara Kapugedara broke the bails.
Maharoof made further inroads with a hat-trick and broke the spine of the Indian batting order.
The paceman did not let Ravindra Jadeja, Praveen Kumar and Zaheer Khan open their accounts, completing his achievement as the latter edged through to Kumar Sangakkara.
Ashok Dinda became the bowler's fifth victim soon after, leaving India in dire straits.
Sharma ran himself out in order to keep the strike as India were bowled out with more than seven overs to spare.