In Tehran, director Arun Gopalan adapts the high-stakes geopolitics of 2012 into a tense espionage drama. The film’s premise is rooted in a real incident: the February 2012 bomb attack near the Israeli Embassy in Delhi, part of a coordinated series of assaults on Israeli diplomats in Georgia, Thailand, and India. Based on a story written by Bindi Karia, with screenplay and dialogues by Karia and Ritesh Shah, the film uses that flashpoint as the launchpad for a fictional covert mission that spans continents and moral boundaries.

At the heart of the narrative is ACP Rajiv Kumar, known as RK (John Abraham), a Delhi police officer described as obsessive by nature and a loose cannon. At the start of the film, RK is focussed on bringing down the Makwana gang, which has threatened his family. But after the bombing of the Israeli diplomat’s car, RK is assigned to investigate the attack.

Also Read | ‘Saare Jahan Se Accha’ review: Netflix spy series leads with the wrong person

The deadly car-bombing sequence—executed with emotional, dramatic and cinematic intensity—sets off RK’s vendetta. As the mission stretches from Delhi to Georgia, the UK, Abu Dhabi, and finally to Tehran, it becomes clear that this is not just a spy game—it’s about the messy entanglements of global politics, energy deals, and fractured alliances.

The screenplay smartly incorporates geopolitics: where Israel provides valuable technology to India, Iran is a key oil supplier. But an imminent oil deal between Iran and India is at risk if RK is not stopped in time. RK is chasing Iranian operative Afshar Hosseini (Hadi Khanjanpour), who is directly tied to the Delhi bombing. The stakes are more than personal, and RK finds himself trapped in the age-old logic of covert warfare. As he says, “You kill theirs, they kill yours. No one is clean here.”

John Abraham lives the part, delivering a performance that balances focus and motivation with sensitivity and thought. When RK defies both departmental and government orders to infiltrate Tehran, the film briefly picks up pace and urgency. Dinker Sharma’s Vijay, RK’s colleague, deserves special mention. The cast also includes Alyy Khan as DCP Neeraj of the Special Cell and Neeru Bajwa as R&AW officer Sheilaja, Manushi Chhillar is cast as S.I. Divya Rana, an underwritten and underutilised agent, Quashik Mukherjee plays agency head Mr. Himadri and Madhurima Tuli as RK’s wife.

From a production standpoint, Tehran excels in world-building, aided by Ievgen Gubrebko and Andre Menezes’ cinematography and Bishwadeep Dipak Chatterjee’s sound design, lending weight to action set-pieces and political exchanges alike. The casting of Iranian and Israeli characters feels authentic, and the film benefits from being shot in the UK and India.

However, while the film starts briskly and builds steadily, and the second act expands the moral stakes, the third act—when events should escalate—slackens. A late-film car chase and gunfight is oddly scored with an ill-fitting song, draining tension from what should be a pulse-pounding moment. The reduced urgency means the climax doesn’t hit as hard as its setup promises.

Tehran is an ambitious political thriller with credible world-building that doesn’t simplify geopolitical realities into easy heroes and villains. If one is able to overlook the few flaws, Gopalan’s film is occasionally gripping, offering an un-bombastic take on patriotism while acknowledging the complicated, transactional nature of international alliances and the ethical complexities of espionage.

Also Read | ‘Coolie’ review: Not enough Lokesh Kanagaraj in Rajinikanth’s latest