35+ countries live across 4 regions

For your reviewers

Elsewhere

Get your coverage map

sim_swap

sim_swap tells you how recently the SIM card behind a phone number was changed. In a SIM swap fraud, the victim's number is moved to a new SIM controlled by the fraudster, who then receives the victim's calls and one-time codes. A recent SIM change is therefore a strong signal to ask for extra verification before a password reset, a payment or any other sensitive action.

SIM changes also happen for legitimate reasons, such as a lost phone or a new SIM format. Use the signal to raise the level of checks, not as a verdict on its own.

The data comes in real time from the mobile network, either directly from the operator or through a regional aggregator, depending on the route available for the number. Operators report SIM changes in different ways, and Plumma® Connect returns them all in the same format.

Request

{
  "number": "+393273339145",
  "commands": ["sim_swap"]
}

No other input is needed. Plumma® Connect asks the operator for the date of the last SIM change. When the operator does not give the date, it asks instead whether a change happened in the last 240 hours (10 days). Either way you get one block and are charged once.

Response

The result is in the simswap block:

{
  "status": 0,
  "status_message": "Response from one supplier",
  "simswap": {
    "last_day": 0,
    "risk_indicator": 3,
    "simswap_min_threshold": 72,
    "simswap_max_threshold": 720,
    "date": "2026-09-20T11:00:00.000Z",
    "swapped": false,
    "swapped_max_age": 240
  },
  "version": "..."
}
FieldTypeMeaning
risk_indicator integer How recent the last SIM change is, as a risk level. See the table below. Read this field first.
date string When the last SIM change happened, ISO 8601 in UTC, for example 2026-09-20T11:00:00.000Z. Present only when the operator gives the date, which several networks do not.
last_day integer 1 if the last change was less than 24 hours ago, 0 if it was not. Absent when this cannot be said: when the operator only confirmed a change somewhere within the last 240 hours, and when risk_indicator is negative.
simswap_min_threshold integer (hours) The lower bound of the window the last change falls in: 24, 72 or 720. Absent when the change is less than 24 hours old, and when there is no change to place.
simswap_max_threshold integer (hours) The upper bound of that window: 24, 72 or 720, or 240 when the operator only confirmed a change within the last 240 hours. Absent when the change is more than 720 hours old, and when there is no change to place.
swapped boolean Whether a SIM change happened within the last swapped_max_age hours. Absent when it could not be established, and when risk_indicator is negative.
swapped_max_age integer (hours) The window swapped refers to: 240 on every route. Present whenever swapped is.

Fields that cannot be stated are left out, never sent as null. An absent field means the operator's answer did not support it.

risk_indicator values

ValueMeaningThresholds (min / max)
1Very high risk: change less than 24 hours ago.none / 24
2High risk: change 24 to 72 hours ago.24 / 72
3Medium risk: change 72 to 720 hours (30 days) ago, or a change confirmed only as "within the last 240 hours".72 / 720, or none / 240
4Low risk: change more than 720 hours ago. Given only when the operator's own records cover at least 720 hours.720 / none
0Lowest risk: the operator found no SIM change in the period it covers. This is not a statement about a date.none / none
-1No data: the operator answered that it has nothing it can give for this number, for example because the number is not one of its subscribers or the service does not apply to it.none / none
-2Reserved for an operator that declines to answer for a specific number. No route returns it today.none / none

Treat negative values as "no signal", never as low risk. They describe what the operator could tell you, not the subscriber.

When there is no simswap block

If the operator could not be reached or did not answer, for example because the request was not authorized on its side, the response has no simswap block. The status is 4, and the status_message names sim_swap among the commands that returned no data. If the number's country is not covered for sim_swap, the status is 2, or 4 when other commands were served.

Coverage and billing

A covered country does not mean that every operator in it releases the data. risk_indicator: -1 is an answer from the operator and is charged like any other result. A request with no simswap block is not charged.

Before committing to a country, test a sample of numbers and look at the share of -1 answers for each operator, not only at the share of requests that got a response. A route can answer every request and still give little usable signal.

API reference

Request

curl -X POST "https://api.connect.plumma.it/services/api" \
-H "Content-Type: application/json" \
-H "x-plumma-connect-api-key: YOUR_API_KEY_HERE" \
-H "x-plumma-connect-app-id: YOUR_APP_ID_HERE" \
-d '{
  "number": "+33601000001",
  "commands": [
    "sim_swap"
  ]
}'

Response (timestamp-based)

{
  "number": "+390612345678",
  "status": 0,
  "status_message": "Response from one supplier - This response is for demo purpose only [cmd_enc=262144] [{sim_swap=SUPPLIER0 : Success}]",
  "simswap": {
    "last_day": 0,
    "risk_indicator": 2,
    "simswap_min_threshold": 24,
    "simswap_max_threshold": 720,
    "date": "2023-12-19 11:58:42 UTC"
  },
  "version": "1.0.2-20260608095239"
}

Response (time-window)

{
  "number": "+447700900123",
  "status": 0,
  "status_message": "Response from one supplier - This response is for demo purpose only [cmd_enc=262144] [{sim_swap=SUPPLIER0 : Success}]",
  "simswap": {
    "last_day": 1,
    "risk_indicator": 1,
    "simswap_min_threshold": 0,
    "simswap_max_threshold": 24
  },
  "version": "1.0.2-20260608095239"
}

Response (no data)

{
  "number": "+34611222333",
  "status": 0,
  "status_message": "Response from one supplier - This response is for demo purpose only [cmd_enc=262144] [{sim_swap=SUPPLIER0 : OK}]",
  "simswap": {
    "risk_indicator": -1
  },
  "version": "1.0.2-20260608095239"
}

Read this in the portal, with search and the reference beside it: Sim Swap