Skip to content

disposable_stale

Published by an SMS-receiving website, but not recently

The Spaw phone risk signal disposable_stale adds 40 points to risk_score when the open SMS-receiving lists Spaw merges carry the number but last showed it more than 365 days ago, or every list dropped it and last saw it more than 90 days ago (dataset disposable-phone-numbers).

risk weight
+40
dataset
disposable-phone-numbers
reads from
is_disposable, disposable_seen_at
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

It takes the place of disposable (+70) once a listing is no longer fresh: still listed and last seen more than 365 days ago, or dropped by every list and last seen more than 90 days ago. is_disposable stays true and disposable_seen_at gives the date, so you can apply a cut-off of your own.

The lists keep numbers long after a site stops showing them, and a number a site gave up may have gone back to its carrier and been issued to someone who never saw the site; the lower weight reflects that. A dropped number leaves the table 730 days after it was last seen.

What it cannot tell you

  • It cannot tell you whether the number was reissued: neither the lists nor the regulator tables record a reassignment, so a stale listing is a hint, not a verdict.
  • An undated listing never reaches it while a list still carries the number: it counts as fresh.

What to do

Weigh it with the rest of the answer, or apply a cut-off of your own to disposable_seen_at. 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

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": "mobile",
    "line_type_source": "numbering_plan",
    "is_disposable": true,
    "disposable_seen_at": "2025-03-14",
    "risk_score": 40,
    "risk_level": "medium",
    "risk_signals": [
        {
            "signal": "disposable_stale",
            "weight": 40,
            "dataset": "disposable-phone-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

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