Wei-Yin Chen (5-2) gave up one run on seven hits over 5 1/3 innings to pick up the win for the Orioles, who snapped a four-game skid.
Danny Valencia knocked in the lone run for the Royals, who had a three-game winning streak snapped. Yordano Ventura (2-3) allowed two runs on seven hits while striking out nine over 6 1/3 innings.
The Orioles broke a scoreless tie in the fourth. Chris Davis led off with a walk and scored on Cruz’s blast to right-center field.
“He’s one of the best power hitters in the American League over the past five or six years,” Royals manager Ned Yost said of Cruz. “He’s hit in a good hitter’s park in Texas, but he’s got power to all fields.”
The Royals got one run back in the bottom half of the frame. Eric Hosmer, Salvador Perez and Alex Gordon singled to load the bases with one out. Valencia followed with a sacrifice fly to deep left field.
Ventura, meanwhile, struck out six straight batters over the fifth and sixth frames.
Kansas City put men on first and second with one out in the sixth. Darren O’Day replaced Chen and struck out Valencia before retiring Johnny Giavotella on a fly to right.
The Orioles had a runner thrown out at the plate in the seventh. With men on first and second, Nick Markakis hit a single to left. J.J. Hardy was thrown out at home to keep it a 2-1 game.
Baltimore’s bullpen kept the lead by retiring 11 straight Kansas City batters. Zach Britton tossed a perfect ninth to pick up his first career save.
“We have multiple guys who are capable of throwing that inning,” Britton said. “I just treated it like any other inning. I wanted to pound the zone with sinkers and throw the breaking ball if needed. To me, it was just about getting three outs like in any other inning I pitch.”