INeedToSendAFax.com is a production fax-over-IP service I built end to end, from the telecom layer up to the web UI and public API. It lets anyone send a fax to any US/Canada number straight from a web page — with a free tier and a $1.99 paid option — and exposes a self-serve developer API that needs no account, just a prepaid key. Under the hood it's a real fax system, not a wrapper around someone else's API. The service terminates a T.38 SIP trunk through Asterisk's res_fax_spandsp, drives outbound calls over AMI, and reconciles delivery results back into a job queue. Around that I built a Go web app, a document pipeline, billing, email, and abuse controls.
Highlights
- Real T.38 fax engine — Asterisk + res_fax_spandsp over a T38Fax SIP trunk, driven from Go via AMI, with per-job status reconciliation from Asterisk FAXRESULT events.
- Document pipeline — accepts PDF, Word (DOC/DOCX), PNG/JPEG, PostScript, and TIFF; converts via Ghostscript, headless LibreOffice, and ImageMagick; merges up to 10 files into one fax; auto-generates branded cover pages.
- Free + paid tiers — free faxes (3 pages, 2/day, captcha + email confirmation) and $1.99 paid faxes via Stripe Checkout, with automatic refunds on failed delivery.
- Public JSON API at api.ineedtosendafax.com — prepaid credit keys, no accounts, idempotent submissions, signed webhooks, rate limits, and OpenAPI docs.
- Reliability engineering — retry with backoff, a channel-aware stale-job reaper that never cuts off long multi-page faxes, late-event guards, and content auto-purge.
- Ops — in-process Let's Encrypt TLS, systemd services, PostgreSQL, Resend transactional email, an abuse/admin console, and automated tests — all running on a single small VPS. Stack: Go · PostgreSQL · Asterisk (T.38) · AMI · Stripe · Resend · Let's Encrypt (autocert) · Ghostscript · LibreOffice · ImageMagick · systemd · Debian