Skip to content

shared_cost

A shared-cost number

The Spaw phone risk signal shared_cost adds 20 points to risk_score when the numbering plan types the number as shared cost, including the UK 084 and 087 ranges (dataset libphonenumber).

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

What it means

A shared-cost number splits the charge between the caller and the called party and reaches a service rather than a person's handset. line_type answers shared_cost with line_type_source numbering_plan, and the dataset is libphonenumber.

In the United Kingdom Ofcom's numbering plan classes 084 and 087 as service numbers whose charge is capped, and keeps premium rate for 09. libphonenumber's metadata files 0842 to 0845 and 0870 to 0873 as premium rate, so Spaw types them from the plan instead.

What it cannot tell you

  • It reads the plan, not the tariff: it cannot tell you what a call or message costs.
  • 0871 to 0873 still fall under Ofcom's premium-rate-services rules, and the default SMS policy, which blocks premium_rate, does not block them. Add shared_cost to blocked_line_types to refuse the whole type.

What to do

Refuse it as a contact number for codes with blocked_line_types shared_cost if you do not want service numbers. On its own it scores 20 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": "shared_cost",
    "line_type_source": "numbering_plan",
    "risk_score": 20,
    "risk_level": "low",
    "risk_signals": [
        {
            "signal": "shared_cost",
            "weight": 20,
            "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/shared_cost.md