A first victory in eight top-flight games - and just a third all season - lifts the Swans off the foot of the table and within one point of their 17th-placed opponents.
Albion, now winless in 14 league matches, could have levelled up moments after falling behind but Salomon Rondon wasted a big chance as the points went begging.
The game took time to settle into a pattern, with the two out-of-form sides clearly struggling for confidence in the early stages.
Swansea have badly struggled for goals this term and their scoring woes did not look like changing on the basis of the opening 30 minutes, though they did give supporters some hope close to half time.
West Brom also enjoyed a positive end to the first half, though, with Rodriguez given the chance to break clear, before getting away a shot that deflected behind off Alfie Mawson.
Bony showed a glimpse of what was to come later in the match 10 minutes into the second period by turning Jonny Evans and dribbling clear, only for his shot from the edge of the box to end wide of the target.
Mawson, who headed over from a good position during the quiet first half, was required again as the hour mark approached to produce another big block in front of goal.
West Brom certainly had their chances to snatch all three points, with Hal Robson-Kanu fluffing his lines when leading a four-on-two counter in his side's favour.
There was still time for another twist, as Rondon headed over a glorious chance moments later, while Luciano Narsingh squandered an opening of his own to make certain of the points three minutes from time.
In the end Swansea were able to see out the one-goal win, leaving Albion seriously looking over their shoulder as they seek a first win under Alan Pardew.
Swansea City (4-3-3): Fabianski; Naughton, Van der Hoorn, Mawson, Olsson; Mesa, Ki, Carroll (Abraham 76'); Dyer (Narsingh 65'), Routledge (Ayew 56'); Bony
West Bromwich Albion (4-3-3): Foster; Nyom, Hegazy, Evans, Gibbs; Livermore, Yacob, Field (McClean 46'); Robson-Kanu (Burke 78'), Rondon, Rodriguez (Brunt 82')