Fax API for developers & AI agents

The simplest Fax API available.

FaxDrop's REST fax API lets you send faxes programmatically with a single POST request. Any US or international fax number. HIPAA compliant. Pay per fax, no monthly minimum. API keys available now from your account dashboard.

Quickstart

Three steps. Under five minutes. No SDK required.

1

Create an account

Sign in with Google at faxdrop.com. You get 2 free faxes per month on the free plan. No credit card required to get started.

2

Generate an API key

Go to your account dashboard and open the API Keys section. Click Generate New Key. Copy the key immediately. You can create up to 3 active keys per account.

Store your key securely. It is shown once at creation. If you lose it, revoke it and generate a new one. Never commit API keys to source control.

3

Send a fax

POST a multipart form with the recipient number and your document. We accept PDF, DOCX, JPEG, and PNG files up to 10MB. Pass your key as an X-API-Key request header.

curl -X POST https://www.faxdrop.com/api/send-fax \
  -H "X-API-Key: fd_live_your_api_key_here" \
  -F "recipientNumber=+12125551234" \
  -F "senderName=Your App" \
  -F "senderEmail=you@example.com" \
  -F "recipientName=Dr. Jane Smith" \
  -F "subject=Patient records request" \
  -F "senderCompany=Acme Medical Group" \
  -F "senderPhone=+13155550123" \
  -F "file=@document.pdf"

Use with an AI agent

New

Copy a ready-made prompt that teaches any AI assistant (Claude, ChatGPT, etc.) how to send faxes using your FaxDrop API key.

API Reference

Base URL: https://www.faxdrop.com

Authentication

All API requests require an API key passed via the X-API-Key header. API keys start with fd_live_ followed by 32 hex characters.

You can also use FaxDrop programmatically through a web session (cookie-based auth), but API keys are required for server-to-server integrations and AI agent workflows. Requests authenticated with an API key are tracked separately in your usage dashboard.

X-API-Key: fd_live_a1b2c3d4e5f6...
POST/api/send-fax

Send a fax to any US or international fax number.

Request Headers

X-API-KeyRequired. Your API key. Generate one at faxdrop.com/account.
Content-TypeSet to multipart/form-data (most HTTP clients set this automatically when you pass form data).

Form Fields

FieldTypeRequiredDescription
fileFileYesDocument to fax. PDF, DOCX, JPEG, or PNG. Max 10MB.
recipientNumberStringYesRecipient fax number in international format. Example: +12125551234
senderNameStringYesSender name. Appears on the fax cover page. Can be your app name or a person's name.
senderEmailStringYesEmail address for delivery confirmation. Does not need to match your account email.
coverNoteStringNoMessage printed on the cover page. Max 500 characters.
recipientNameStringNoRecipient's display name for the cover page. Example: Dr. Jane Smith
subjectStringNoRE: subject line printed on the cover page. Max 200 characters.
senderCompanyStringNoSender's company or organization name. Displayed alongside senderName on the cover page. Max 100 characters.
senderPhoneStringNoSender's phone number. Printed on the cover page for recipient callbacks. Example: +13155550123

Success Response 200 OK

{
  "success": true,
  "faxId": "fax_abc123",
  "status": "queued",
  "statusUrl": "/status/fax_abc123"
}
FieldTypeDescription
successBooleanAlways true on a 200 response.
faxIdStringUnique identifier for this fax. Use this to track delivery status.
statusStringInitial status. Always queued on a successful send.
statusUrlStringRelative URL for the fax status page. Append to the base URL to get the full link.
GET/api/v1/fax/{faxId}

Check the delivery status of a fax. Poll this endpoint as an alternative to webhooks.

Path Parameters

faxIdRequired. The fax ID returned from POST /api/send-fax.

Request Headers

X-API-KeyRequired. Your API key. You can only check faxes sent from your own account.

Status Values

StatusMeaning
queuedFax accepted and waiting to be transmitted.
sendingFax is currently being transmitted to the recipient.
deliveredFax was successfully delivered. pages and completedAt will be populated.
failedFax delivery failed. Check the error field for details.
partialSome pages were delivered but the transmission was interrupted.

Success Response 200 OK

{
  "id": "fax_abc123",
  "status": "delivered",
  "recipientNumber": "+12125551234",
  "pages": 3,
  "completedAt": "2026-03-03T12:34:56.000Z",
}

When a fax fails, the response includes an error field:

{
  "id": "fax_abc123",
  "status": "failed",
  "recipientNumber": "+12125551234",
  "pages": null,
  "completedAt": null,
  "error": "Line busy. No answer after 3 attempts."
}
FieldTypeDescription
idStringThe fax ID you queried.
statusStringCurrent delivery status. One of: queued, sending, delivered, failed, partial.
recipientNumberString | nullThe fax number the document was sent to.
pagesNumber | nullNumber of pages transmitted. Populated after delivery completes.
completedAtString | nullISO 8601 timestamp when the fax finished (delivered or failed). Null while in progress.
errorString | nullError description. Only present when status is failed or partial.

Polling Tips

Most faxes deliver in under 90 seconds. A reasonable polling strategy:

  • Poll every 5 seconds for the first 2 minutes
  • Then every 30 seconds for up to 10 minutes
  • Stop polling once status is delivered, failed, or partial

Status checks count toward your API rate limits (10/min, 100/hr, 500/day).

Example Requests

cURL

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

Python

import requests

response = requests.get(
    "https://www.faxdrop.com/api/v1/fax/fax_abc123",
    headers={"X-API-Key": "fd_live_your_api_key_here"},
)

data = response.json()
print(data["status"])  # "delivered"

Node.js

const res = await fetch(
  "https://www.faxdrop.com/api/v1/fax/fax_abc123",
  { headers: { "X-API-Key": "fd_live_your_api_key_here" } },
);

const data = await res.json();
console.log(data.status); // "delivered"

Error Reference

All errors follow the same JSON schema.

Error responses include an error message, a machine-readable error_type, and when applicable a hint with a suggested fix and a retry_after value in seconds.

// 401 - Invalid or missing API key
{
  "error": "API key not found or revoked.",
  "error_type": "unauthorized",
  "hint": "Check your key at https://faxdrop.com/account or generate a new one."
}

// 402 - No credits remaining
{
  "error": "Insufficient credits. Please top up your account.",
  "error_type": "payment_required",
  "hint": "Add credits at https://faxdrop.com/pricing.",
  "retry_after": 3600
}

// 429 - Rate limit hit
{
  "error": "Rate limit exceeded. You are allowed 10 requests per minute.",
  "error_type": "rate_limited",
  "retry_after": 42
}

// 400 - Bad request
{
  "error": "Unable to process your document.",
  "error_type": "bad_request",
  "hint": "Supported formats: PDF, DOCX, JPG, PNG. Max 10MB."
}
HTTP Statuserror_typeWhen it happens
400bad_requestMissing required fields, invalid fax number format, unsupported file type, file too large
401unauthorizedMissing API key, key not found, key revoked, wrong key format
402payment_requiredNo credits remaining, free tier exhausted. Check retry_after for when you can try again after topping up.
429rate_limitedPer-key rate limit exceeded. See Rate Limits below. retry_after tells you exactly how many seconds to wait.
500internal_errorUnexpected server error. These are rare. Retry after a few seconds. Contact support if they persist.

Rate Limits

Three independent fixed-window buckets per API key.

WindowLimitResponse header
Per minute10 requestsX-RateLimit-Limit / X-RateLimit-Remaining
Per hour100 requestsX-RateLimit-Limit-Hour / X-RateLimit-Remaining-Hour
Per day500 requestsX-RateLimit-Limit-Day / X-RateLimit-Remaining-Day

Every successful response includes X-RateLimit-* headers so you can track your quota in real time. When you hit a limit, the response also includes a Retry-After header (seconds until the window resets) and a retry_after field in the JSON body.

Rejected requests (429 responses) do not count against your limit. Only successful requests consume quota.

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1740924120
X-RateLimit-Limit-Hour: 100
X-RateLimit-Remaining-Hour: 93
X-RateLimit-Limit-Day: 500
X-RateLimit-Remaining-Day: 493

Usage Tracking

All faxes sent via API key are logged separately from web UI faxes. Your account dashboard shows monthly API usage counts and recent activity per key. Usage data is retained for 400 days.

Credits are shared across API and web UI usage. Each fax costs the same regardless of how it was initiated. Check your pricing plan for per-fax rates.

FaxDrop Fax API vs. the alternatives

Most fax APIs are built for enterprises with monthly minimums and complex onboarding. FaxDrop is built for developers who need fax without the overhead. Migrating from Twilio? See our Twilio migration guide.

FeatureFaxDropFax.PlusTelnyxRingCentral
Pricing modelPay per fax ($1.99)Subscription + overagePer page ($0.007+)Enterprise contract
Monthly minimumNoneYesYesYes
HIPAA compliantYes (Sinch BAA)Paid plans onlyYes (BAA required)Enterprise only
Time to first faxUnder 5 minutes15-30 minutes30+ minutesDays (sales process)
Free tier2 faxes/month10 pages/monthNoneNone
Document retentionZero (browser-based)Stored on serversStored on serversStored on servers
API complexity2 endpointsFull REST + webhooksFull REST + webhooksComplex SDK required

What developers are building

FaxDrop handles the fax infrastructure so you can focus on your product.

Healthcare platforms

Send prescriptions, referrals, and medical records to providers who still require fax. HIPAA compliant out of the box with zero document retention.

Legal document systems

Court filings, signed agreements, and discovery documents sent to fax-only recipients. Delivery confirmations for your audit trail.

Government form automation

IRS submissions, state filings, permit applications. Many government agencies still require fax. Automate the last mile.

AI agents and workflows

Give your AI agent the ability to fax. Your agent handles the workflow logic, FaxDrop handles the fax transmission. MCP server coming soon.

Why developers choose FaxDrop

HIPAA Compliant

Sinch BAA-backed transmission. AES-256 encrypted transport. Zero document retention. Built for healthcare and legal workflows.

Under 90 Seconds

Most US faxes deliver in under 90 seconds. Status webhook callbacks let you track delivery in real time.

Two Endpoints

POST /api/send-fax to send. GET /api/v1/fax/{id} to poll status. Multipart form. PDF, DOCX, JPEG, or PNG. That is the entire integration.

Pay Per Fax

No monthly minimums. No seat licensing. $1.99 per fax or subscribe for volume discounts. Credits never expire.

Agent-Ready

Built for the MCP era. Your AI agent can send faxes the same way a human does. No browser required.

Twilio Fax Is Gone

Twilio deprecated their fax API. FaxDrop is the modern replacement: simpler, cheaper, compliant out of the box.

Ready to integrate?

Sign in with Google, generate an API key from your account dashboard, and send your first fax in under five minutes.

Questions? Email us at support@faxdrop.com or visit /support.

Security & Compliance

HIPAA Compliant

Signed BAA on file · No document retention

PCI DSS Level 1

Payments secured by Stripe · No card data touches our servers

256-bit SSL

End-to-end TLS 1.2+ encryption in transit

Zero Retention

Files deleted immediately after transmission completes