Connect

Connect your application to the mobile network for real-time fraud detection and frictionless authentication. Query SIM swap, call forwarding, and device swap signals before every sensitive action — or go fully passwordless with Silent Authentication, which verifies users automatically in the background without sending a single OTP. Simple API calls, no user interaction required.

Endpoint Reference

Endpoint reference

Base URL for all endpoints:

https://api.tyntec.com/network-signal/v1

Authentication: all endpoints require the

apiKey: <your_api_key>   (HTTP header)

SIM Swap

Check SIM Swap

POST /sim-swap/check

Returns true if the SIM has been swapped within the maxAge window.

Request body:

Field Description
phoneNumber string — required. Phone number in E.164 international format,
with or without the leading “+”, or using the international “00” prefix
(e.g. +491234567890, 491234567890, or 00491234567890).
maxAge integer — optional. Lookback window in minutes. Default: 240. Maximum: 2400.

Response body (200 OK):

{ "swapped": true }
swapped boolean — true if a SIM swap was detected within the maxAge window, false otherwise.

 

Retrieve SIM Swap date

POST /sim-swap/retrieve-date

Returns the timestamp of the most recent SIM change, or null if none detected.

Request body:

phoneNumber string — required. Phone number in E.164 international format,
with or without the leading “+”, or using the international “00” prefix
(e.g. +491234567890, 491234567890, or 00491234567890).

Response body (200 OK)

{ "latestSimChange": "2024-09-18T07:37:53.471829447Z" }
latestSimChange string (ISO 8601 datetime) or null — timestamp of the most recent SIM change. Null if no SIM swap has been detected.

Device Swap

Check Device Swap

POST /device-swap/check

Returns true if the device (IMEI) has changed within the maxAge window.

Request body:

Field Description
phoneNumber string — required. Phone number in E.164 international format,
with or without the leading “+”, or using the international “00” prefix
(e.g. +491234567890, 491234567890, or 00491234567890).
maxAge integer — optional. Lookback window in minutes. Default: 240. Maximum: 2400.

Response body (200 OK):

{ "swapped": true }

 

swapped boolean — true if a Device Swap was detected within the maxAge window, false otherwise.

 

Retrieve Device Swap date

POST /device-swap/retrieve-date

Returns the timestamp of the most recent Device Swap, or null if none detected.

Request body:

phoneNumber string — required. Phone number in E.164 international format,
with or without the leading “+”, or using the international “00” prefix
(e.g. +491234567890, 491234567890, or 00491234567890).

Response body (200 OK):

{ "latestDeviceChange": "2024-09-18T07:37:53.471829447Z" }
latestDeviceChange string (ISO 8601 datetime) or null — timestamp of the most recent Device Swap. Null if no change has been detected.

 

Call Forwarding

Check Call Forwarding status

POST /call-forwarding/unconditional/check

Returns true if unconditional call forwarding is currently active on the line.

Request body:

phoneNumber

string — required. Phone number in E.164 international format,
with or without the leading “+”, or using the international “00” prefix
(e.g. +491234567890, 491234567890, or 00491234567890).

 

Response body (200 OK):

{ "active": true }

active

boolean — true if unconditional call forwarding is currently active, false otherwise.

 

Error responses

All endpoints return the same error response structure:

{
  "status": 400,
  "code": "INVALID_ARGUMENT",
  "message": "Client specified an invalid argument, request body or query param."
}
Status / Code Meaning
400 INVALID_ARGUMENT The request body or a parameter is malformed or invalid.
400 OUT_OF_RANGE A numeric parameter (e.g. maxAge) is outside its allowed range.
401 UNAUTHENTICATED The apiKey header is missing, invalid, or expired.
403 PERMISSION_DENIED Your API key does not have access to this endpoint.
404 NOT_FOUND The requested phone number or resource was not found.
500 INTERNAL_SERVER_ERROR An unexpected error occurred on the server. Retry with backoff.