---
name: sendfax
description: Send a real fax over HTTP via SendFax.sh -- pay per page with x402 or MPP (USDC), no account or API key. Use when the user asks to fax a PDF to a fax number.
homepage: https://sendfax.sh
license: See https://sendfax.sh for terms
metadata:
  pricing: $0.05 per page, USDC (agent rails have no minimum)
  auth: none -- per-request payment (x402/MPP) is the credential
---

# Send a fax with SendFax.sh

> Install into your agent: `npx skills add DanielSinclair/sendfax.sh --skill sendfax -g`

SendFax.sh sends real faxes to any fax number. You pay per request with x402 or
MPP (USDC); there is no account and no API key. Faxes are real-time -- the PDF is
deleted after sending and never stored.

## When to use

The user wants to send a PDF to a fax number (an E.164 number like
`+14155550123`). You have, or can produce, the document as a PDF.

## Inputs you need

- `document`: the PDF to send (unencrypted, <=20 MB).
- `to`: the destination fax number in E.164 format (`+` then country code and
  number, e.g. `+14155550123`).
- An x402- or MPP-capable payment client with a funded USDC wallet.

## Steps

1. **Submit** -- `POST https://sendfax.sh/api/v1/faxes` as `multipart/form-data`
   with fields `document` (the PDF file) and `to` (the E.164 number).

   ```bash
   curl -sS https://sendfax.sh/api/v1/faxes \
     -F document=@document.pdf \
     -F to=+14155550123
   ```

2. **Pay** -- the first response is `HTTP 402 Payment Required`. It advertises
   $0.05/page in USDC via a `PAYMENT-REQUIRED` header + `accepts` JSON body
   (x402) and a `WWW-Authenticate: Payment` header (MPP). Amounts are in USDC
   base units (6 decimals): `50000` = $0.05 per page. Have your payment client
   pay the advertised amount.

3. **Retry with payment** -- resend the identical request with the payment
   header (`X-PAYMENT` for x402, `PAYMENT` for MPP). Success is `HTTP 202` with:

   ```json
   { "id": "fax_...", "statusUrl": "https://sendfax.sh/f/fax_..." }
   ```

4. **Poll** -- `GET https://sendfax.sh/api/v1/faxes/{id}` (free) until `status`
   is `delivered` or `failed`. Progression is
   `queued -> media_processed -> sending -> delivered`. On failure, read
   `failureReason`. Report the outcome (and `statusUrl`) to the user.

## Notes

- No accounts, ever. The payment authorizes the send; there is no key to store.
- Privacy: the document is streamed to the carrier and deleted after sending;
  the destination number is redacted to its last 4 digits at terminal state.
- Errors are `application/problem+json` (RFC 9457) with `type`, `title`,
  `status`, `detail`.
- Writing TypeScript/JavaScript? Prefer the `sendfax` SDK skill instead of raw
  HTTP: `npx skills add DanielSinclair/sendfax --skill sendfax-sdk -g`.
- Full reference: https://sendfax.sh/llms-full.txt *
  OpenAPI: https://sendfax.sh/openapi.json
