Skip to main content
The create call takes the fax fields and returns a link for the person. Nothing is sent and nothing is charged before the person opens the link, sees the preview with the price, and pays in the browser. See the page for AI assistants for the plain-language overview and payperfax.com/fax-api/ for the main site.

Endpoint

No authentication. Send multipart/form-data for files, or JSON when the document is inline Markdown or a cover page alone.
No account, no API key, no webhooks, no payment without a person. If a system needs those, this API is not the right fit.

A complete fax

A call that carries a file, a letter as inline markdown, or a cover page makes a draft and returns 201. The answer has id, url and status_url. Give url to the person: it opens the preview with the price. The draft is abandoned after 4 hours if the person does not pay.

When you write the document

Send the text as Markdown in the markdown field. JSON is the natural form:
In JSON, write each line break of the text as \n. The answer is the same as for a file. The text becomes the first document of the fax, a file named letter.md. Headings, lists and tables work. Raw HTML is printed as text. A fax has no cover page unless you ask for one. So the letter must carry its own names, date and address block. If the person must also add a file (a signed form, for example), send the letter and set file_expected=true. The form then opens with the letter attached.

A fax that still needs a file

When the person must add a file, send what you have and set file_expected to true. A call with no file, no letter and no cover page is handled the same way. The answer is 200 with only url (no id, no status_url), and no fax exists yet.
Give url to the person. It opens the web form with what you sent, the person adds the file there, and then sees the preview and pays. The link is good for 24 hours.
Do not retype a person’s file as text. A typed copy of a signed form is not the form.

Fields

Errors

Errors are JSON.
A field is wrong, a field name is unknown, or the body is not valid JSON. The body has message and errors (the messages for each field). The messages say how to fix the call.
Too many calls from one address in an hour. Wait for the number of seconds in the Retry-After header, then try again.
New orders are paused for a short time. Try again later.

OpenAPI

The full field reference and example answers are in the OpenAPI file.

Check the status

Poll for pending, delivered, failed, expired

Page for AI assistants

The rules in plain language