South Africa have beaten England by one wicket to tie the ODI series at 2-2 and set up a Sunday decider at Newlands.
It was a lacklustre start for England, who had a 2-1 lead heading into this contest, as they went into bat first and lost five wickets for 100 runs.
Jason Roy (6) was the first to go, with the tourists on just 18 runs and despite Alex Hales ticking to a half-century off 55 balls, the batsman was sent packing on his very next ball off Imran Tahir.
Wickets continued to fall as captain Eoin Morgan (2), Ben Stokes (2) and Jos Buttler (1) returned to the pavilion, but Joe Root managed to recover England's attack.
Root was saved by a review while unbeaten on 95 and went on to post his eighth ODI century, which moved him level with Graham Gooch in third place on England's all-time list of centurions.
Chris Morris was the man to end Root's impressive innings as the batsman was caught by Tahir on 109, which he scored off 124 balls.
With two-and-a-half overs to spare, South Africa bowled England out for 262, with Kagiso Rabada taking four wickets.
The Proteas began their innings with a reachable target, but they were dealt a huge blow when Hashim Amla was bowled for a duck by Stuart Broad in the sixth ball.
After a brief halt in play due to floodlight failure, Quinton de Kock and Faf du Plessis resumed on 52-1, but it was not long before the former was sent packing by Stokes on 27 runs.
Woakes got involved in the wickets as he bowled Du Plessis for 34, but South Africa steadied the tack by bringing up 100 after both AB de Villiers and Jean-Paul Duminy were saved by dropped catches.
A significant wicket was taken by England when De Villiers, who was dropped on nine, was run out by Woakes, which sent the batsman off the field having hit 36 runs off 27 balls.
The tourists began to swing the momentum in their direction as they dismissed Duminy (31), Farhaan Behardien (38) and David Wiese (21), leaving South Africa requiring 54 runs with three wickets and 53 balls remaining.
South Africa continued to impress in the latter stages and it was Morris that hit 62 from 38 balls as they reached the target with 16 balls to spare.
Morris was bowled with the penultimate ball of the match to set up a nail-biting finish in Johannesburg, but Tahir hit Rashid for four to seal the victory for South Africa and set up a decider in Cape Town.