Telnyx fax alternative
Telnyx fax alternative
mintfax is a developer-first fax service for teams evaluating Telnyx Programmable Fax. Telnyx runs a broad CPaaS across fax, SMS, voice, verification, and numbers. mintfax is outbound-only. On the send path, mintfax accepts idempotency keys, retries failed outbound faxes automatically, offers a self-serve BAA, returns a stable error taxonomy split between the API and carrier layers, and includes a nine-scenario sandbox with parity to live.
What Telnyx Programmable Fax does well
Telnyx Programmable Fax is a long-running developer product at developers.telnyx.com/docs/programmable-fax. Telnyx runs a private global IP network for fax transport with T.38 error correction on by default, and exposes per-fax carrier controls: a T.38 vs G.711 toggle, monochrome, a black-threshold integer, and a five-value quality ladder. Outbound is priced verbatim at “$0.007 per page + SIP Trunking usage for transmission”. Webhooks are signed with Ed25519. Programmable Fax also supports inbound fax and sits inside the wider Telnyx CPaaS.
Feature comparison
| Dimension | Telnyx Programmable Fax | mintfax |
|---|---|---|
| API style | REST/JSON | REST/JSON |
| Base URL | https://api.telnyx.com/v2 | https://api.mintfax.com/v1 |
| Auth | Bearer token (V2 API key from Mission Control) | Bearer token; environment inferred from key prefix |
| Environment scoping | V2 API key generated in Mission Control Portal | mfx_test_, mfx_live_, mfx_acct_ |
| Prerequisites to send | Account + phone number + Fax Application + V2 key | Account + sandbox API key |
| Per-page price | $0.007/page + SIP trunking usage | $0.060 standard; $0.048 at 100k+/mo; $0.036 at 1M+/mo |
| Phone number rental | $1/mo per US local number (a number is required to send) | Not required; mintfax assigns origination |
| BAA | Sales-gated; public guidance frames services under conduit exception | Free, self-serve click-through in the dashboard; separate DPA |
| Zero-footprint / PHI deletion | Not documented as a product toggle | Opt-in zero-footprint mode; 30-day content retention default (7-365) |
| Webhook signing | Ed25519, header telnyx-signature-ed25519, per-account public key | HMAC-SHA256 per Standard Webhooks; per-endpoint whsec_ secret |
| Idempotency on send | Not documented | Idempotency-Key header; 24h expiry; 409 on reuse |
| Auto send retries | None; customer implements | 1m / 3m / 5m / 5m, default 3 attempts, per-fax max_attempts 1-5 |
| Webhook retries | At least one retry per URL, then failover URL; 2s response timeout | 3 retries at 10s / 60s / 300s, then drop |
| Error model on send | 14-code flat failure_reason on the fax.failed payload | 17-code API taxonomy + 10-code carrier taxonomy + optional error_subcode |
| Request tracing | Not documented | X-Request-Id: req_<ULID> on every response; echoed as request_id |
| Sandbox | No sandbox or test-mode documented | Nine magic numbers covering nine scenarios; parity with live |
| Per-fax carrier controls | T.38 toggle, monochrome, black threshold, quality ladder | Not exposed |
| File-upload path | Multipart (contents, up to 20 MB) or URL fetch (media_url, 50 MB) | Multipart file upload, 10 MB |
| File formats | PDF, DOCX, XLSX, JPG, PNG, TIFF, HTML, plain text | |
| Inbound / receive | Yes (Fax Application concept for inbound routing) | No (outbound only in v1) |
| Cancel a queued fax | POST /v2/faxes/{id}/actions/cancel | No cancel endpoint |
| Category | Full CPaaS | Fax-only |
Where mintfax leads
Idempotency on send
Telnyx’s Programmable Fax documentation returns no reference to Idempotency-Key, idempotent, or an equivalent replay-safety token across the product index, the get-started guide, the send-a-fax API reference, and the receiving-webhooks page. mintfax honours Idempotency-Key on POST /faxes. Keys expire after 24 hours. A reused key with a different body returns 409 idempotency_key_reuse; a reused key while the original is running returns 409 idempotency_key_in_progress. Replays carry Idempotent-Replayed: true. Omit the header and the response includes an X-Idempotency-Key: not provided; recommended header.
Built-in send retries
Telnyx’s fax API error list states verbatim: “Retries for outbound faxes, which may result in an error must be configured on the client application; Telnyx does not automatically retry faxes with errors.” Because Telnyx does not retry, fax.failed fires on every failed attempt. mintfax retries with backoff at 1m, 3m, 5m, 5m; the default is 3 attempts and each fax can set max_attempts in the range 1 to 5. mintfax fires fax.failed once, after retries are exhausted.
Self-serve BAA path
Telnyx’s public HIPAA guidance states verbatim: “In general, Telnyx’s services fall within this conduit exception under HIPAA, and therefore there is no need for Telnyx to sign a BAA”, and directs follow-up questions to [email protected]. Signing a Telnyx BAA is a sales-side conversation. On mintfax, BAA and DPA are separate self-serve click-through documents in the dashboard, at every tier, each with a durable evidence record and an immediately downloadable executed PDF. Optional zero-footprint mode scrubs PHI after the fax is delivered or fails. Content retention defaults to 30 days (configurable 7-365). Details on /compliance.
Structured errors on the send call
Telnyx exposes 14 failure_reason strings in one flat namespace, mixing submission validation (file_size_limit_exceeded, file_format_invalid), carrier events (receiver_no_response, receiver_unallocated_number), and infrastructure failures (fax_signaling_error, service_unavailable). The value arrives inside a nested data.payload envelope on the fax.failed webhook. mintfax splits the taxonomy: a 17-code stable API taxonomy for request-time errors, and a separate 10-code carrier taxonomy on the fax record with an optional error_subcode. Carrier identity is never exposed. Every response carries X-Request-Id: req_<ULID>, echoed as request_id in error envelopes.
Sandbox realism
The Telnyx Programmable Fax get-started guide lists four prerequisites before the first send: set up a Telnyx account, obtain a phone number, create a Programmable Fax Application, and generate a V2 API key. The guide points readers at the production URL for the first call. mintfax provides nine sandbox magic numbers covering nine scenarios (Delivered, Busy, NoAnswer, DelayedDelivery, LineQualityFailure, InsufficientBalance, DeliveredMultiPage, InvalidNumber, ValidationFailure). Sandbox and live use the same API contract; the three permitted differences are that sandbox top-ups are simulated, sandbox faxes never reach the PSTN, and live requires a first credit purchase to activate.
First-fax path: no number, no Fax Application
Telnyx requires a customer to create an account, buy a US local number (“start at $1 and are $1/mo thereafter”), create a Programmable Fax Application in Mission Control, and generate a V2 API key before calling POST /v2/faxes. The send request itself requires connection_id and from. On mintfax, you register the account, verify with a 6-digit code, and send with the sandbox key. No number to buy, no Fax Application concept, no connection_id, and no per-fax from (mintfax assigns the originating number).
When mintfax is not the right call
- Inbound fax. Telnyx supports receive (Fax Application concept, fax-to-email). mintfax v1 is outbound only.
- One CPaaS account across channels. Telnyx runs SMS, voice, verification, RCS, and numbers alongside the Fax API. mintfax is fax-only.
- Granular per-fax carrier controls. Telnyx exposes T.38 vs G.711, monochrome, black threshold, and a quality ladder. mintfax does not.
- Files above 10 MB. Telnyx’s multipart limit is 20 MB and its URL-fetch limit is 50 MB. mintfax caps uploads at 10 MB.
- A named certification badge as a procurement gate. mintfax does not hold SOC 2 Type II, HITRUST, PCI DSS Level 1, ISO 27001, or FedRAMP.
Idempotency keys, automatic send retries, signed webhooks, self-serve BAA, and the sandbox matrix are available at every mintfax /pricing tier. Migrating from Telnyx? See the migration guide. More comparisons at /compare.