Fax is the channel every declared-dead prediction got wrong. Physician offices still receive referrals by fax. Law firms still serve documents on numbers that answer with a handshake tone. Government agencies and payer portals still publish fax numbers on forms that have no electronic alternative. The reason is not nostalgia: in healthcare and legal, fax reads to counterparties and auditors as a defensible delivery channel, and nobody on the other end is paid to migrate away. If you build software for those verticals, the question is not whether to support fax — it is whether fax is a machine in the corner or an API call next to your SMS and email traffic.
This post covers what Devotel Orbit ships for that second option, what the send and receive flow looks like, and the honest cut on when it replaces a dedicated fax service.
Where fax is still mandatory
The sectors that keep buying fax share a pattern: the recipient mandates the channel, and the sender has no say.
- Healthcare records. Referrals, prior authorizations, lab results, and chart transfers still move by fax between providers and payers, particularly in the US where fax is treated as an acceptable channel for protected health information. A clinic that wants your documents publishes a fax number; "can we email that instead" is not a supported negotiation.
- Legal. Serving documents, filing with courts and counterparties, and transmitting signed originals — many firms still accept or require fax for these, and a fax confirmation of receipt is the artifact both sides trust.
- Government. Agency intake forms, benefits enrollment, licensure submissions — the published submission channel is frequently a fax number and only a fax number.
- Financial documents. Lenders and insurers still route statements, authorizations, and legacy correspondence over fax lanes that predate the web portal and have not been decommissioned.
The common thread: you do not choose fax, your counterparty does. The only decision left is whether sending it is a human walking to a machine or an API call in the same pipeline as everything else.
What Orbit ships
The Fax channel sends and receives T.38/G.711 faxes over a programmable carrier connection. Documents travel as PDF or TIFF (up to 50 MB per send), and status updates arrive on the same channel-agnostic webhook contract as every other Orbit channel — there is no separate fax-shaped integration to learn. Two things make it operationally clean:
- Idempotent sends. If your retry logic — or a queue redrive — repeats the same send, the carrier dedups it and you are not billed twice. Re-sending the same payload is safe.
- Success-only billing. Failed attempts — busy, no answer, poor line quality — are not billed. You pay per page only when the carrier confirms delivery.
The Fax channel documentation carries the full request contract, the status lifecycle, and the per-tenant carrier connection option for orgs that bring their own fax application for data-residency or compliance reasons.
The send flow, receipts, and what failure actually sounds like
Sending is one POST with a destination number, your fax-capable number, and an HTTPS document URL:
curl -X POST https://api.orbit.devotel.io/api/v1/messages/fax \
-H "X-API-Key: dv_live_sk_..." \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"from": "+18005551234",
"media_url": "https://example.com/contract.pdf",
"quality": "high",
"status_callback": "https://example.com/webhooks/fax",
"metadata": { "order_id": "ord_123" }
}'The API accepts immediately and returns the message record with status: "queued"; transmission then walks a visible lifecycle — queued → sending → sent → delivered (or failed) — and each terminal or interim outcome arrives as a message.delivered or message.failed webhook with channel: "fax", the same events you may already consume for messaging. Two details matter for integration:
- Receipts, not guesses. A
deliveredevent is a carrier-round delivery receipt, not an optimistic "we accepted it." For fax specifically,deliveredis the stronger confirmation — prefer it for "the customer has it" and treatsentas carrier-completed. Passstatus_callbackper send (with its paired signing secret) to route a send's receipts to that send's endpoint. - Carrier diagnostics, passed through. When a send fails, the carrier's own diagnostic reaches your webhook —
busy,no_fax_tone,poor_line_qualityand similar — so your send pipeline can branch: resend on busy, verify the number is actually fax-reachable onno_fax_tone, retry at a lowerqualityon line noise. A failed send is terminal unless you resend; nothing silently retries it into a second bill.
The receive flow — and why inbound is where most implementations stall
Inbound is the half most teams under-scope. A fax to your number arrives as a fax.received webhook; Orbit resolves your workspace from the receiving number, stores the fax as a message record (deduplicated on the carrier's fax id, so a carrier replay creates one record, not two), and then runs per-number routing to deliver it downstream. That routing config is per number:
- Forward-to-email. Each received fax's PDF goes to up to 20 recipients as an attachment — or as a download link if the document could not be fetched at that moment.
- Inbox triage. A received fax can open a ticket in the shared inbox, so fax sits next to your SMS and email conversations instead of in a second system.
- Archive labels. A free-form tag stamped on forwarded faxes and tickets for your filing convention.
Signature verification happens before anything is stored — an untrusted event is rejected up front and never persisted. The inbound fax workflow guide walks the full receive pipeline, the failure modes that matter (an invalid recipient is rejected at config write, not at fax-arrival time), and the flow-to-email-archive wiring.
How it compares to dedicated fax services
The dedicated-fax market splits into two camps:
- Hosted e-fax inboxes. An email-to-fax front door aimed at a human operator. Fine when one person manually sends a few documents a week; the auditable, API-driven case is when it breaks down.
- Fax-only APIs. Several established vendors sell programmable fax alone. The catch is the parallel stack: a second provider with its own API contract, a second set of webhook events to reconcile, a second invoice, and inbound documents that live outside your messaging surface.
Orbit's fax is one channel on the same platform that already carries your messaging and voice: the same API key and error envelope, the same message.delivered / message.failed events, the same sender-reputation surface, and received faxes that can land in the same inbox your team already works. The consolidation argument is most of the benefit.
The honest cut, both directions:
- Use it when your product must send or receive fax because the counterparty mandates it — healthcare records exchange, legal and government filings, financial correspondence — and you want fax in the same pipeline, webhook contract, and inbox as your other channels rather than a bolt-on second provider.
- Use something else when fax volume is a handful of manual documents a week (a hosted inbox is genuinely simpler), or when a counterparty demands an attested, walking-paper fax audit chain — an artifact some legal workflows still require apart from API delivery receipts.
One note on scope: the controls around fax — who on your team may use which numbers, which inbound routing applies, and the option of a dedicated per-tenant carrier connection for data residency — are yours to set per workspace. Orbit gives you the controls; the compliance posture (HIPAA handling, retention rules, consent to transmit) stays in your hands.
Frequently asked questions
Is fax via an API actually the same transmission as a physical fax machine?
Yes at the wire level. The carrier performs the same T.38/G.711 handshake with the destination machine and returns the same delivery confirmation — the difference is where the document enters the network. A PDF submitted over the API arrives on the recipient's machine as a normal fax, and the delivery receipt you get back is the carrier's confirmation, not a generated "success."
Does Orbit bill failed fax attempts?
No. Billing is per page on success only: the wallet is charged when the carrier confirms delivery. Busy, no-answer, no-fax-tone, and poor-line-quality failures are reported back with the carrier's diagnostic and not billed — so a resend loop costs only for the attempt that lands.
How do inbound faxes reach my team?
Per receiving number you choose the destinations: forward the PDF to up to 20 email recipients, open a shared-inbox ticket for triage alongside SMS and email conversations, or just keep the message record plus your own webhook consumer. An invalid routing config is rejected when you save it, not when a fax arrives.
What documents can I send — and how large?
PDF or TIFF, one file per send, up to 50 MB, with no separate page-count cap. The quality setting (normal, high, very_high) raises transmission resolution for fine text or artwork; on lossy lines, very high quality lengthens the handshake and can tip a long fax into a line-quality failure, so default to high and drop to normal for long documents to noisy destinations.
Is fax compliant for HIPAA or legal use?
The channel is widely accepted in healthcare and legal workflows, and orgs with residency or carrier requirements can attach a dedicated per-tenant fax connection. The compliance posture itself is tenant-owned: how you handle the content, retention, and consent is your program's responsibility — Orbit supplies the controls, not the policy. Get counsel for your specific obligations.