virtual
The block is held by a virtual-number wholesaler or VoIP provider
The Spaw phone risk signal virtual adds 40 points to risk_score when the regulator's allocation table shows the number's block allocated to a virtual-number wholesaler or VoIP provider (the regulator table of the number's country).
- risk weight
- +40
- dataset
- the regulator table of the number’s country: nanpa-co-codes, cnac-co-codes, ofcom-numbering, arcep-numbering, acma-numbering, acm-nummerregister, nad-number-register, ift-numeracion, uke-numeracja, mimit-numerazione
- reads from
- is_virtual
- default SMS policy
- does not block it on its own: +40 is within the default ceiling of 60, which blocks only a score above it.
What it means
Virtual-number providers hold whole blocks and rent numbers from them by the month or the day, so one person can collect many and let them go. Spaw reads the holder of the number's block from the regulator's table and classifies holders by name: is_virtual answers true for a block held by such a provider, false for another holder, and null when no regulator table covers the number. risk_signals names the table that answered.
In North America the holder also settles the line type: a block held by a virtual-number wholesaler answers line_type voip with line_type_source block_allocation, where the plan alone says fixed_line_or_mobile, and the plan-based voip signal does not fire beside it. In a pooled US code the holder is that of the number's own thousands-block where NANPA's block report lists it; in Canada the table is the code holder's alone.
What it cannot tell you
- It names the original allocation, never who serves the number today: a number ported out of a wholesaler's block still carries the signal, and one ported into it does not.
- It does not separate fixed from non-fixed VoIP: a business line on a hosted phone system and a number rented through an app can both sit in such a block.
- Holders are classified by name, so a provider whose name settles nothing is not counted.
What to do
Weigh it with the rest: plenty of real people use virtual numbers. For one-time codes, read it beside range_burst and the disposable signals. On its own it scores 40 and passes the default SMS policy, which blocks a score above 60; beside other signals the score can pass that.
The SMS policy is set per account with PUT /api/v1/phone/policy or the dashboard’s SMS policy tab, and its block_signals may list any signal, this one included; the phone guide lists every rule and its default.
Example response
The sandbox answer for the test number +1 202-555-0102, cut to the fields that matter here. Test numbers are free on every key and name the dataset test-numbers; a live lookup names the regulator table that answered.
{
"valid": true,
"e164": "+12025550102",
"country": "US",
"line_type": "voip",
"line_type_source": "block_allocation",
"carrier": "Spaw Test VoIP",
"is_virtual": true,
"risk_score": 40,
"risk_level": "medium",
"risk_signals": [
{
"signal": "virtual",
"weight": 40,
"dataset": "test-numbers"
}
],
"ok_to_send": true,
"blocked_by": null
}A real answer carries every field, listed in the validate-phone reference; the weights of every entry in risk_signals sum to risk_score, capped at 100.
Related
- reserved_block · the regulator's table marks the block reserved
- The weights table in the phone guide
- Glossary: NPA-NXX
- Why US numbers cannot be split into mobile and landline
- Stop OTP abuse with block data and disposable numbers
- Glossary: SMS policy
- Where each regulator table comes from
- All phone risk signals
markdown version: /docs/signals/phone/virtual.md