Send a fax from Pi
Updated
Pi, the coding agent, can send and read faxes for you through the Fax for Agents package on npm. You describe the fax in plain words. Pi prepares the page, gets a quote, sends it and checks the delivery state in one turn. By default it sends inside the limits your organization set, with no approval per fax. This guide was recorded in Sandbox mode, so nothing reached a real fax line.
Before you start
- A Fax for Agents account and an API key. Create the key in the dashboard at app.faxforagents.com. Use an
ffa_test_key for the free sandbox. - Pi with the package installed. Run
pi install npm:@faxforagents/fax-for-agents. ExportFAXFORAGENTS_API_KEYin the shell that starts Pi. Pi's bash tool inherits it. - A model provider signed in to Pi, for example
OPENAI_API_KEYin the same shell or/logininside Pi. The guide used gpt-5-mini. - An
AGENTS.mdin the project folder with two lines. The key is set inFAXFORAGENTS_API_KEYand must never be printed. Every id comes from an API response. Pi reads the file on start and lists it under [Context]. - The Connected apps switch in Settings is on by default. The default limits are $5.00 per fax and 20 faxes a day.
1.Check the package
Open a terminal and list the installed packages.
2.Open Pi
Start Pi in any project folder.
3.Describe the fax
Type what the fax should say and where it goes. Name Fax for Agents so the skill is used.
4.Send it
Pi does the whole routine itself with the REST calls from the skill. The bash rows show each curl call.
5.Check the evidence
Ask for the delivery evidence when you want the full record.
6.Read the inbox
Received faxes work the same way. Ask for your inbox.
What the limits mean
Open Settings in the dashboard. The Connected apps card holds the switch "Let connected apps send without asking". Under it are two fields, "Amount per fax, at most" ($5.00) and "Faxes per day" (20). Apps like Pi send inside these limits with no approval per fax. Turn the switch off and every send waits for a person. Finer limits, such as destinations or one app only, live under Policies. See the guide Your assistant sends within limits by default.
Approve every fax instead
- In Settings, turn off "Let connected apps send without asking" and choose Save.
- Ask Pi to quote the fax. The quote says approval is required.
- Say "Ask a person to approve it." A person approves in the dashboard or with the
ffacommand line, then you tell Pi to send.
The routine is the same as in Approve every fax from Claude Code.
Troubleshooting
- Pi prints the value of
FAXFORAGENTS_API_KEYwhile it checks the environment. Add theAGENTS.mdline from "Before you start" and rotate the key in the dashboard. - Pi reports a fax id that does not exist, such as
fax_01H7K2Z1, without a bash row above it. The model wrote a summary instead of running the calls. Say "Run the REST calls from the skill now and report the fax id and its state." Keep theAGENTS.mdrule against invented ids. - Pi prints "No models available. Use /login to log into a provider". No provider key is set. Export one, for example
OPENAI_API_KEY, or run/logininside Pi. - Pi prints the curl commands and asks "sandbox or live" instead of running them. Say that the key is already configured, or answer "sandbox". The skill then runs the calls.
- Pi writes a draft file in the project instead of sending. A small model skipped the skill. Name Fax for Agents in the prompt and use a model such as gpt-5-mini or larger.
- Pi says the quote requires approval although you expect a plain send. An owner turned the Connected apps switch off, or the fax is above a limit. Check Settings, Connected apps for your environment.