Florian Valot had two assists in his first MLS appearance since he suffered a season-ending knee injury in March 2019, and Royer also added an assist on Duncan's opener.
New York led 15-11 in shots and 6-5 in efforts on target despite conceding the majority of possession. Those numbers were far more slanted in the early stages before New York took a commanding 2-0 lead into halftime.
Allan Cruz scored moments after the break to cut Cincinnati's deficit in half, and Jurgen Locadia added his first MLS goal to make things interesting late. The second-year team looked considerably more potent offensively than the unit that scored only 31 goals in their expansion 2019 season.
But Red Bulls goalkeeper David Jensen made three saves to preserve the victory, while his opposite number Spencer Richey also had three stops in the loss.
New York took a 1-0 lead in the 16th minute. Royer acrobatically kept a pass from going out of bounds over the left touchline, then found Valot to his right. Valot turned and passed the ball across the penalty arc to Duncan, who controlled it and then finished past Richey from about 8 yards out.
The same players helped the Red Bulls double their lead 11 minutes later, with Duncan intercepting Richey's clearance and finding Valot entering the right side of the penalty area.
Valot crossed toward Royer on the other side of the box, but Kaku had a better angle and Royer allowed him to side-foot a first-time finish between a diving Richey and the left post.
Cruz had Cincinnati on the board less than a minute into the second half, sliding to finish off Brandon Vazquez's low cross.
Royer made it 3-1 in the 70th minute when he sliced through the box from the left and finished past Richey, insurance the Red Bulls needed when Locadia took advantage of a bad giveaway and put in his own rebound after Jensen stopped his first breakaway effort.
Red Bulls hold off FC Cincinnati
New York hang on to win 3-2 despite a late goal from Cincinnati. Watch MLS on ESPN+.