A bus plunged off a bridge into a ravine and caught fire on Thursday in Limpopo, killing 45 of the 46 people on board, the transport ministry said.
An eight-year-old child was the sole survivor and had been taken to hospital with serious injuries.
The vehicle had been heading from neighbouring Botswana to Moria in Limpopo.
"It is alleged that the driver lost control, colliding with barriers on the bridge causing the bus to go over the bridge and hit the ground, where it caught fire," a statement from the Transport Ministry said.
Rescue operations had continued till late with some bodies burned beyond recognition, and others trapped inside the debris or scattered over the crash scene.
The bus had a Botswana licence plate, local authorities said, but the passengers' nationalities were still being checked.
Transport Minister Sindisiwe Chikunga went to the crash scene and promised a full inquiry would be held into its cause.
The bus fell from a major bridge linking two hillsides near Mmamatlakala in Limpopo province, around 300 kilometres north of Johannesburg.