Document Workflow Automation: Where Faxing Fits (2026)

To automate document workflows, map one document's path, then give each stage a tool: capture, classify, route, approve, sign, deliver and archive. This vendor-neutral guide covers the tool category for each stage, and shows where fax still fits: as an intake channel and a delivery step you can run over an API.

Document Workflow Automation: Where Faxing Fits (2026)

By Sarah Martinez · Published November 9, 2026 · 11 min read

Quick answer: To automate document workflows, pick one document type, map the path it takes, and give each stage a tool: capture → classify and extract → route and approve → sign → deliver → archive. Fax still has two jobs in that chain. It is an intake channel when partners fax you, and a delivery step when a partner only accepts fax. Both can run without a person over the mFax API.

Most guides to document workflow automation stop at e-signatures and approvals. Real workflows have messier ends. Referrals, prior authorizations, signed contracts and vendor forms still arrive by fax, and some recipients still want one back. If those two ends stay manual, someone is still printing, scanning and retyping in the middle of your "automated" process.

This guide is vendor-neutral for the six stages. Then it shows how to wire the fax ends into the same pipeline with mFax, a fax service whose REST API is included with mFax Business.

What Is Document Workflow Automation?

Document workflow automation is software moving a document through a defined set of steps (intake, data capture, review, approval, signature, delivery and storage) without a person handing it along at each step. People still make the decisions that need judgment. The software handles the handoffs, the data entry and the record-keeping.

An automated document workflow differs from a document management system. A DMS stores documents and controls who can open them. A workflow decides what happens to a document next: who reviews it, which system receives its data, where the signed copy goes and how long it is kept. Most teams need both, connected.

It also differs from a single tool. "We use e-signatures" automates one stage. A whole automated workflow covers the path from the moment a document arrives until it is filed.

The payoff comes in three places:

  • Fewer handoffs. Documents stop waiting in someone's inbox for forwarding.
  • Less retyping. Data read once from a document flows into your CRM, EHR or ERP.
  • A trail. Every step leaves a timestamped record, which matters when an auditor or a client asks what happened to a document.

The Six Stages of an Automated Document Workflow

Every document workflow, whatever the industry, passes through the same six stages. The tools differ by stage, so plan stage by stage before you pick software.

StageWhat happensTypical tool categoriesWhere fax shows up
1. Capture / intakeDocuments arrive and get a record in your systemEmail parsing, web upload forms, client portals, network scanners with scan-to-folder, inbound faxInbound faxes arrive as PDFs
2. Classify and extractIdentify the document type and pull out fields (names, dates, amounts, IDs)OCR, intelligent document processing (IDP), template-based form readersFaxed pages go through the same OCR as scans
3. Validate and routeCheck required fields, match records, send to the right queue or personWorkflow engines, iPaaS tools (Zapier, Make, Power Automate), BPM suites, the workflow built into your ERP, EHR or CRMNone
4. Approve and signReview, approve or reject, collect signaturesApproval workflows, e-signature platformsA signed document may still need to be faxed
5. DeliverSend the result to the party or system that needs itEmail, portals, system-to-system APIs, EDI, Direct messaging in healthcare, outbound faxOutbound fax to fax-only recipients
6. ArchiveStore with metadata, apply retention and legal holdsDocument management (DMS/ECM), cloud storage with retention policiesThe delivery confirmation belongs in the record

Two stages carry most of the risk. Extraction is where wrong data enters your systems, so it needs confidence thresholds and human review. Delivery is where a document leaves your control, so it needs proof that it arrived.

Capture and Intake

Intake is any channel through which documents reach you, and every channel should end in the same place: one queue with one record per document. Typical channels are a shared mailbox, an upload form, a scanner and a fax number. If you are digitizing paper at a front desk, our guide to scan to email covers the scanner side.

Classify and Extract

Classification decides what a document is; extraction reads the fields you need from it. OCR turns the image into text. An IDP tool or a set of templates then maps that text to fields. Fax pages are lower resolution than a fresh scan, so set a confidence threshold. A field below it goes to a person, not into your database.

Route and Approve

Routing applies your business rules to the extracted data. For example: invoices under a set amount go to one approver, contracts with non-standard terms go to legal, and referrals go to the scheduling queue for the right location. Most teams build this in an iPaaS tool or in the workflow engine their main system already has.

Sign

E-signatures automate the signing event, not the workflow around it. In the US, the ESIGN Act says a signature, contract or other record relating to a transaction may not be denied legal effect solely because it is electronic. When the counterparty needs the signed copy by fax, our Docusign fax guide walks through that handoff.

Deliver

Delivery is the last step you control, so it needs a confirmation you can store. Email gives you "sent". A portal gives you "uploaded". A fax gives you a delivered or failed status from the receiving end. Whichever channel you use, write the result back to the document's record.

Archive

Archiving means storing the final document with its metadata, and deleting it when its retention period ends. Retention periods come from the rules your documents fall under. For tax records, the IRS says to keep most records for 3 years, and employment tax records for at least 4 years (IRS: How long should I keep records?). HIPAA requires keeping your security policies and procedures documentation for 6 years (45 CFR 164.316). That rule covers your documentation, not every record you process, so confirm the periods with whoever owns compliance.

How to Automate Document Workflows in 7 Steps

Start with one document type, automate the boring handoffs first, and keep a human in the loop for exceptions. These steps work the same whatever tools you choose.

1

Pick one document type and map its current path

Choose a high-volume, rule-based document: invoices, referrals, onboarding packets, purchase orders. Write down every step it takes today, who touches it, where it waits and where it gets retyped. The waiting and retyping are what you automate first.

2

List every intake channel

Note every way this document reaches you: email, uploads, paper, fax. A workflow that only automates email still leaves the faxed copies on someone's desk. Point every channel at one intake queue.

3

Define the data and the rules

List the fields you need from the document and the rules that use them: who approves what, which system gets which field, what counts as incomplete. If you can't write a rule down, that step stays manual for now.

4

Choose a tool for each stage

Use the table above. Check what your current CRM, EHR or ERP already does before you buy anything; many have approval and routing built in. Add an OCR or IDP tool for extraction and an iPaaS or workflow engine to connect the rest.

5

Connect the stages with events, not inboxes

Each stage should trigger the next through a webhook, a queue message or an API call, not an email asking someone to "take a look". Events give you a timestamp at every handoff, which is your audit trail.

6

Design the exception path

Decide where a document goes when extraction confidence is low, a field is missing, an approver rejects it or a delivery fails. An exception queue with an owner is what keeps automation from losing documents quietly.

7

Run it in parallel, then expand

Run the automated path next to the manual one for a while and compare the results. Once the exception rate is acceptable, switch over and pick the next document type.

Where Faxing Fits in a Document Workflow

Fax sits at the two ends of many document workflows: as a channel documents arrive through, and as the way they must leave for some recipients. Healthcare is the clearest case. On the U.S. government's health IT data page, 40% of hospitals said they often sent patient health information by mail or fax in 2025, and another 34% sometimes did. On the receiving side, 35% often and 46% sometimes received it that way (ONC, Methods Used by Hospitals to Engage in Interoperable Exchange). The survey counts mail and fax together, but the point for workflow design stands: your partners decide the channel, not you.

So a document workflow that touches clinics, insurers, courts, government offices or older vendors has to handle fax at both ends. Our fax automation guide covers fax-only workflows in depth; this section is about plugging fax into a broader document pipeline.

Fax as an Intake Channel

Treat an inbound fax as a PDF that arrived through a different door. Give it a record in the same intake queue as email and uploads, then send it through the same extraction and routing. What changes is the source metadata: the sending number and the time it arrived.

Fax as a Delivery Step

Treat an outbound fax as one delivery option your routing step picks per recipient. If the partner record says "fax only", the workflow renders the final PDF and sends it to their fax number. The fax's final status, delivered or failed, then goes back on the document's record, and a failure goes to the exception queue.

Why not keep a fax machine at the end of the line?

A fax machine breaks the chain at exactly the point automation needs a record. Someone has to print, dial and file the confirmation by hand. Over an API, the send is one request, and the delivery status comes back to your system as an event.

How to Automate the Fax Steps Over the mFax API

The mFax API sends a PDF with one request and reports what happened through webhooks, so both fax ends of your workflow run from code. It is a first-party REST API, documented at developers.mfax.to. Requests go to https://developers.mfax.to/v1 with a Bearer API key that the workspace owner creates in the mFax dashboard. Keep the key on your server.

What your workflow needsmFax API piece
Send a document by faxPOST /v1/faxes with to (E.164 number) and file (PDF); returns 202 and a fax object
Check one faxGET /v1/faxes/{uuid}; status moves queued → sending → delivered or failed
List faxes for reconciliationGET /v1/faxes with ?status=, ?direction=, ?since= and ?limit= (up to 100)
Remove a faxDELETE /v1/faxes/{uuid}
Learn the outcome without pollingWebhooks fax.delivered and fax.failed
Receive faxes into your intake queueWebhook fax.received, or GET /v1/faxes?direction=inbound

Step 1: Send the Delivery Fax

Your delivery step posts the final PDF and stores the returned uuid against your own document ID. The request takes only two fields:

curl -X POST https://developers.mfax.to/v1/faxes \
  -H "Authorization: Bearer $MFAX_API_KEY" \
  -F "to=+15417543010" \
  -F "file=@referral-packet.pdf"

In a workflow you'll call it from code. This Python version handles rate limits and keeps the link between your document and the fax:

import os
import time
import requests

API = "https://developers.mfax.to/v1/faxes"
HEADERS = {"Authorization": f"Bearer {os.environ['MFAX_API_KEY']}"}

def fax_document(doc_id, pdf_path, to_e164):
    for attempt in range(5):
        with open(pdf_path, "rb") as f:
            r = requests.post(
                API,
                headers=HEADERS,
                data={"to": to_e164},
                files={"file": (f"{doc_id}.pdf", f, "application/pdf")},
            )
        if r.status_code == 429:  # rate_limited: wait as long as the API asks
            time.sleep(int(r.headers.get("Retry-After", "5")))
            continue
        if r.status_code == 202:
            fax = r.json()
            save_fax_id(doc_id, fax["uuid"])  # your database: one document, one fax
            return fax
        err = r.json()  # {"code": ..., "message": ...}
        raise RuntimeError(f"{err['code']}: {err['message']}")
    raise RuntimeError("still rate limited after 5 attempts")

Storing the uuid before you do anything else is your protection against sending the same document twice. Before a retry, look up whether this document already has a fax, and check its status instead of posting again.

Step 2: Receive Events With a Webhook

Webhooks push fax.delivered, fax.failed and fax.received to your server, so your workflow reacts as soon as something happens. You set the webhook URL, and optionally a signing secret, in the mFax dashboard. Each POST is an envelope with an id, a type, a unix created time and data, which is the fax object.

Two rules make the handler safe:

  • Dedupe on the event id. Delivery is at-least-once, so the same event can arrive twice.
  • Verify the signature when you've set a secret. The X-Zelda-Signature header has the form t=<timestamp>,v1=<hex>, an HMAC-SHA256 of the timestamp, a dot and the raw body. The docs' sample rejects timestamps older than 5 minutes.
import express from "express";
import crypto from "node:crypto";

const app = express();

function verify(secret, header, rawBody) {
  const [t, v1] = header.split(",").map((p) => p.split("=")[1]);
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest("hex");
  return v1.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}

app.post("/webhooks/mfax", express.raw({ type: "application/json" }), async (req, res) => {
  const raw = req.body.toString("utf8");
  const sig = req.get("X-Zelda-Signature");
  if (!sig || !verify(process.env.MFAX_WEBHOOK_SECRET, sig, raw)) {
    return res.sendStatus(401);
  }

  const event = JSON.parse(raw);
  if (await alreadyProcessed(event.id)) return res.sendStatus(200); // at-least-once

  const fax = event.data;
  switch (event.type) {
    case "fax.received": // intake: a new document entered the workflow
      await intakeQueue.add({ source: "fax", faxId: fax.uuid, mediaUrl: fax.media_url });
      break;
    case "fax.delivered": // delivery confirmed: close this step on the document
      await markDelivered(fax.uuid);
      break;
    case "fax.failed": // delivery failed: hand it to a person
      await exceptionQueue.add({ faxId: fax.uuid, reason: fax.failure_reason });
      break;
  }
  await markProcessed(event.id);
  res.sendStatus(200);
});

intakeQueue, exceptionQueue and the other helpers stand in for your own queue and database. For inbound faxes, download the file promptly: media_url is a presigned, time-limited link. Then the PDF goes through your normal extraction and routing like any other document.

Step 3: Handle Errors and Reconcile

Every API error comes back as JSON with a code and a message, and each code maps to a different action in your workflow.

HTTPCodeWhat your workflow should do
400invalid_numberThe number isn't valid E.164. Send the document to a person to fix the recipient record
402quota_exceededThe month's page allowance is used up. Alert the account owner; more pages can be added to the plan
403subscription_inactiveThe subscription isn't active. Stop sending and alert the owner
429rate_limitedWait for the Retry-After seconds, then retry

A failed fax is different from a failed request. The request succeeded, but the fax ended as failed, with a failure_reason such as user_busy. Route those to your exception queue and decide there whether to resend.

Webhooks can be missed if your endpoint is down. A nightly job that lists recent faxes with GET /v1/faxes?since= and compares them with your records catches anything that slipped through.

What the API costs

There is no separate API fee. API access is included with every mFax Business plan, and pages come out of the plan's allowance at about $0.04 a page. Plans start from about $9/mo, and you build your own from seats and pages. The same plan gives you a signed BAA, TLS 1.2+ on every request and webhook, and PHI stored and processed in the US.

Using an AI Agent Instead of Writing the Glue

If your team builds workflows with AI agents, the mFax Skill gives the agent the API's instructions. It is a Markdown file you drop into Claude Code, OpenClaw or another skill-aware agent, and the agent can then send and track faxes through the API without glue code.

Common Mistakes When You Automate a Document Workflow

Most failed automation projects fail at the edges: the channels and exceptions nobody mapped. Watch for these:

  • Automating the middle and leaving the ends manual. If faxes still arrive on paper, someone still types them in. Count every intake and delivery channel in step 2.
  • No exception owner. A document the rules can't place must land in a queue with a named person, not in a log nobody reads.
  • Trusting extraction blindly. OCR on low-resolution pages makes mistakes. Send low-confidence fields to review.
  • Polling instead of events. Checking a status every minute wastes requests and adds delay. Use webhooks, and keep polling for reconciliation.
  • Losing the proof. If the delivery confirmation isn't stored with the document, you can't answer "did they get it?" a month later.
  • Sending twice. Retries without a stored ID can fax the same packet to a partner twice. Link every send to your document ID.

If your workflow centers on one system, our guides to fax integration and Salesforce fax integration show where the fax step plugs into common business software.

No-Code Options for the Fax Step

If you don't have developers, you can still take fax off paper. The mFax app sends and receives faxes from a phone, a computer or a browser, and you can try it free for 7 days. On mFax Business, every member can also fax from their email by sending a message to the fax number at send.mfax.to (for example 12125550147@send.mfax.to) from the address they sign in with. Neither gives you the webhooks and status events an automated workflow runs on, so for a full pipeline, use the API.

Start Building

Map one document type this week and list its intake and delivery channels. If fax is on either end, see what one request looks like on the mFax API page, then read the reference at developers.mfax.to. API access is included with mFax Business, at about 4¢ a page with no separate API fee. For code in more languages, our send fax API tutorial and fax API overview go further.

Frequently Asked Questions

How do I automate a document workflow?
Pick one document type, map every step it takes today, and write down the data and rules each step needs. Then give each stage a tool (capture, extraction, routing, approval, signature, delivery, archive) and connect the stages with events such as webhooks rather than people forwarding email. Send exceptions to a human queue, and keep the steps that need judgment manual.
What is document workflow software?
It is software that moves a document through defined steps without someone handing it along. That covers workflow engines and iPaaS tools that route and approve, OCR and intelligent document processing tools that read the pages, e-signature platforms, and document management systems that archive with retention rules. Most teams combine several.
Can faxes be part of an automated document workflow?
Yes. An inbound fax is one more intake channel: it arrives as a PDF and can enter the same extraction and routing steps as an emailed document. An outbound fax is a delivery step for partners who only accept fax. A fax API runs both from code; see our fax automation guide.
How much does it cost to automate faxing with the mFax API?
There is no separate API fee. API access is included with mFax Business, and pages come out of the plan's monthly allowance at about $0.04 a page. Plans start from about $9/mo, and you set the seats and pages yourself.
Is an automated fax step HIPAA-compliant?
It can be, if the fax provider signs a BAA and protects the data in transit and at rest. mFax Business includes a signed BAA on every plan, uses TLS 1.2+ on every API request and webhook, and stores and processes PHI in the US. Where your documents live matters too; see our guide to fax data residency.

Related Articles

  • Fax Automation: Everything You Need to Know - Fax automation uses software, APIs, and workflow rules to send, receive, and route faxes without manual steps — cutting processing time by up to 50% and costs by up to 80%. This guide covers how it works, who needs it, and how to set it up.
  • Fax API: How to Send Faxes Programmatically (2026) - A fax API lets developers send and receive faxes through simple REST calls — no fax machine, no phone line, no protocol knowledge. Learn how the mFax API and other fax APIs work, compare providers and pricing, and integrate faxing into your app.
  • Online Fax API: Send & Receive Faxes From Your App (2026) - An online fax API lets your application send and receive faxes over the internet with a single REST call — no fax machine, no phone line, no on-premise server. This guide covers the full integration: outbound sends, inbound webhooks, receiving PDFs, and real-world patterns for web apps, EHRs, and CRMs.
Previous: Paperless Office: How to Go Fully Digital (Fax Included) Next: Team Fax: How Multi-User Faxing Works (2026)
Home Business API Document Converter Support Company Blog
Free Fax Terms Privacy