Both sides were reduced to 10 men as Connor Roberts and Patrick Schick saw red in separate second-half incidents.
Schick was dismissed after tangling with Roberts three minutes after the restart, an incident which saw the Swansea wing-back booked.
Roberts collected his second caution 13 minutes from time after catching Tomas Soucek in the face during an aerial challenge, which the West Ham midfielder ensured caught the attention of Romanian referee Ovidiu Hategan.
Wales quickly recovered from that setback as Gareth Bale crossed from the left after 81 minutes, and James’ downward header beat the despairing dive of Czech goalkeeper Tomas Vaclik for his fourth international goal.
The Dragons were seeking their first points in World Cup qualification after losing their Group E opener in Belgium last week.
The Czech Republic - 24 places lower than Wales on the FIFA world rankings at 42 - already had four points on the board after winning 6-2 in Estonia and drawing 1-1 at home to Belgium on Saturday.
Ondrej Kudela started for the visitors after his club had initially prevented him from making the trip to Wales. Centre-back Kudela was accused of racially abusing Rangers midfielder Glen Kamara during a Europa League tie on March 18, and Slavia Prague had suggested the player’s safety could not be guaranteed in the UK.
The Czechs did not take the knee before kick-off, instead expressing their support for the fight against racism by pointing to the UEFA Respect inscription on the left sleeve of their jerseys.
Wales made one change from their 3-1 defeat to Belgium as Joe Morrell came in for the injured Joe Allen having replaced him during the early stages in Leuven.
Hal Robson-Kanu, Rabbi Matondo and Tyler Roberts had been expected to fill three of the substitutes’ spots following their bright performances in Saturday’s friendly victory over Mexico.
But the trio were sent back to their clubs on Monday after breaching Football Association of Wales protocols, with Leeds forward Roberts having apologised for staying up later in the hotel than the set time.
Skipper Bale came into the game saying his confidence had increased after scoring six goals in as many games for Tottenham in February and early March. But Wales’ record goalscorer, who was winning his 90th cap, had not scored for his country since netting against Croatia in October 2019.
Wales were pushed back early on and Jakub Jankto might have been taking home the match ball inside 15 minutes had he been more clinical.
Danny Ward comfortably collected a third-minute effort before Jankto was twice off target after finding more space than the home defence were wise to give him.
Wales slowly settled into the contest and should have been ahead through Bale after 36 minutes. James led a quick counter-attack and fed Neco Williams, whose cross from the left cleared the head of Ondrej Celustka.
Bale met the ball on the volley from six yards but it was too close to Vaclik, who reacted well to tip over. The Czechs blocked a Bale effort from the resulting corner and went close again when Schick tested Ward.
James tumbled in the Czech penalty area close to half-time but Soucek appeared to make contact with the ball.
The Czech Republic were reduced to 10 men when Schick raised his hands to Roberts in a crowded penalty area and the defender fell to the ground holding his face.
Wales changed formation by replacing defender Chris Mepham with striker Kieffer Moore, but the 10-man visitors still carried menace in attack.
Lukas Provod rounded Ward and was only denied by a superb James Lawrence covering challenge.
Joe Rodon produced an even finer block in the final seconds as Wales got their World Cup qualifying campaign up and running at the second attempt.
Join our new commenting forum
Join thought-provoking conversations, follow other Independent readers and see their replies