Skip to content

voip

The numbering plan types the number as VoIP

The Spaw phone risk signal voip adds 30 points to risk_score when libphonenumber's numbering-plan metadata types the number as VoIP, such as the UK 056 range (dataset libphonenumber).

risk weight
+30
dataset
libphonenumber
reads from
line_type
default SMS policy
does not block it on its own: +30 is within the default ceiling of 60, which blocks only a score above it.

What it means

Some plans set ranges aside for internet telephony: the UK's 056, and some ranges under the international network codes. line_type answers voip with line_type_source numbering_plan, and the dataset is libphonenumber.

It is separate from virtual, which reads the holder of the block from a regulator's table. A North American number whose block holder is a VoIP provider answers line_type voip from block_allocation and carries virtual, not this signal.

What it cannot tell you

  • It reads the plan's range, not the service behind the number: Spaw does not separate fixed from non-fixed VoIP, and a range typed VoIP can carry an ordinary business line.
  • Many VoIP numbers sit in ranges the plan types as geographic or mobile, where only the block holder can tell them apart.

What to do

Weigh it with the rest; blocked_line_types voip refuses the line type outright. On its own it scores 30 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

An excerpt of an answer carrying this signal alone, with the number and the other fields left out, because no test number answers it. The score and the decision are worked out as the lookup and the default SMS policy work them out.

{
    "valid": true,
    "country": "GB",
    "line_type": "voip",
    "line_type_source": "numbering_plan",
    "risk_score": 30,
    "risk_level": "medium",
    "risk_signals": [
        {
            "signal": "voip",
            "weight": 30,
            "dataset": "libphonenumber"
        }
    ],
    "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

markdown version: /docs/signals/phone/voip.md