Duffy walked three and hit a batter. He also struck out three.
The only other hit Royals pitching allowed was an eighth-inning home run by Ramon Santiago off reliever Aaron Crow. Greg Holland pitched the ninth and earned his 33rd save.
Duffy outdueled Detroit starter Justin Verlander (12-9), whom the Royals touched for two runs, seven hits and two walks over eight innings. He struck out six.