**Fax Data API – Destinations, Country Codes and Prices as JSON**

> Free JSON API for fax data: the destinations an app dials, 250 territories with number-routing rules, page prices and the ITU-T timing model. No key, CC BY 4.0.

Source: https://faxvio.com/api/ · updated: 2026-09-11

[Home](https://faxvio.com/) Data API

**11-OCT-2026** · FAXVIO.COM/API · 37 DESTINATIONS · 250 TERRITORIES · NO KEY

# The Faxvio data API: four fax datasets, keyless and free to reuse

Four datasets, published as plain JSON on the same origin as the pages: the countries a fax app will dial,
the routing rules that turn a number as printed into a territory, what a page costs, and the model behind
how long a fax takes. No key, no account, no rate limit beyond ordinary fair use, and reuse is licensed
with a link back.

*The four datasets, with the endpoint that serves each*

| Dataset | Size | Endpoint | What is in it |
| --- | --- | --- | --- |
| Fax destinations | 37 countries | [destinations.json](https://faxvio.com/api/v1/destinations.json) | The countries and territories the Faxvio app will dial, with dial code, region and the local prefixes billed at two pages per page. |
| Country table and number routing | 250 territories | [countries.json](https://faxvio.com/api/v1/countries.json) | The fax carrier's whole country table, plus the trunk-prefix, shared-dial-code and NANP area-code rules that decide which territory a typed number belongs to. |
| Page pricing | 4 packs | [pricing.json](https://faxvio.com/api/v1/pricing.json) | The four App Store page packs with their US prices, the billing terms, and a dated snapshot of what the same fax costs elsewhere. |
| Transmission-time model | model + 4 worked examples | [transmission-time.json](https://faxvio.com/api/v1/transmission-time.json) | The ITU-T T.4 page geometry, T.30 session overhead and modem bit rates behind an estimate of how long a fax takes. |

## Where these numbers come from

Everything here is derived at build time from the app itself rather than typed into a file. The
destination list is read from the Faxvio app's own server configuration — the allow-list the app checks
a number against before a page is charged — so the API publishes the rule rather than a description of
it. The prices are the four App Store product records, whose identifiers are immutable, so a pack size
cannot silently change underneath a price. The routing rules and the transmission-time constants are
the same modules the free tools on this site run on, which are in turn a port of the app's own engine,
checked against the app's test vectors at every build.

That matters for a reader deciding whether to trust the file. A marketing page and a data file usually
drift apart because they are maintained separately; here they are the same source rendered twice, so a
disagreement between the JSON and the page would be a build failure rather than something a reader has
to notice. The current snapshot is list version 20260902, read 2026-09-06,
and both dates are printed in every payload and in the footer of every page.

## What it costs to use: nothing, with one condition

There is no key to request. Every endpoint is a static file behind a CDN, served with an open
cross-origin header, so browser JavaScript is a first-class consumer and a script that runs once a month
is as welcome as one that runs once. The single condition is attribution: the data is published under
CC BY 4.0, and reuse asks for a link back to the endpoint or to the page a figure came from.
A dataset nobody is sure they may reuse does not get reused, and a link back is the only payment this
arrangement collects.

***One source, four surfaces.** The destination list, the limits, the pack prices and the number engine are read from the app at build time and rendered four ways, so the page a person reads and the file a program fetches cannot disagree. Free to reuse with a link to this page*

## What each field means, and what readers get wrong

A JSON schema can say that a field is a boolean. It cannot say which of two plausible questions that
boolean answers, and on this data almost every mistake is that kind of mistake. The table below is the
part of the documentation worth reading before writing any code against these endpoints; the same
notes are carried inside the payloads, so a file that travels away from this page keeps them.

*Field semantics, and the misreading each one invites*

| Field | Where | What it means | What it is not |
| --- | --- | --- | --- |
| sendable | countries.json, destinations.json | Whether the Faxvio app will dial the territory. It comes from the app's own server-side allow-list. | Not the same as carrier_support. Russia has full carrier support and is not sendable. |
| carrier_support | countries.json | The fax carrier's tier for that territory: full, beta or none. | Describes the network, not the app. A "full" territory can still be refused before a page is charged. |
| special_prefixes | destinations.json, countries.json → routing | National-number prefixes that are toll-free, shared-cost or premium. Faxvio charges two pages per page for them. | Matched on the national number after the trunk prefix is removed, never on the raw digits as printed. |
| trunk_zero_dial_codes | countries.json → routing | The dial codes whose national numbers carry a leading zero that the international form drops. | Italy (+39) is deliberately absent. An Italian landline keeps its zero, and stripping it produces a different number. |
| shared_dial_codes | countries.json → routing | National prefixes that move a number to another territory under the same dial code. Longest prefix wins. | A dial code is not a country. +1 covers 24 further territories, +44 three, +599 four. |
| price_per_page_usd | pricing.json | The pack price divided by its size, in US dollars, on the United States storefront. | Apple sets the equivalent price in every other currency. Quote it as a US figure, not a world price. |

## A worked lookup, end to end

Take a number printed on a letterhead as 06698 1234 with the note "Italy".
Strip the formatting, notice that Italy is not in the trunk-zero list, and keep the leading zero: the
international form is +39 06698 1234. Now resolve the territory. The dial
code +39 appears in the shared-dial-code table with one entry, the prefix 06698, which belongs to
Vatican City — so this is not an Italian number at all, and a lookup that stripped the zero first could
never have matched it. Vatican City is in the destination list, so the fax can be sent; it carries no
special prefixes, so four pages cost four pages.

The same procedure with a North American number turns on the area code instead. In
+1 876 555 0188 the first three digits of the national number are 876, which
the area-code exception table maps to Jamaica rather than to the United States. Jamaica is not in the
destination list, so the app refuses the number before charging anything — and an integration that had
assumed +1 meant the United States would have quoted a price for a fax that will never be sent. Both
rules live in the routing block of the country endpoint for exactly this
reason.

## Prices, pages and the doubling rule

Pricing is simple arithmetic with one trap in it. A page costs between $0.18 and $0.36 depending on which of the four packs it was bought in; packs do not expire and there
is no subscription. What changes the total is the destination prefix: toll-free, shared-cost and
premium numbers cost the carrier more to reach, so each page sent to one uses two. The prefixes are
listed per country in the destination endpoint in plain English, and per dial code in the routing block
as raw prefixes for code to match against. A fax to an agency's 800 line therefore costs twice what the
same fax to its local number would, which is worth saying out loud in any answer that quotes a price.

Two limits bound everything: at most 50 pages in one fax, and at most 19 MB in one document. They are in the payload rather than in prose here because a
consumer needs to check them before quoting, not after.

## Reading the site itself, without parsing HTML

Every page on this site has a markdown twin. Append index.md to any path, or
send an Accept: text/markdown header to the ordinary URL and the same address
returns markdown. The twins are generated from the rendered pages at build time, so they cannot fall
behind the HTML, and they run about fifteen per cent of its size — the difference between an agent
reading a page whole and truncating it halfway through a table.

Three further files complete the picture. /llms.txt is an index of the site
with one line per page and a section naming every machine entry point.
/llms-full.txt is the full text of every page in one document.
/auth.md documents the authentication situation, which is that there is none
and none is possible — a statement worth publishing precisely because an agent otherwise has to
discover it by guessing.

*Machine entry points besides the JSON endpoints*

| Path | Standard | What it is for |
| --- | --- | --- |
| [/.well-known/api-catalog](https://faxvio.com/.well-known/api-catalog) | RFC 9727 | Names the OpenAPI description, this page, the catalogue entry and the status endpoint. |
| [/.well-known/ai-catalog.json](https://faxvio.com/.well-known/ai-catalog.json) | ARD | Each dataset with the questions it answers, so a registry can index it. |
| [/.well-known/agent-skills/index.json](https://faxvio.com/.well-known/agent-skills/index.json) | Agent Skills 0.2 | Four skill documents: how to read this data correctly, including the mistakes. |
| [/.well-known/mcp/server-card.json](https://faxvio.com/.well-known/mcp/server-card.json) | MCP | The card for the server at /mcp. Five read-only tools. |
| [/.well-known/oauth-protected-resource](https://faxvio.com/.well-known/oauth-protected-resource) | RFC 9728 | Declares, in one fetch, that there is no authentication to perform. |
| [/llms.txt](https://faxvio.com/llms.txt) | convention | Index of the site and of every entry point on this list. |

## Tools, for an assistant rather than a program

The same data is exposed as five read-only tools over the Model Context Protocol at
/mcp: format a fax number, check a destination, list the destinations,
estimate a cost and estimate a duration. Each one returns the figure together with the page it came
from, so an assistant that used a tool still has something to cite. An A2A endpoint at
/a2a answers the same questions in prose for agents that speak that protocol
instead.

What none of them can do is act. There is no tool that sends a fax, spends a page, creates an account
or reads anything about a person, because none of those has a server-side interface at all — sending
and paying happen inside the app on the user's own device, authenticated by their App Store account.
That is why there is nothing here to authenticate and nothing to abuse, and it is why the OAuth
metadata this site publishes declares an empty list rather than inventing an authorization server.
Faxvio also does not receive faxes, so an agent asked for an inbound number has no answer to give here.

## Caching, freshness and fair use

Cache these files. They are static, they sit behind a CDN with a one-hour edge lifetime, and they change
only when the app's configuration or the App Store products change. If you need to decide whether to
refetch, ask status.json instead: it is under a kilobyte and carries the row
counts and the dates the larger payloads were derived from. A consumer that polls the small file and
refetches the large ones on a change costs this site almost nothing and never serves a stale price.

There is no enforced rate limit. The reasonable shape of use is a scheduled fetch rather than a request
per page view, and a script that hammers a static file gains nothing over one that reads it once and
keeps it.

## Bottom line

faxvio.com publishes four fax datasets as keyless, CORS-open JSON: 37 destinations an
app will dial, 250 territories with the routing rules that resolve a typed number to one
of them, four page packs from $0.18 to $0.36 a page, and the ITU-T model behind
fax duration. Everything is derived from the app at build time, documented by an OpenAPI 3.1 file at [openapi.json](https://faxvio.com/api/v1/openapi.json), and licensed CC BY 4.0 with a link
back. The two fields to read carefully are sendable, which is the app's
allow-list rather than the carrier's coverage, and special_prefixes, which
doubles the page count rather than the price of a page.

## Questions about the API

Do I need a key or an account to use the API?

No. Every endpoint is a static JSON file served from the same origin as the pages, with an open CORS header. There is no key to request, no quota tied to an identity, and no sign-up. Browser JavaScript can fetch it directly.

May I republish the data?

Yes, under CC BY 4.0, including commercially, with a link back to the endpoint or to the page the figure came from. That link is the whole price, and it is the reason the data is published rather than kept.

How often does it change?

Rarely. The destination list moves when the app's server allow-list moves; prices move when the App Store products change. The current snapshot is list version 20260902, read 2026-09-06. Poll status.json rather than the large payloads if you need to know.

Can the API send a fax?

No. Nothing here sends, quotes against a real balance, or touches an account. Sending happens inside the app on a person's own device, paid through their App Store account, and there is no server-side interface an integration could use.

Why publish the carrier country table rather than only the countries you sell to?

Because the two answer different questions, and conflating them is the mistake this data exists to prevent. "Which countries can receive a fax at all" is a property of the network; "which countries will this app dial" is a business decision on top of it. Both fields are in the same row so a reader can see the difference.

Is there an MCP server?

Yes, at /mcp, Streamable HTTP with no authentication, exposing five read-only tools over the same data. Its card is at /.well-known/mcp/server-card.json and an A2A endpoint answering in prose is at /a2a.

## Related on this site

- [The destination list, read by a personReference](https://faxvio.com/destinations/)
- [The routing rules, as a tool in the browserTool](https://faxvio.com/tools/fax-number-format/)
- [What a page costs and why there is no subscriptionPricing](https://faxvio.com/pricing/)
- [The timing model, with the sliders attachedTool](https://faxvio.com/tools/fax-transmission-time/)
- [Ask for a field that is not published yetContact](https://faxvio.com/contact/)

---

HTML version: https://faxvio.com/api/
Structured data for this site: https://faxvio.com/api/v1/openapi.json · https://faxvio.com/llms.txt
Free to quote and reuse with a link back to the source URL above (CC BY 4.0).
