# Documentation

> The quickstart first. Then sending and receiving, webhooks, approvals, policies, agents, errors, the sandbox, MCP setup, the SDKs and the API reference.

Page: https://faxforagents.com/docs/
Last changed: 2026-10-28

Updated Oct 28, 2026

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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/send-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](https://faxforagents.com/docs/receive-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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/errors/): 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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/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](https://faxforagents.com/docs/sdks/python/): 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](https://faxforagents.com/docs/sdks/typescript/): 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](https://faxforagents.com/docs/api/): 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)](https://faxforagents.com/docs/api/reference/): Static HTML from the OpenAPI snapshot of 2026-10-30. Every operation, parameter, request body, response and schema. No JavaScript needed.
- [openapi.json](https://faxforagents.com/openapi.json) and [openapi.yaml](https://faxforagents.com/openapi.yaml): the OpenAPI 3.1 document, snapshot of 2026-10-30.
- [pricing.json](https://faxforagents.com/pricing.json) and [coverage.json](https://faxforagents.com/coverage.json): the rate table and the coverage file the server reads.
- [llms.txt](https://faxforagents.com/llms.txt) and [llms-full.txt](https://faxforagents.com/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

| Limit | Value |
| --- | --- |
| Pages per document | 200 |
| Upload size | 25 MiB |
| HTML document size | 2 MiB |
| HTML render time | 45 s |
| Quote validity | 10 min |
| Signed download URL validity | 10 min |
| Requests per minute per API key | 600 |
| Webhook timestamp tolerance | 300 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](https://faxforagents.com/docs/send-fax/) has the rules for each.
