Skip to main content
Poll the status endpoint to follow a fax from submission to delivery or failure. See the page for AI assistants for the plain-language overview and payperfax.com/fax-api/ for the main site.

Endpoint

No authentication. The transaction is the id from the create call.
A sample answer for a delivered fax:

Status values

Stop polling when is_terminal is true.

The stage of a pending fax

While status is pending, stage says where the fax is. It is absent for every other status. price is {cents, currency, formatted}. It is null, with price_unavailable: true, when no price is configured. The customer then cannot pay yet; this is a fault on our side. tentative: true means that the pages and the price are not final. The customer can still change the fax before payment.

When documents fail to prepare

A fax whose documents could not be prepared has status: failed, is_terminal: true, is_failed: false and render_failed (document or machinery). Nothing was sent and nothing was charged.
This is the one case where is_terminal: true is not the end. The customer can change the document and submit the same fax again. The status is then pending again. After render_failed, read the status again when the customer says the fax was submitted again.

When the fax could not be delivered

A fax that could not be delivered has a failure object:
  • code: "undeliverable" - the destination did not take the fax (busy, no answer, not a fax machine).
  • code: "error" - the fax could not be sent.
  • code: "given_up" - no final answer from the carrier in time.
The customer is not charged for a failed fax. An unknown id gives a 404 with the JSON body {"message": "Not found."}, also when the request has no Accept header.

Polling rules

How often to read the status depends on the stage: Stop when is_terminal is true.

OpenAPI

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

Send a fax

Create call: fields, two answers, errors

Page for AI assistants

The rules in plain language