For days Iran had denied that it brought down the plane on January 8, although a top Revolutionary Guards commander said on Saturday that he told authorities about the unintentional missile strike the day it happened.
Foreign governments condemned Iran's action, with Ukraine demanding compensation and a US official calling the downing reckless, although Britain said Tehran's admission was an important first step and urged a de-escalation in tensions.
Canadian Prime Minister Justin Trudeau, whose country had 57 citizens on board the airliner, said Iran must take full responsibility and be held accountable.
"What Iran has admitted to is very serious. Shooting down a civilian aircraft is horrific. Iran must take full responsibility," Trudeau told reporters at a news conference in Ottawa.
"Canada will not rest until we get the accountability, justice, and closure that the families deserve."
Ukrainian President Volodymyr Zelenskiy said Iran's acknowledgement that it shot down the plane was a step in the right direction but he wanted those responsible to be held to account.
Writing on Twitter after speaking to Rouhani, Zelenskiy demanded that the victims be identified and returned to Ukraine at once. "The perpetrators must be held accountable."
Zelenskiy said Rouhani had apologised on behalf of his country.
There have been anti-government protests in Tehran on Saturday, as people chanted slogans against the nation's top authorities.
A British envoy to Tehran was arrested for several hours in front of Amir Kabir University for inciting anti-government protesters, the Tehran-based Tasnim news agency has reported.
Iranian Supreme Leader Ali Khamenei, until now silent about the crash, said information about the incident should be made public, while top officials and the military issued apologies. Up to 1000 protesters chanted slogans in Tehran against the authorities, the semi-official Fars news agency said in a rare report on anti-government unrest.
Demonstrators ripped up pictures of Qassem Soleimani, a prominent Iranian military commander who was killed in a US drone strike in Iraq on January 3. Iranian strikes on US targets on Wednesday in retaliation for the killing led to the country being on a state of high alert for possible reprisals in the hours when the plane was downed.
On Twitter, videos showed protesters demanding that Khamenei should step down because of the disaster.
"Commander-in-chief resign, resign," hundreds chanted in front of Tehran's Amir Kabir university. Reuters could not verify the video footage.
The crash heightened international pressure on Iran after months of friction with the United States and tit-for-tat attacks.
Canada and the United States had both said early on that they believed an Iranian missile brought down the aircraft, probably in error.
"The Islamic Republic of Iran deeply regrets this disastrous mistake," President Hassan Rouhani wrote on Twitter, promising that those responsible would be prosecuted. "My thoughts and prayers go to all the mourning families."
Experts said mounting international scrutiny would have made it all but impossible to hide signs of a missile strike in any investigation and Iran may have felt a U-turn was better than battling rising criticism abroad and growing grief and anger at home, as many victims were Iranians with dual nationality.
'FIRST STEP'
In Twitter messages, angry Iranians asked why the plane was allowed to take off with tensions in Iran so high.
The plane, a Boeing 737-800 en route for Kiev, came down shortly after take-off from Tehran, when Iran was alert for US reprisals after launching rockets at US troops in Iraqi bases.
A senior Trump administration official, who spoke on condition of anonymity, said that "Iran's reckless actions have again had devastating consequences."
British Prime Minister Boris Johnson said Iran's admission was "an important first step" and that it was "vital that all leaders now pursue a diplomatic way forward" to avoid conflict.
Trudeau earlier in the day called for "a complete and thorough investigation" with Iran's full cooperation.
RARE APOLOGY
Iran's Revolutionary Guards, in a rare step, apologised to the nation and accepted full responsibility.
Senior Guards commander Amirali Hajizadeh said he had informed Iran's authorities on Wednesday about the unintentional strike, a comment that raised questions about why officials had publicly denied it for so long.
Speaking on state television, he said he wished "I could die" when he heard the news about the incident.
Iranian Foreign Minister Mohammad Javad Zarif wrote on Twitter that "human error at time of crisis caused by US adventurism led to disaster", citing an initial armed forces investigation into the crash.
A military statement said the plane flew close to a sensitive Revolutionary Guards site at a time of high alert. Ukraine said the plane was in a normal flight corridor and Iran's Civil Aviation Organisation said the airliner had not veered off its normal course.
Ukraine International Airlines said Iran should have closed the airport. The carrier said it had received no indication it faced a threat and was cleared for take off.
European airlines should avoid Iranian airspace until further notice, the EU Aviation Safety Agency said, expanding on earlier advice that airlines should not overfly Iran below 25,000 feet.
Analysts said a probe would almost certainly have revealed signs on the smashed fuselage of a missile strike.
"There's nothing you can do to cover it up or hide it," said Anthony Brickhouse, an air safety expert at Embry-Riddle Aeronautical University and former US National Transportation Safety Board investigator. "Evidence is evidence."
The disaster echoed a 1988 incident, when a US warship shot down an Iranian airliner, killing 290 people. Washington said it was an accident. Tehran said it was intentional.