Phone validation usually stops at the numbering plan: does the number have the right shape for its country? That question has a precise answer, and libphonenumber gives it for every region on earth. But the plan describes what a number could be, not whether anyone was ever given it. A regulator's allocation table answers the second question, and Spaw reads it for the countries whose regulators publish one, from the United States and the United Kingdom to France, Mexico, Poland and Italy. This guide explains the two layers, what each status in the answer means, and why a number in a block nobody holds is free.
Two layers of validity
The first layer is the numbering plan. For the United States it says a number is an area code, a central office code that does not start with 0 or 1 and is not a service code such as 911, and four more digits. Every number of that shape is "valid" in the plan's sense: it could be assigned. Spaw reports this layer through valid and the reasons too_short, too_long, invalid_length and invalid_number.
The second layer is allocation. Regulators hand numbers to carriers in blocks and publish which blocks went where. A number can pass the plan and still sit in a block that was never handed to anyone, in which case no carrier can have connected it, no handset rings when it is dialled, and no text message reaches a person. Spaw reports this layer through block_status and, for a geographic number in a block nobody holds, through valid: false with the reason unassigned_block.
Where the tables come from
-
United States and its territories. NANPA publishes a report of every utilized central office code with its holder (https://www.nanpa.com/reports/co-code-reports, accessed 5 September 2026). The report lists assigned codes only, so a geographic code absent from it has not been assigned. The service codes such as 911 and 555 appear marked as unavailable. Inside a pooled code, NANPA's thousands-block report (https://www.nanpa.com/reports/thousands-block-reports/region, accessed 25 September 2026) lists every block of a thousand with its status, so a block it lists as available is unassigned too; one still partly in use by its former holder, or available only from a future date, is not read as free.
-
Canada. The Canadian Numbering Administrator publishes a status table for every code in every Canadian area code (https://www.cnac.ca/co_codes/co_code_status.htm, accessed 5 September 2026): in service, assigned, available, for special use, plant test and a few more.
-
United Kingdom and the Crown dependencies. Ofcom publishes its National Numbering Scheme as a set of tables, one per leading digit, with a status for every block: allocated, free, protected, quarantined, reserved and designated (https://www.ofcom.org.uk/phones-and-broadband/phone-numbers/numbering-data, accessed 5 September 2026).
-
France and its overseas departments. ARCEP publishes the ranges it has attributed to each operator and, separately, the numbers it has frozen (https://www.data.gouv.fr/fr/datasets/ressources-en-numerotation-telephonique/), under the Licence Ouverte.
-
Australia. ACMA's numbering register lists every range with its status: allocated or spare (https://www.thenumberingsystem.com.au).
-
Netherlands. ACM's number register lists assigned ranges, ranges cooling off after being returned, and blocked ones (https://www.acm.nl/nl/telefoonnummers-zoeken).
-
New Zealand. The NAD's number register lists assigned, spare, protected and reserved codes (https://www.nad.org.nz).
-
Mexico. The public numbering plan of the CRT, which replaced the IFT in October 2025, lists every assigned range with its operator (https://sns.ift.org.mx, still under the IFT's name).
-
Poland. UKE's numbering tables list fixed and mobile assignments and the ranges it holds in reserve (https://numeracja.uke.gov.pl).
-
Italy. MIMIT's assigned-numbering workbook lists the mobile and nomadic ranges it has assigned to each operator (https://www.mimit.gov.it/it/comunicazioni/telefonia/risorse-di-numerazione).
Spaw syncs the ten tables weekly, and the United States report daily, and names the table it used in sources, with the date the file declared or the date it was synced. Five of them list every block they have assigned (the United States, Canada, France, the Netherlands and Mexico), so there a geographic number in a block the table leaves out has no holder either. The others answer only for the blocks they list, and say nothing about a number outside them. What each table holds today, and whether it is complete, is on its country's page: the United States, Canada, the United Kingdom, France, Australia, the Netherlands, New Zealand, Mexico, Poland and Italy. Who publishes each table, the files it comes in, the terms it is published under and what the installed copy holds is on the phone data sources page.
What the three statuses mean
Spaw folds each regulator's vocabulary into three values so an integration never has to learn them all.
block_status |
Meaning | Effect |
|---|---|---|
allocated |
A carrier or communications provider holds the block. | The number is valid; the holder is reported as carrier. |
unassigned |
Nobody holds the block: absent from the NANPA code report or "available" in its thousands-block report and not contaminated, "available" in the Canadian table, "free", "protected" or "quarantined" in Ofcom's, frozen in ARCEP's, spare in ACMA's or the NAD's, cooling off in ACM's, held in UKE's regulatory reserve. | A geographic number answers valid: false, reason unassigned_block, free — except one in a range reserved for fiction, such as an Ofcom drama range, which stays valid with is_fictional true. |
reserved |
Held back for a special purpose: the 555 and N11 service codes, plant test codes, Ofcom's designated blocks. | The number stays valid and gains the reserved_block risk signal. |
The mapping is deliberately conservative. A block Ofcom lists as "protected" is withheld from allocation, and a "quarantined" one has been returned by a provider and is resting before reuse; in both cases no number in it can be in service today, so both read as unassigned. A "designated" block is set aside for a purpose the table does not spell out, so it stays valid with a warning rather than being called empty.
Why the answer is free
Spaw charges for answers that are usable, not for attempts. A number in an unassigned block is an answer of the same kind as a number that is too short: it tells you the number cannot reach anyone, and there is nothing further to learn about it. So unassigned_block costs nothing, like every other invalid answer, and the response still carries the parsed number, its formats and the block status, so you can see what was checked and drop the record with confidence.
The freshness gate
Calling a block unassigned is a strong claim, and it rests on the table being current. Codes are assigned every week, and a code assigned after the last sync would look free to a stale copy. Spaw therefore infers "nobody holds it" only from a table that lists every assigned block of its plan and was synced within the last 45 days. When the copy is older, the inference switches off: the number answers valid: true with block_status: null, and sources shows the stale date so you can see why. Ofcom's tables list unassigned blocks explicitly, so for the UK the status is read, never inferred.
Two more guards protect the answer. A download that would shrink a table by more than a few percent is refused, because a truncated file or a changed format would otherwise turn real numbers into unassigned blocks at scale. And the tables are only ever consulted for the regions they cover: a German number answers block_status: null and is judged by the plan alone, because no German table is installed.
What to do with it
- At signup, reject
unassigned_blockthe way you rejecttoo_short: show the person the number that was checked and ask for another. - In a CRM clean-up, drop those rows or move them to a review list. They were never real numbers, whatever the export says.
- Do not treat
reservedas invalid. A number in a reserved block can connect to a service; it just is not a subscriber. Use the risk signal and decide per use case. - Read
sources. The table's date tells you how fresh the claim is, andblock_status: nulltells you no claim was made.
Where the numbering plan and the allocation table disagree, the table wins, because it is the regulator's own record of what exists. Where the table is silent, the plan's answer stands and nothing is inferred.
What to do next
- Read the unassigned_block reason page for the exact wording and an example answer.
- Read the phone intelligence guide for every field and where it comes from.
- Check the request and response on the POST /api/v1/phone reference.
- See what the same tables say about the holder of an allocated block in why US numbers cannot be split into mobile and landline.