Adam Reach's free kick put the Bantams ahead and Posh's half got worse when Shaun Brisley was sent off for two bookings in the space of two minutes.
The visitors shot narrowly wide twice in the opening quarter of an hour, through Jack Payne and Tommy Rowe.
At the other end, Joe Day was well tested on 18 minutes by Raffaele de Vita, who ran with the ball and unleashed a swerving shot, but the Peterborough keeper stood no chance with Reach's opener.
The winger found the top corner with a 25-yard set piece to put Bradford ahead on 27 minutes.
Either side of the goal, Gary Jones and De Vita called Day into action as the hosts constantly pushed Posh back, and Brisley was twice punished for bringing down players as they threatened to break away.
He tripped Jon Stead on 39 minutes to receive his first caution, and then tugged back Reach 60 seconds later as the winger threatened to run through on goal, leaving Posh facing a tough second-half comeback.