The so-called Islamic State (IS) was behind a series of explosions and gun attacks in the capital Jakarta, an IS-linked news agency and police say.
At least two civilians and five attackers died in the assaults, described as an attempt to mimic the deadly Paris attacks.
Security forces battled militants for hours, with the attacks centring on a major business and shopping district.
It follows warnings late last year that Islamists were planning a major attack.
“Islamic State fighters carried out an armed attack this morning targeting foreign nationals and the security forces charged with protecting them in the Indonesian capital,” the IS-linked news agency Aamaq reported.
Jakarta Police chief Tito Karnavian said Indonesian national Bahrun Naim, currently thought to be in Syria, had been “planning this for a while”.
National police spokesman Anton Charliyan said the perpetrators had “imitated” the Paris attacks, saying the authorities suspected a local group affiliated to IS. It is not clear who he was referring to.
He said police had received warnings in November from IS they were planning a “concert in Indonesia”, meaning an attack.
Two of the attackers were killed in a suicide bombing, police said, with the other three killed in gun battles with police.
A Canadian and an Indonesian national also died.
Indonesian President Joko Widodo has called on his country not to be defeated by “these acts of terror”.
Several foreign governments advise caution while visiting Indonesia, with the UK Foreign Office urging its nationals to “maintain vigilance” after the attacks.
The assault began late morning local time, when blasts struck near a Starbucks cafe and police security post, in an area close to embassies and government buildings.
“There was lot of commotion, a lot of craziness,” said Rob Phillips, an English teacher who lives in the area.
“We heard a large bang. We thought it was thunder because the storms here are pretty big.”
Gunmen fled to the Djakarta Theater, part of the same complex that houses the Starbucks, where a standoff developed with police.
Explosions and gunfire rang out for hours before police declared the situation under control.
Bodies of the militants killed were left sprawling in the street. Police said 20 people were injured in the attacks, including five police officers.
Indonesia was on high alert over the new year period after threats from the so-called Islamic State (IS).
Up to 200 Indonesians are estimated to have gone to Syria to fight with IS.
Indonesia is the world’s most populous Muslim nation but is largely secular, although in recent years the threat of radicalism has remained high as small networks of militants are still thought to be operating in the country.