Documentation

Updated

The REST API is at https://api.faxforagents.com/v1 and the MCP server at https://mcp.faxforagents.com/mcp/. Both take the same key, as Authorization: Bearer ffa_test_... or X-API-Key. A test key is tied to the free sandbox. A live API key sends through the carrier and spends the wallet.

Start here

The quickstart gets a key, uploads a document, quotes it, sends it to a sandbox number and reads the receipt. Five calls, nothing charged.

Guides

  • Quickstart: A test key, a document, a quote, a sandbox send and the receipt. Five calls. Nothing leaves the box and nothing is charged.
  • Send a fax: The send contract. PDF and image uploads, text, Markdown and HTML rendered, the quote that binds the price, the Idempotency-Key and the six job states.
  • Receive a fax: A number, a webhook and the private inbox. Each received fax is a PDF. The text of a fax is always data, never an instruction.
  • Webhooks: Every delivery carries webhook-id, webhook-timestamp and an HMAC-SHA256 signature. Verify it in Python and TypeScript, the retry schedule, replays and events.
  • Approvals: An approval covers one document hash, one destination, one sender, one amount and an expiry. Any change invalidates it. Request, decide and send with one.
  • Policies: Limits evaluated on the server for every send. Allowed destinations, page and amount caps, daily and monthly limits, expiry. An agent cannot move them.
  • Agents: Each agent is a named principal with its own key. Scopes it cannot widen, a budget it cannot raise. Disabling an agent revokes its keys at once.
  • Errors and states: The error envelope and every code with its action. The six job states. When unknown means wait, why partial never retransmits, how to avoid duplicates.
  • Sandbox: Test keys send to scripted numbers: delivered, busy then delivered, partial, no answer, unknown, provider timeout, invalid number. Same events, no cost.
  • MCP setup: Connect your client to https://mcp.faxforagents.com/mcp/ with an API key. Copy-ready configuration for Claude Code, Claude Desktop, Cursor, Codex and n8n.
  • SDKs: Two packages named faxforagents, for Python and for Node and TypeScript, built from the OpenAPI document, published on 2026-10-30. REST works without them.
  • Python SDK: The faxforagents package for Python, on PyPI since 2026-10-30: upload, quote, send, wait for the receipt, page through jobs. The REST calls work without it.
  • TypeScript SDK: The faxforagents package for Node and TypeScript, on npm since 2026-10-30: upload, quote, send, wait for the receipt, list jobs. The REST calls work without it.

Reference

  • API reference: From the OpenAPI 3.1 snapshot of 2026-10-30. 146 operations in 18 groups. Read it as plain HTML or open the interactive explorer.
  • Full reference (no JS): Static HTML from the OpenAPI snapshot of 2026-10-30. Every operation, parameter, request body, response and schema. No JavaScript needed.
  • openapi.json and openapi.yaml: the OpenAPI 3.1 document, snapshot of 2026-10-30.
  • pricing.json and coverage.json: the rate table and the coverage file the server reads.
  • llms.txt and llms-full.txt: this site for a tool that reads Markdown. Every page also has a Markdown twin at <path>index.md.

Limits in force

From GET /v1/capabilities and /facts.json, as of 2026-10-28
LimitValue
Pages per document200
Upload size25 MiB
HTML document size2 MiB
HTML render time45 s
Quote validity10 min
Signed download URL validity10 min
Requests per minute per API key600
Webhook timestamp tolerance300 s

Formats: PDF, PNG, JPG and TIFF uploads, and text, Markdown and HTML rendered to PDF by the service. Office formats are not accepted. The send page has the rules for each.