Gerald Coetzee and Simon Harmer took three wickets apiece as the West Indies faltered in quest of an improbable target of 391.
The West Indies were bowled out for 106. South Africa won the two-match World Test Championship series 2-0.
The teams will now play a three-match ODI series starting in East London on Thursday, which will be followed by three Twenty20 International fixtures.
The match was more or less decided in 8.1 overs leading up to lunch when the West Indies reduced to 34 for six.
Fast bowler Kagiso Rabada struck twice in three balls and sparked the collapse after opening batsmen Kraigg Brathwaite and Tagenarine Chanderpaul survived the first 10 overs, putting on 21 runs.
Rabada dismissed Brathwaite for the seventh time in successive innings when he trapped the West Indian captain leg before wicket for 18 with a ball which kept low.
Two balls later Raymon Reifer gloved a catch down the leg side to wicketkeeper Heinrich Klaasen.
Spinners Simon Harmer and Keshav Maharaj also took two wickets each as the West Indies lost six wickets for 13 runs.
Off-spinner Harmer shared the new ball with Rabada and extracted extravagant turn, having Chanderpaul caught at second slip after the left-hander had faced 36 balls and scored only two runs.
Roston Chase, Jermaine Blackwood and Kyle Mayers all fell cheaply with South Africa’s only setback coming after Maharaj won a successful appeal for leg before wicket against Mayers in the last over before lunch.
In celebration, the left-arm spinner collapsed and was stretchered off the field with a left ankle tendon injury.
Maharaj was taken for a scan. With all-rounder Wiaan Mulder suffering a right index finger injury, which also required a scan, South Africa were effectively down to three frontline bowlers. The West Indies batting, though, had already been wrecked.
Mulder returned after lunch but was not required to bowl.
Joshua Da Silva, Jason Holder and Alzarri Joseph all played some aggressive strokes after lunch as the last four wickets yielded 72 runs before the match ended soon after the afternoon drinks break.
There had been concerns about Rabada’s fitness after he suffered back pain during the first innings but he showed no signs of discomfort during a hostile seven-over spell.
South Africa were bowled out for 321 earlier, with captain Temba Bavuma adding only one run to his overnight 171 before he was caught at deep square leg off Holder.
(With inputs from AFP)