In the week since the final events of The Six of Crows, Kaz Brekker, leader of a gang of misfit criminals, has been scheming about how to get revenge on a powerful member of the Merchant Council, Jan Van Eck, who double-crossed Kaz and kidnapped Inej, Kaz’s powerful compatriot. The gang poses as employees of a gambling den to gain access to the home of Cornelius Smeet, Van Eck’s lawyer, where they search his files to determine where Inej is being held. Van Eck’s estranged son, Wylan, poses as a waiter, but there is no danger that the lawyer will recognize him, as he is still tailored to resemble Kuwei, the son of the Shu inventor of parem, a dangerous drug that enhances Grisha powers. Nina struggles to flirt with Smeet, as she is still recovering from the nearly fatal dose of parem she took to augment her powers and save the gang. Jesper plays the role of a gambler, which is complicated for him as his gambling addiction inadvertently cost the gang their promised payout from Van Eck. Matthias worries about Nina, but the gang manages to get the information they need from Smeet’s house. Jesper discovers his father Colm is in Ketterdam, but he and Wylan are attacked when they meet him, confirming Jesper’s suspicion that his father is being used as a ploy to get to him. The gang hides Colm, promising to help him recoup the money that Jesper lost. Meanwhile, a captive Inej schemes to escape Van Eck’s clutches.

The gang, hiding out in the tombs of Black Veil, decides to kidnap Van Eck’s pregnant wife, Alys. When they grab her, Nina discovers that, while she does not have her normal powers, she is able to animate dust, which causes her to accidentally kill a guard. Desperate to get Alys back and to gain access to Kuwei, Van Eck agrees to trade her for Inej, but double-crosses the gang again by enlisting the help of the stadwatch, who appear as soon as the exchange is made. Kaz and the gang escape, Inej included, some by jumping on a boat and others by donning Mister Crimson costumes to blend in with a crowd of revelers. Matthias, Nina, and Jesper are attacked by flying Shu soldiers who have been modified by Fabrikators on parem to have wings, and they narrowly escape.

Kaz reveals that his plan to get revenge on Van Eck involves destroying Van Eck’s sugar holdings and framing him for the ensuing price hikes. For the plan to succeed, a still-injured Inej must scale ten tall and well-guarded silos and walk a high wire between them, pouring a chemical weevil into each to destroy the sugar inside. The gang scatters to prepare for the sabotage. Wylan and Jesper go to a remote town, ostensibly to get ingredients for the weevil, but Wylan has an ulterior motive: he wants to visit his mother’s grave in Saint Hilde. On the way, he recalls how his father sent him away for being illiterate and tried to have him killed. When Wylan and Jesper arrive at Saint Hilde, they find an asylum instead of a cemetery and discover that Wylan’s mother is still alive. This discovery reinvigorates Wylan’s determination to get revenge on his father.

The plan is in place, and the gang strikes. At the silos, Inej has planted the first two weevils, with Nina guarding below, when she’s attacked by a white warrior who calls herself Dunyasha. Inej nearly falls into the silo as she battles Dunyasha, who cuts the high wire Inej balances on. Meanwhile, Nina confronts a band of angry Dime Lions and uses her new dark powers to animate a boat of corpses. The corpses frighten the Dime Lions away and then hold out a net, catching Inej as she plummets. A second group of Dime Lions attacks Matthias, Kuwei, and Jesper at Black Veil, and Kuwei and Jesper use their Grisha powers to help them escape. Meanwhile, Kaz and Wylan break into Van Eck’s house to steal his seal from his safe using a highly corrosive chemical agent, but Pekka Rollins and his Dime Lions corner them. Just when all seems lost, Kaz drops the acid on the ground, and it burns a hole in Van Eck’s floor. Wylan and Kaz crash onto the dining table below and escape.

Their plan foiled, Kaz and the gang regroup and soon Kaz has developed an even more outrageous scheme: they will put Kuwei up for auction, draw powerful nations into a bidding war, and rig the auction so that Ravka will win. To do this, they will trick the Merchant Council into investing in a fake jurda consortium, run by Johannus Rietveld, a false identity Kaz created. Colm, unknown in the city, will play Rietveld. Auctions are protected by Ketterdam’s near-religious respect for commerce, so the gang will be safe. To ensure that Kaz has a throne to come back to if his scheme succeeds, he reclaims his role as leader of the Dregs, besting Per Haskell after taking a beating. The gang succeeds in launching the auction, and Kaz and Matthias flank Kuwei on the dais as his protectors. To smuggle a gun to Jesper, Inej hides on the roof, where she battles and bests Dunyasha. The auction is interrupted, however, by the powerful Council of Tides, which charges that the auction has been rigged. They accuse the Shu, not the Ravkans, and Kaz successfully frames Van Eck. All Van Eck’s fellow merchers turn against him. At the same time, Nina uses using her dark power to fake Queen Lady’s Plague in the city’s gambling dens, which triggers plague quarantine. As the alarms ring, Jesper uses his Grisha powers to shoot Kuwei around a corner, successfully faking his death. Just as the gang is about to reach safety, Matthias is shot by a young drüskelle and dies in Nina’s arms.

The gang get the lavish reward they were supposed to receive from Van Eck. After Kaz makes Rollins believe that he buried his son alive, Rollins flees Ketterdam for good. Wylan and Jesper become romantically involved after Wylan is tailored to have his old face back, and Wylan inherits his father’s estate. Nina leaves to bury Matthias in Fjerdan, his dying wish. Kaz buys Inej a slaver-hunting ship and promises to support her. They touch hands and he doesn’t flinch. He then shows her that he’s found her family, and Inej reunites with them, overjoyed.