Developers

Send faxes, fill templates, get signatures and run automations from your own software.

Overview

A JSON REST API at https://unlimitedfaxing.com/api/v1. Everything you can do in the app, your code can do too:

  • Send a fax: POST /api/v1/fax
  • Fill a template: POST /api/v1/documents
  • Fill, sign, then fax: POST /api/v1/workflows/template-sign-fax
  • Run an automation: POST /api/v1/automations/{id}/runs
  • Get notified: POST /api/v1/hooks

Authentication

Create a key under Settings → API keys. Send it as a bearer token. Keys only get the permissions (scopes) you give them, and fax sending stays off until an admin turns it on.

Authorization: Bearer ufax_your_key_here

Quickstart: run an automation

Turn the automation on in the app, then send the field values.

curl -X POST https://unlimitedfaxing.com/api/v1/automations/AUTOMATION_ID/runs \
  -H "Authorization: Bearer $UFAX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":{"PatientName":"Jordan Rivera","submitter_email":"jordan@example.com"}}'
const res = await fetch("https://unlimitedfaxing.com/api/v1/automations/AUTOMATION_ID/runs", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.UFAX_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ data: { PatientName: "Jordan Rivera" } })
});
const run = await res.json(); // run.id, run.status, run.steps
import os, requests
r = requests.post(
    "https://unlimitedfaxing.com/api/v1/automations/AUTOMATION_ID/runs",
    headers={"Authorization": f"Bearer {os.environ['UFAX_KEY']}"},
    json={"data": {"PatientName": "Jordan Rivera"}},
)
print(r.json()["status"])
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("UFAX_KEY"));
var res = await http.PostAsJsonAsync("https://unlimitedfaxing.com/api/v1/automations/AUTOMATION_ID/runs",
    new { data = new { PatientName = "Jordan Rivera" } });
Console.WriteLine(await res.Content.ReadAsStringAsync());

Send a fax the same way with POST /api/v1/fax (multipart: file, destination). Check a run with GET /api/v1/automations/runs/{id}.

Webhooks (REST hooks)

Subscribe a URL to one event. We POST JSON to it, signed with HMAC-SHA256 in the X-Ufx-Signature header using the secret returned when you subscribe.

POST /api/v1/hooks      {"targetUrl":"https://hooks.example.com/abc","event":"fax.received"}
DELETE /api/v1/hooks/{id}
GET /api/v1/hooks/events

Events:

  • fax.received
  • fax.delivered
  • fax.status
  • document.analyzed
  • document.generated
  • signature.completed
  • automation.run.completed

Each delivery looks like {"id":"…","type":"fax.received","occurredAt":"…","data":{…}}. Return any 2xx. We retry up to 3 times. URLs must be public https.

Rate limits

  • Faxes follow each key's hourly and daily caps (50 and 200 by default) plus your workspace limits.
  • Automations: up to 30 runs an hour and 200 a day per account.
  • Up to 25 active webhooks per account.
  • Over a limit you get 429 with "retry": true. Wait and try again.

Reference

The API reference lists every endpoint. The machine-readable spec is at https://unlimitedfaxing.com/api/v1/openapi.json (send your API key).

Works with Zapier, Make and n8n

Connect any of them with the webhooks and API above, using each tool's HTTP or webhook steps.

Need help?

Contact support and a developer will get back to you.