Ngidi (6/39) was the chief destroyer in the second innings, while Kagiso Rabada (3/47) took all of the other wickets barring a run-out.
Ngidi took 1/51 in India's first innings, giving his match analysis of 7/90 on his debut.
Ngidi took four wickets on Wednesday morning, adding to the two he had already snapped up on Tuesday evening.
The 21-year-old debutant, on his home ground, has burst onto the Test scene and this match belongs to him.
Having removed Virat Kohli on Tuesday, Ngidi picked up where he left off on day five and bowled with pace and accuracy as India's batsmen could not get a handle on the youngster.
Starting the day 35/3 and with Virat Kohli back in the hut, India needed something special to stay chase down the 287 required to stay alive in the series.
Former Proteas skipper Shaun Pollock had said before the day’s play that he feared the role that Cheteshwar Pujara would play on the final day, and his wicket was considered crucial to the South African cause.
Having run himself out in bizarre fashion in the first innings Pujara, who has a reputation for playing long innings, owed his side a serious contribution.
Instead, another moment of madness from the Indian No 3 saw him run out again in equally unnecessary fashion.
Off the bowling of Vernon Philander, Parthiv Patel squeezed the ball through gully and set off for what looked a comfortable two runs.
Ngidi made the sliding stop on the boundary and pulled the ball back, and then for some reason Pujara decided to take on the dangerous arm of AB de Villiers for the third.
Quinton de Kock whipped the bails off in neat fashion, and numerous replays revealed that Pujara (19) was just short of his ground.
It was the worst possible start for India, who were reduced to 49/4 in their chase.
Patel (19) had looked in decent touch, but when he went after a short one from Kagiso Rabada he found Morne Morkel on the fine leg fence.
The lanky 33-year-old rolled back the years, making some serious ground running to his right before pulling off an acrobatic dive by a fast bowler’s standards.
The celebration that followed was quality, with Morkel looking more surprised than anyone.
Hardik Pandya was next to go, becoming Ngidi’s third victim of the innings.
The shot summed up India. The ball was short and wide, but Pandya threw his bat at it half-heartedly. De Kock took an impressive one-handed catch high above his head, and India had lost their third of the morning.
It was then a matter of ‘when’ and not ‘if’ South Africa would get the win, and when Ravichandran Ashwin became Ngidi’s fourth, India were dead and buried at 87/7.
There was some sound resistance in the form of the under-pressure Rohit Sharma (47) and Mohammed Shami - the pair getting to their 50-partnership off just 50 balls.
But when Sharma was out hooking Rabada to De Villiers at fine leg, it was curtains for India.
Ngidi then had his fifth when Shami (28) was out at mid-on looking to clear the in-field, and when he removed Jasprit Bumrah for 2 to bring the match to an end, he emerged as South Africa's second-Test hero with India all out for 151.
Last modified on 17/01/2018