KL Rahul struck his seventh Test century to guide India into a strong position on the opening day of the first Test against South Africa at Centurion.
Rahul ended the day unbeaten on 122, having shared a 117 partnership with fellow opener Mayank Agarwal (60) as the tourists posted 272-3 after winning the toss.
South Africa vs India scorecard
Lungi Ngidi (3-45) captured all three wickets to fall, including two in as many deliveries, but overall it was a day of toil for the Proteas' bowling attack.
The home side handed a debut to left-arm seamer Marco Jansen, who endured a testing introduction to Test cricket, with his opening delivery a juicy full toss that Mayank punched to the cover boundary.
Jansen was denied his maiden Test wicket when Mayank, on 36, edged him behind, but the diving Quinton de Kock was unable to hold on and the opening pair continued to make solid progress either side of lunch.
Ngidi made the breakthrough, pinning Mayank on the back foot and, although the initial lbw appeal was rejected, the Proteas' review proved successful as the TV replay showed the ball clipping leg stump.
The seamer struck again immediately, with Cheteshwar Pujara's inside edge onto his pad sailing into the hands of short leg and bringing Virat Kohli to the crease to prevent the hat-trick delivery.
Having done that, Kohli looked in good touch with a knock of 35 as he and Rahul added 82 - but the India captain then became bogged down and chased a wide ball from Ngidi that was safely pouched by Wiaan Mulder at first slip.
Ajinkya Rahane raised the scoring tempo, though, launching a flurry of sweetly-timed boundaries and keeping Rahul company while the opener completed his hundred by steering Keshav Maharaj through point for four.
Rahane rattled up a brisk 40 not out, with the new ball bringing no joy for South Africa as the partnership reached 73 at stumps.
Watch day two of South Africa vs India on Monday, live on Sky Sports Cricket from 7.30am.