From what I understand fax over VoIP is very unreliable due to the real-time requirements of the fax protocol. Simply using VoIP to send fax message to POTS-connected fax machines is hence not possible.
Besides from proprietary fax API:s (such as sending fax messages via a company specific SOAP API), what standards based protocols are there for sending fax messages programmatically over IP?
There's a fax-over-IP protocol.
If you don't control the QoS (e.g. delays) of the network, then a more reliable way is to use a store-and-forward mechanism (e.g. email) to route the image though the (non-real-time) cloud, to a fax server on the other side, which then sends the fax over a real-time Plain Old Telephone line.