Fax is not dead. It is actually more important than ever in healthcare, where the compliance story is understood and universal reach is guaranteed. But the way fax travels has changed fundamentally. T.38 Fax over IP (FoIP) has replaced the screeching modem and copper lines with SIP-based fax sessions that ride your IP infrastructure. For developers building healthcare systems, understanding T.38 FoIP architecture is now as important as understanding SIP itself.
This guide walks through how T.38 works, why it matters for self-hosted healthcare deployments, what the protocol actually does on the wire, and how to integrate T.38 fax into a modern infrastructure stack.
Why Fax Refuses to Die (And Why That Matters for Developers)
Healthcare has tried to replace fax for two decades. Every attempt fails for the same reason: fax is the universal channel. A hospital can send records to a rural clinic, a lab can push results to any physician, and a billing team can reach any payer. Nobody asks if the other side supports some new API. They just accept fax.
Regulation reinforces the habit. HIPAA has a long, understood compliance story for fax. Switching the entire industry to something else is generational work. So instead of fighting the format, healthcare modernized how fax travels.
That modernization is T.38 FoIP: fax sessions running over SIP instead of analog phone lines.
What T.38 Actually Does: Protocol and Timing
Old fax (G.3 protocol) was designed for copper phone lines with guaranteed timing. A fax modem sends tones at exact intervals, the receiving modem listens at exact intervals, and they synchronize by sound. That synchronization breaks on IP networks because packets arrive out of order and with variable latency.
T.38 solves this by abandoning tone-based synchronization. Instead, it packages fax data as discrete UDP packets with explicit timing information. Each packet says "this fax data should be played back at this time." The receiving side can then reorder and replay packets correctly even if they arrived out of order.
T.38 Packet Structure
A T.38 packet carries:
Sequence number (to detect packet loss). Timestamp (when this data should be played). Fax data type (training, image line, HDLC frame). Payload (the actual fax data).
A typical T.38 session works like this:
Sender initiates SIP call with T.38 capability. Both sides negotiate T.38 parameters (packet size, error correction method). Sender's fax machine prepares the image. Sender packages image data into T.38 packets with increasing sequence numbers. Sender transmits packets (may be out of order, but timestamps keep them organized). Receiver collects packets, sorts by timestamp, reconstructs the image. Receiver's fax machine outputs the result.
If 5% of packets are lost, the session continues. The receiving T.38 implementation detects missing packets (by sequence number) and can request retransmission or fill gaps with error correction. With G.711 audio-based fax, packet loss means visible corruption on the fax.
Visit for detail --> https://www.ictfax.org/open-source-fax-server-self-hosting-phi-t38-foip-2026/
Want to run fax on your own terms? Explore the open source fax server at ictfax.org
Top comments (0)