Abstract illustration of code brackets and a document icon connected by flowing lines
Home / Blog / Fax API Guide

Fax API: The Simplest Way to Send a Fax from Code

A fax API lets your app, script, or AI agent send a fax over the phone network with a single HTTP request. No fax machine, no fax line, no legacy telephony stack. This guide covers what a fax API is, how FaxDrop's REST fax API works, and how to send your first fax from the developer page.

By FaxDrop Team··7 min read

What Is a Fax API?

A fax API is a web service that sends and tracks faxes from code instead of from a physical fax machine. You send an HTTP request that contains the document and the recipient's fax number, and the provider transmits it over the public telephone network to the receiving fax machine. You never touch a phone line, a modem, or a T.38 gateway. The API is the whole interface.

A good fax API does three things. It accepts a document and a destination number and queues the fax. It authenticates the request so only your account is billed. And it exposes the delivery result, so your code knows whether the fax was delivered, failed, or is still sending. Everything else, like cover pages or batch sending, is a convenience on top of those three primitives.

People search for the "best fax API," a "simple fax API," or just "an API for fax" because most options in this space are anything but simple. The rest of this guide shows what a modern, minimal fax API looks like and how to send with one.

Why Fax Still Shows Up in Product Requirements

Healthcare, government, legal, and financial institutions still use fax for document intake. If your application connects to those institutions, fax can appear as a required last-mile channel even when the rest of the workflow is modern.

Healthcare workflows require safeguards across every system and vendor that handles protected health information. Fax is one possible transport, but using it does not make the surrounding application compliant by itself.

The IRS, Social Security Administration, and most state agencies accept fax but not email attachments. Courts require faxed filings in many jurisdictions. Real estate closings still use fax for signed documents. The pattern is clear: anywhere that compliance and legal weight matter, fax is the channel.

The Old Way: Twilio, SOAP, and Pain

For years, the go-to developer option was Twilio's Programmable Fax API. It worked. It was not pretty. You needed to provision a fax-capable number, manage media URLs, handle callbacks for status updates, and navigate their pricing tiers. But it got the job done.

Then Twilio deprecated it. The Programmable Fax API is gone. If you search their docs today, you will find a deprecation notice and a suggestion to use a third-party provider. That left a gap in the market.

The alternatives are not great. Most fax APIs are wrappers around legacy infrastructure built in the 2000s. You get SOAP endpoints, XML payloads, multi-step authentication flows, and pricing models designed for enterprise sales calls. For a developer who just needs to send a fax from a Node.js app, it is overkill.

One call to send. One call to know the current supported status.

Try FaxDrop Free

The FaxDrop Core Lifecycle: Send, Then Check Status

FaxDrop's fax API is simple on purpose. There are two endpoints. You POST /api/send-fax to send, and you GET /api/v1/fax/{faxId} to check the current supported status. Those two calls cover the core lifecycle. Additional read-only endpoints expose balance and recent-fax information.

To send, you post a multipart form with four required fields: the file, the recipientNumber in E.164 format (like +12125551234), a senderName, and a senderEmail for status emails when FaxDrop has a supported outcome to report. Supported file types are PDF, JPEG, and PNG, up to 4 MB. Export Word documents as PDF first. You get back a faxId in the response.

Authentication is a single API key passed as an X-API-Key header. Keys start with fd_live_ and you generate them in your account dashboard. No OAuth flows, no token refresh, no session management.

cURL

curl -X POST https://www.faxdrop.com/api/send-fax \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "recipientNumber=+12025550123" \
  -F "senderName=Your App" \
  -F "senderEmail=you@example.com" \
  -F "file=@document.pdf"

Python

import requests

resp = requests.post(
    "https://www.faxdrop.com/api/send-fax",
    headers={"X-API-Key": "YOUR_API_KEY"},
    files={"file": open("document.pdf", "rb")},
    data={
        "recipientNumber": "+12025550123",
        "senderName": "Your App",
        "senderEmail": "you@example.com",
    },
)
print(resp.json())

Node.js

import { readFile } from "node:fs/promises";

const bytes = await readFile("document.pdf");
const file = new Blob([bytes], { type: "application/pdf" });
const form = new FormData();
form.append("recipientNumber", "+12025550123");
form.append("senderName", "Your App");
form.append("senderEmail", "you@example.com");
form.append("file", file, "document.pdf");

const res = await fetch(
  "https://www.faxdrop.com/api/send-fax",
  {
    method: "POST",
    headers: { "X-API-Key": "YOUR_API_KEY" },
    body: form,
  }
);
console.log(await res.json());

To check the current status, poll the status endpoint with the faxId you got back. The response tells you whether the fax is queued, sending, completed, failed, partial, or unknown, plus the page count once it finishes. completed, failed, and partial are terminal, so stop polling once you see any of them. unknown is not terminal. It means final carrier evidence is unavailable. Keep polling with backoff until you see a terminal status or reach your own bounded timeout.

cURL (check status)

curl https://www.faxdrop.com/api/v1/fax/fax_abc123 \
  -H "X-API-Key: YOUR_API_KEY"

# { "id": "fax_abc123", "status": "completed", "pages": 3 }

That is the core integration. No SDK is required. Send, then poll status with backoff. Test with an fd_test_ sandbox API key first. Before any live send, show the destination and document to a human or obtain an equivalent explicit confirmation. Never blindly retry an ambiguous result because the carrier may already have accepted the fax.

For the full field-by-field reference, status values, error codes, and language snippets in Python, Node.js, and PHP, see the FaxDrop developer docs.

How the Credit Model Works

FaxDrop uses credits for paid API sending, not raw per-page metering. One purchased or subscription credit covers a single outbound fax of up to 10 uploaded pages. An 11-page document uses 2 credits. There is no per-minute charge and no separate connection fee. Credits you buy never expire.

For paid API workflows, one purchased or subscription credit covers each outbound fax block up to 10 uploaded pages. A confirmed failure restores the exact credits deducted for that fax. An unresolved send does not. You can top up with credit packs or move to a subscription for higher monthly volume. Pricing is on the pricing page, covered in more detail below.

Healthcare Workflows Require a Full Vendor Review

If you are building for healthcare, review every service that may encounter protected health information. FaxDrop uses a fax carrier with a signed BAA. That narrow fact does not establish product-level HIPAA compliance or coverage for the rest of your workflow.

Broader vendor BAA coverage remains under review. Request current compliance documentation before sending protected health information, then evaluate your own storage, logging, access, retention, and incident-response controls.

For a deeper look at fax and HIPAA, read our full HIPAA compliance breakdown.

AI Agents Need Fax Too

Agents can now complete workflows that end at institutions which still accept documents by fax.

Think about an AI medical billing agent that processes claims. When a payer requires faxed documentation, the agent needs to send it automatically. An AI legal assistant filing court documents. An AI tax preparer submitting forms to the IRS. These are not edge cases. These are the near-term future of every industry that still uses fax.

The core lifecycle fits an agent tool well. One multipart request sends the file, and one request checks the current supported status. The status may be honestly unknown, so agents must poll with backoff and a bounded timeout. For agents that speak the Model Context Protocol, a community MCP server (klodr/faxdrop-mcp) wraps these endpoints as MCP tools so an agent can discover and call the fax tool natively.

Pricing That Makes Sense for Developers

FaxDrop offers 2 free sends per month, up to 5 total pages each including the cover page, with no signup required. After that, a paid single credit is $1.99 and covers one outbound fax up to 10 uploaded pages, or buy a credit pack for a lower per-fax rate. For steady volume, the Basic plan is $9.99/month for 50 fax credits and the Pro plan is $24.99/month for 200 fax credits. Purchased credits never expire.

FaxDrop's current pricing is published on the pricing page. No sales call required.


One Call to Send. One Call to Know.

Send with multipart upload. Check the current supported status, including an honest unknown when final evidence is unavailable.

Send a Fax Free

No fax machine. No signup. 2 free sends per month, up to 5 total pages each including the cover page.

FAQs

Frequently Asked Questions

What is a fax API used for?+

A fax API lets your app send documents to fax numbers programmatically, usually for forms, healthcare workflows, finance, and other compliance-heavy operations.

Do I need a phone line to use a fax API?+

No. The fax provider handles the telecom layer, while your app sends files and metadata over HTTPS.

Is FaxDrop a good fax API option for modern apps?+

It can be a strong fit when you want a clean send flow and a product that also works outside the API. That helps teams support manual and automated faxing in one place.

Clear about how FaxDrop works

Healthcare workflows

Fax carrier BAA in place | Broader vendor review ongoing

Hosted checkout

Payment details are entered on Stripe's checkout

Current status

Check the latest available update after sending

Outbound only

No inbox, dedicated fax line, or installed fax software