The Royals climbed within 2 1/2 games of the second wild card spot in the American League while the Indians missed a chance to move into a playoff position.
Kansas City clung to a two-run lead heading into the eighth and then cracked open the game with a three-run inning featuring a two-RBI double by Alcides Escobar.
Bruce Chen (8-3) worked five innings to pick up the win, allowing two runs on four hits with a walk and a strikeout. Five Kansas City relievers permitted a lone hit the rest of the way.
Danny Salazar (1-3) allowed four runs on six hits in six innings to suffer the loss.
'Happy' fan videos make Pharrell cry [VIDEO]
Pistorius testifies he didn't consciously pull trigger when he shot girlfriend