Fast bowler Jayden Seales took six wickets as South Africa were bowled out for 246 on Saturday, leaving West Indies a target of 263 runs to win the second Test.
Resuming on the third day on 223-5 in their second innings, top scorer Kyle Verreynne was eventually dismissed for 59.
He was one of Seales' 6-61 as the 22-year-old quick completed a match haul of nine wickets.
The first Test in Trinidad ended in a rain-affected draw.