Retvenko, a Grisha Squaller indentured in Ketterdam, drinks at a tavern before reporting for a ship voyage, dreaming of returning to Ravka. At the harbour, mysterious Shu attackers with wings and metal-reinforced bodies destroy the ship, kill the crew, and abduct him into the sky.
Wylan, disguised with Kuwei's face, poses as a waiter at Club Cumulus while Jesper plays cards and Nina distracts the lawyer Cornelis Smeet as part of Kaz's plan. After Kaz and Wylan break into Smeet's office to find Jan Van Eck's secret properties, Kaz discovers where Inej is being held and hints at information about Wylan's mother.
Matthias watches Kaz return the stolen whistle to Smeet with masterful sleight of hand, and they retreat to the Black Veil hideout. The crew debates what to do with Kuwei while Kaz outlines a plan to take thirty-one million kruge from Van Eck. They learn Matthias is supposedly dead after Muzzen, who took his place in Hellgate, was murdered, and that Jesper's father has arrived in Ketterdam.
Inej, held captive by Van Eck on Eil Komedie, attempts to escape through a vent but discovers it was a trap. Van Eck threatens to shatter her legs with a mallet, and only her desperate argument that Kaz would not trade for a broken hostage stays his hand. She endures the terror while maintaining her resolve to survive.
Jesper and Wylan travel to the university to meet Jesper's father, Colm Fahey, whose loan has been called in. Their reunion is cut short when gunmen ambush them, and they escape through a secret passage in the rare books room that Wylan knows. Jesper is wounded but manages to protect his father.
Nina struggles with parem withdrawal, privately desperate for the drug while maintaining composure in front of the crew. Colm is brought to Black Veil and Kaz smoothly covers for Jesper's lies about the farm money, promising to recover the debt. The crew prepares for the midnight raid on the lake house to rescue Inej, with Nina anxious about whether her diminished Grisha powers will hold up under pressure.
Van Eck reveals he used Inej as bait, having let her location be discovered to lure Kaz into a trap with thirty armed guards. But when a messenger reports that Kaz kidnapped Alys Van Eck from the lake house instead, Inej laughs and headbutts Van Eck, breaking his nose. She taunts him with the terrors that Dirtyhands' reputation promises.
Matthias recalls the kidnapping of the very pregnant Alys from the lake house, and the crew's struggle to keep her calm and quiet on Black Veil. They prepare for the hostage exchange at Goedmedbridge, with Nina and Matthias distributing Mister Crimson costumes overnight. Matthias takes his rooftop position and spots stadwatch converging on the bridge as the exchange begins.
Kaz walks Alys across Goedmedbridge for the exchange, trading barbs with Van Eck, who calls in the stadwatch to trap them. Kaz frees Inej from her shackles, and they escape over the bridge railing to a flower barge below while fireworks and a hundred Mister Crimsons create chaos above. A mysterious bomb destroys the House of the White Rose, signalling a threat beyond Van Eck.
Jesper launches fireworks as the crew escapes in Mister Crimson disguises. Shu Kherguud soldiers with wings and metal-reinforced bodies attack the Staves, hunting Grisha and bombing pleasure houses. The crew fights the soldiers - Wylan's lumiya burns one flyer, and Nina shoots another through the eye socket - before fleeing through the alleys.
Inej and Kaz hide in a warehouse safe house while the crew reunites at Black Veil that evening. Kuwei explains the Kherguud are soldiers enhanced by parem-powered Fabrikators. Kaz reveals he invested in sugar shares and plans to destroy Van Eck's silos using Wylan's chemical weevil, then profit from the price spike. Inej insists on walking the high wire between the twenty-storey silos, and Nina demands the crew help evacuate Ketterdam's Grisha.
Kaz goes to smooth things with Per Haskell, promising four million kruge while secretly planning to break from the Dregs. Inej scouts Van Eck's house and discovers a Merchant Council meeting planned for the following evening. Kaz gives Inej a raw admission - he would come for her even broken - and they return to Black Veil in fragile understanding.
Nina and Matthias travel to the Ravkan quarter disguised as Fjerdan defectors to contact the Grisha refugees. After bickering about Ravkan romance novels and courtship customs, they enter a tavern where they are ambushed. Nina discovers she can control bones, sending relics crashing through the windows. Zoya Nazyalensky reveals herself, recognising Nina with shock.
Wylan and Jesper take a browboat to Olendaal, where Wylan reveals he lied to Kaz about needing a quarry - the mineral is in common paint. They visit the Church of Saint Hilde and discover it is an asylum where Wylan's mother, Marya Hendriks, has been locked away alive for eight years by his father, who had her declared insane to seize her fortune. Wylan plays his flute for her, devastated but resolute.
Matthias and Nina meet Genya Safin and Zoya beneath the Ravkan embassy, where roughly fifteen Grisha refugees are hiding. After Zoya reluctantly agrees to cooperate, Nina and Matthias share their first kiss - a long-awaited, overwhelming moment interrupted by Zoya's disgusted throat-clearing.
Back at the tomb, the crew finalises the plan to hit the silos, steal Van Eck's seal, and smuggle the Grisha out on one of Van Eck's own ships. Kaz reveals he knew Wylan's mother was alive and deliberately sent him to discover it, needing Wylan angry enough to fight his father. Jesper confronts Kaz about the cruelty, but Kaz argues it was necessary to give Wylan something worth fighting for.