Peterborough United suffered defeat for the first time under the leadership of Grant McCann as a goal in the first half condemned Posh to a 1-0 home defeat at the ABAX Stadium.
McCann's men were not at the races for long periods against the Bantams and only stirred in the final few minutes with Marcus Maddison denied by Colin Doyle.
The visitors opened the scoring on 11 minutes and it was good old fashioned football, McMahon with a delicious cross into the box and HIWULA adjusted well to power home a header past goalkeeper Ben Alnwick.
Paul Taylor clipped the top of the crossbar on 19 minutes with a powerful effort from 25-yards as Grant McCann's men tried to find a way back into the contest.
Doyle denied Taylor on 28 minutes after linking well with his strike partner Tom Nichols. McMahon was cautioned for bringing down Edwards on 33 minutes as the former Crawley man anticipated a flick from Taylor.
Forrester tested Doyle with a swerving drive from the edge of the box after linking with Binnom-Williams on 36 minutes.
Marshall fired into the side-netting moments after the re-start after twisting and turning in the box as the Bantams went in search of the second goal their play deserved.
Cullen side-footed wide from six yards on 50 minutes as more hopeless defending allowed the visitors to advance down the right hand side.
Posh made a change on 57 minutes with Callum Chettle replacing Da Silva Lopes in midfield.
Bostwick sent a Maddison free-kick over the bar with his head on 66 minutes, but chances were few and far between for Posh with the visitors comfortable in all aspects of their performance.
Shaquile Coulthirst replaced Edwards as Marshall fired wide for the Bantams. Nichols planted a header wide of the target following a clipped White cross as the game entered the final 15 minutes.
On 86 minutes, Posh squandered their best chance of the game as Binnom-Williams and Coulthirst combined to send Maddison clear on the left-hand side, but his low shot was pushed around the post by Doyle.
Hanson squandered two chances in the final few minutes to make it 2-0, first volleying over from six-yards and then screwing an effort over the bar from around four yards further out.
Posh: Alnwick, Bostwick, Baldwin, Forrester (sub J. Anderson 75min), Taylor, Maddison, Da Silva Lopes (sub Chettle 57min), White, Nichols, Binnom-Williams, Edwards (sub Coulthirst 71min). Unused subs: Tyler, Smith, Hughes, Nabi.
Bradford: Doyle, Meredith, Law, Vincelot, Marshall (sub P. Anderson 85min), Hanson, Hiwulu (sub Clarke 82min), Cullen, Knight-Percival, Devine, McMahon. Unused subs: Sattemaier, Anderson, Webb-Foster, Boateng.
Half-time: Peterborough United 0-1 Bradford City
Full-time: Peterborough United 0-1 Bradford City
Attendance: 5,906 (805 Bradford fans)