But India might have expected to finish with a higher total, having been 181 for two heading into the final 10 overs on Tuesday.
Tendulkar's innings left him just 50 runs away from becoming the first batsman in history to score 15,000 one-day international runs - a landmark he could reach during the two remaining games of this series.
However, in sight of what would have been his 42nd hundred at this level, the 34-year-old Tendulkar was run out, going for an ill-judged second, by cover sweeper Morne van Wyk's throw to wicket-keeper Mark Boucher.
Tendulkar, together with India captain Rahul Dravid (74), put on 158 for the third wicket in 32 overs after fellow opener Sourav Ganguly and Gautam Gambhir had fallen cheaply to Andre Nel.
The fast bowler led South Africa's attack with three wickets for 47 runs.
Nel was in for Dale Steyn in one of three changes to the South Africa side that beat Ireland by 42 runs here Sunday - the others saw Andrew Hall replace all-rounder Justin Kemp and Charl Langeveldt take the place of off-spinner Thandi Tshabalala.
After India had declined to 36 for two, Tendulkar rallied his side by driving Langeveldt square through the offside off the backfoot for four.
He then struck him straight down thre ground for a textbook boundary to the delight of a vocal group of Indian fans.
Medium-pacer Langeveldt proved expensive, his eight overs costing 59 runs.
Vernon Philander had marked his one-day international debut, and his 22nd birthday, by taking four for 12 against Ireland but he was up against a different class of batsmen now.
Nevertheless he bowled two maidens in his first three overs on his way to fugures of none for 37 in eight.
Tendulkar completed his fifty with a single off Kallis in 95 balls with six fours, Dravid getting there in 71 balls with just three fours.
But having been well set for a late assault, India lost six wickets for 61 runs in the last 10 overs.
Dravid played on to a Nel yorker, Tendulkar exited and Yuvraj Singh (13) drove Hall straight to Kallis at mid-on.
Wicket-keeper Dinesh Karthik hit back by launching Langeveldt over wide mid-wicket for the first six of the innings before falling to Hall and then South Africa captain Jacques Kallis picked up two cheap wickets late on.
India, whose squad had been struck down by the effects of viral flu on the eve of this match, made two changes to the team that beat Ireland here on Saturday by nine wickets.
Off-spinner Ramesh Powar came in for all-rounder Ajit Agarkar and left-arm quick Zaheer Khan replaced fast bowler Shanthakumaran Sreesanth.