The fifth and deciding match will be played Saturday.
The West Indies lost left-arm spinner Fabian Allen to a shoulder injury suffered in the field as they defended their total of 167-6.
Dwayne Bravo stepped up and took 4-19, including the crucial wicket of Quinton de Kock for 60, as the West Indies restricted South Africa to 146-9.
Captain Kieron Pollard also played a vital role with the ball to compensate for Allen’s loss, taking 1-24 from his four overs.
Andre Russell had an increased workload, taking 2-20 and self-declared “Universe Boss” Chris Gayle failed with the bat but claimed the wicket of Proteas opener Reeza Hendricks with his first delivery and finished with 1-11. Gayle also took two catches.
"Chris (Gayle) bowling that one over and getting a wicket... sometimes you take a chance and it works," said Pollard, who was man of the match.
Pollard said with Allen out of action with a dislocated shoulder "straightaway we had to make up some overs.
"In the first couple of games I didn’t bowl much," he said, "then I bowled in the last game. It was a matter of trying to use a lot of experience. Having (Bravo) and Obed McCoy continuing to do well for us and having Andre Russell coming into the game today and bowling his four overs and getting a couple of wickets... I think it was crucial for us.
"It was a total team effort from us, so let's see what happens on Saturday."
For the first time in the series, South Africa won the toss Thursday and was able to ask the West Indies to bat.
The home team was in trouble at 101-6 in the 15th over before the flagging innings was rescued by an unbroken 66-run partnership for the eighth wicket between Pollard and Allen.
Pollard struck a half century from 24 balls, including five sixes, and finished 51 not out. He took three sixes among 25 runs from the 19th over which was almost the difference between the teams.
Allen played an important supporting role, scoring 19 from 13 balls as the West Indies shored up their innings in the last five overs.
"I didn't face many deliveries in the last couple of games, so I tried to give myself a chance and being there at the end is something that I’ve done time and time again," Pollard said.
The West Indies total was par for the series. In the first match South Africa made 160-6 batting first, in the second it made 166-7 and in the third 167-8.
As long as de Kock was at the crease, South Africa seemed in with a chance of winning the match and the series. It would be South Africa’s first win in a T20 series in two years.
De Kock batted until the 18th over, taking his 63 runs from 43 balls. South Africa needed 50 runs off the last 25 balls, a not insurmountable task.
But when de Kock steered a wide delivery from Bravo directly to Lendl Simmons at point, the Proteas’ chase was all but over. After de Kock, the next best effort for South Africa was Aiden Markram’s 20. (AP)