Iraqi government forces have entered central Kirkuk after taking key installations outside the disputed city from Kurdish fighters.
Thousands of people fled the city ahead of the Iraqi advance.
The Iraqi military moved into Kirkuk three weeks after the Kurdistan Region held a controversial independence referendum.
They are aiming to retake areas under Kurdish control since Islamic State militants swept through the region.
Residents of Kurdish-controlled areas, including Kirkuk, overwhelmingly backed secession from Iraq in a 25 September vote.
While Kirkuk is outside Iraqi Kurdistan, Kurdish voters in the city were allowed to take part.
Iraq’s prime minister, Haider al-Abadi, had denounced the vote as unconstitutional. But the Kurdistan Regional Government (KRG) insisted it was legitimate.
US officials said they were “engaged with all parties in Iraq to de-escalate tension”, while President Donald Trump said they were “not taking sides”.
“We don’t like the fact that they’re clashing,” he added.
Mr Abadi said in a statement on Monday that the operation in Kirkuk was necessary to “protect the unity of the country, which was in danger of partition” because of the referendum.
“We call upon all citizens to co-operate with our heroic armed forces, which are committed to our strict directives to protect civilians in the first place, and to impose security and order, and to protect state installations and institutions,” he added.
On Monday, the Iraqi military said its units had taken control of the K1 military base, the Baba Gurgur oil and gas field, and a state-owned oil company’s offices.
The government in Baghdad said the Peshmerga had withdrawn “without fighting”. However, clashes were reported to the south, and the sound of gunfire was caught by a BBC cameraman as a team filmed near a checkpoint.
By the afternoon, as thousands of people fled the city fearing impending clashes between the two sides, Iraqi military vehicles were rolling into the heart of Kirkuk. A picture shared on social media appeared to show Iraqi forces sitting in the governor’s office.
Forces pulled down the Kurdish flag which had been flying alongside the national flag, according to Reuters.
Mr Abadi had ordered the flag to fly over all disputed territories.
The speed with which Iraqi forces reached the centre of the city has led the two main armed Kurdish parties to accuse each other of “betrayal”.
The Peshmerga General Command, which is led by President Massoud Barzani of the ruling Kurdistan Democratic Party (KDP), accused officials from the Patriotic Union of Kurdistan (PUK) of aiding “the plot against the people of Kurdistan”.
The PUK denied being part of ordering any withdrawal, saying dozens of their fighters had been killed and hurt, but noted “not even one KDP Peshmerga has been martyred as of yet in the fighting in Kirkuk”.
Meanwhile Turkey, which fears Kurdish independence in Iraq could lead to similar calls from its own Kurdish minority, praised Baghdad, saying it was “ready for any form of co-operation with the Iraqi government in order to end the PKK presence in Iraqi territory”.
The PKK – or Kurdistan Workers’ Party – is a Turkish-Kurdish rebel group which has been fighting for autonomy since the 1980s. It is considered a terrorist group by Turkey as well as by the EU and US.
Kirkuk is an oil-rich province claimed by both the Kurds and the central government. It is thought to have a Kurdish majority, but its provincial capital has large Arab and Turkmen populations.
Kurdish Peshmerga forces took control of much of the province in 2014, when Islamic State (IS) militants swept across northern Iraq and the Iraq army collapsed.
The Iraqi parliament asked Mr Abadi to deploy troops to Kirkuk and other disputed areas after the referendum result was announced, but he said last week that he would accept them being governed by a “joint administration” and that he did not want an armed confrontation.
On Sunday, his cabinet accused the KRG of deploying non-Peshmerga fighters in Kirkuk, including members of the PKK, which it said was tantamount to a “declaration of war”. But KRG officials denied this.