Code copied successfuly

Network Signals API

Version: v1.0.0

Specification Release Notes Other versions

This is the OpenAPI specification for the Network Signals product.

The Network Signals API provides services to verify and check information about phone numbers, including:

  • SIM swap detection and date retrieval
  • Device swap detection and date retrieval
  • Call forwarding status check

Base URLs

SIM Swap

SIM swap services allow you to check if a SIM card has been swapped recently and retrieve the date of the latest SIM change.

Check SIM swap

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/network-signal/v1/sim-swap/check \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apiKey: API_KEY'

POST https://api.tyntec.com/network-signal/v1/sim-swap/check HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json
apiKey: API_KEY

const inputBody = '{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apiKey':'API_KEY'

};

fetch('https://api.tyntec.com/network-signal/v1/sim-swap/check',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apiKey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/network-signal/v1/sim-swap/check',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apiKey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/network-signal/v1/sim-swap/check', params={

}, headers = headers)

print(r.json())

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apiKey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/network-signal/v1/sim-swap/check', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/network-signal/v1/sim-swap/check");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("apiKey", "API_KEY");

int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apiKey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/network-signal/v1/sim-swap/check", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /sim-swap/check

Check if a SIM card has been swapped within a specified time period.

This endpoint allows you to verify if the SIM card associated with a phone number has been changed within the last maxAge minutes (default: 240 minutes, maximum: 2400 minutes).

Body parameter

{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}

Parameters

Name In Type Required Description
body body SimSwapCheckRequest true none

Example responses

200 Response

{
  "swapped": true
}

Responses

Status Meaning Description Schema
200 OK Successful response SimSwapResponse
400 Bad Request Bad Request - Invalid argument or out of range Inline
401 Unauthorized Unauthorized - Missing, invalid, or expired credentials UnauthenticatedError
403 Forbidden Forbidden - Insufficient permissions PermissionDeniedError
404 Not Found Not Found - Resource not found NotFoundError
500 Internal Server Error Internal Server Error InternalServerError
Response Schema

Retrieve SIM swap date

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apiKey: API_KEY'

POST https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json
apiKey: API_KEY

const inputBody = '{
  "phoneNumber": "+491234567890"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apiKey':'API_KEY'

};

fetch('https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apiKey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apiKey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date', params={

}, headers = headers)

print(r.json())

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apiKey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("apiKey", "API_KEY");

int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apiKey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/network-signal/v1/sim-swap/retrieve-date", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /sim-swap/retrieve-date

Retrieve the date of the latest SIM card change for a phone number.

This endpoint returns the timestamp of the most recent SIM swap, or null if no SIM swap has been detected.

Body parameter

{
  "phoneNumber": "+491234567890"
}

Parameters

Name In Type Required Description
body body PhoneNumberRequest true none

Example responses

200 Response

{
  "latestSimChange": "2024-09-18T07:37:53.471829447Z"
}

Responses

Status Meaning Description Schema
200 OK Successful response LatestSimChangeResponse
400 Bad Request Bad Request - Invalid argument InvalidArgumentError
401 Unauthorized Unauthorized - Missing, invalid, or expired credentials UnauthenticatedError
403 Forbidden Forbidden - Insufficient permissions PermissionDeniedError
404 Not Found Not Found - Resource not found NotFoundError
500 Internal Server Error Internal Server Error InternalServerError

Device Swap

Device swap services allow you to check if a device has been swapped recently and retrieve the date of the latest device change.

Check device swap

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/network-signal/v1/device-swap/check \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apiKey: API_KEY'

POST https://api.tyntec.com/network-signal/v1/device-swap/check HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json
apiKey: API_KEY

const inputBody = '{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apiKey':'API_KEY'

};

fetch('https://api.tyntec.com/network-signal/v1/device-swap/check',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apiKey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/network-signal/v1/device-swap/check',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apiKey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/network-signal/v1/device-swap/check', params={

}, headers = headers)

print(r.json())

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apiKey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/network-signal/v1/device-swap/check', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/network-signal/v1/device-swap/check");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("apiKey", "API_KEY");

int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apiKey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/network-signal/v1/device-swap/check", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /device-swap/check

Check if a device has been swapped within a specified time period.

This endpoint allows you to verify if the device associated with a phone number has been changed within the last maxAge minutes (default: 240 minutes, maximum: 2400 minutes).

Body parameter

{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}

Parameters

Name In Type Required Description
body body DeviceSwapCheckRequest true none

Example responses

200 Response

{
  "swapped": true
}

Responses

Status Meaning Description Schema
200 OK Successful response DeviceSwapResponse
400 Bad Request Bad Request - Invalid argument or out of range Inline
401 Unauthorized Unauthorized - Missing, invalid, or expired credentials UnauthenticatedError
403 Forbidden Forbidden - Insufficient permissions PermissionDeniedError
404 Not Found Not Found - Resource not found NotFoundError
500 Internal Server Error Internal Server Error InternalServerError
Response Schema

Retrieve device swap date

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apiKey: API_KEY'

POST https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json
apiKey: API_KEY

const inputBody = '{
  "phoneNumber": "+491234567890"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apiKey':'API_KEY'

};

fetch('https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apiKey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apiKey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date', params={

}, headers = headers)

print(r.json())

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apiKey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("apiKey", "API_KEY");

int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apiKey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/network-signal/v1/device-swap/retrieve-date", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /device-swap/retrieve-date

Retrieve the date of the latest device change for a phone number.

This endpoint returns the timestamp of the most recent device swap, or null if no device swap has been detected.

Body parameter

{
  "phoneNumber": "+491234567890"
}

Parameters

Name In Type Required Description
body body PhoneNumberRequest true none

Example responses

200 Response

{
  "latestSimChange": "2024-09-18T07:37:53.471829447Z"
}

Responses

Status Meaning Description Schema
200 OK Successful response LatestDeviceChangeResponse
400 Bad Request Bad Request - Invalid argument InvalidArgumentError
401 Unauthorized Unauthorized - Missing, invalid, or expired credentials UnauthenticatedError
403 Forbidden Forbidden - Insufficient permissions PermissionDeniedError
404 Not Found Not Found - Resource not found NotFoundError
500 Internal Server Error Internal Server Error InternalServerError

Call Forwarding

Call forwarding service allows you to check if unconditional call forwarding is currently active for a phone number.

Check call forwarding status

Code samples

# You can also use wget
curl -X POST https://api.tyntec.com/network-signal/v1/call-forwarding/check \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'apiKey: API_KEY'

POST https://api.tyntec.com/network-signal/v1/call-forwarding/check HTTP/1.1
Host: api.tyntec.com
Content-Type: application/json
Accept: application/json
apiKey: API_KEY

const inputBody = '{
  "phoneNumber": "+491234567890"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'apiKey':'API_KEY'

};

fetch('https://api.tyntec.com/network-signal/v1/call-forwarding/check',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'apiKey' => 'API_KEY'
}

result = RestClient.post 'https://api.tyntec.com/network-signal/v1/call-forwarding/check',
  params: {
  }, headers: headers

p JSON.parse(result)

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'apiKey': 'API_KEY'
}

r = requests.post('https://api.tyntec.com/network-signal/v1/call-forwarding/check', params={

}, headers = headers)

print(r.json())

<?php

require 'vendor/autoload.php';

$headers = array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'apiKey' => 'API_KEY',

    );

$client = new \GuzzleHttp\Client();

// Define array of request body.
$request_body = array();

try {
    $response = $client->request('POST','https://api.tyntec.com/network-signal/v1/call-forwarding/check', array(
        'headers' => $headers,
        'json' => $request_body,
       )
    );
    print_r($response->getBody()->getContents());
 }
 catch (\GuzzleHttp\Exception\BadResponseException $e) {
    // handle exception or api errors.
    print_r($e->getMessage());
 }

 // ...

URL obj = new URL("https://api.tyntec.com/network-signal/v1/call-forwarding/check");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestProperty("apiKey", "API_KEY");

int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "apiKey": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.tyntec.com/network-signal/v1/call-forwarding/check", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /call-forwarding/check

Check if unconditional call forwarding is currently active for a phone number.

This endpoint verifies whether the specified phone number has call forwarding enabled.

Body parameter

{
  "phoneNumber": "+491234567890"
}

Parameters

Name In Type Required Description
body body PhoneNumberRequest true none

Example responses

200 Response

{
  "active": true
}

Responses

Status Meaning Description Schema
200 OK Successful response CallForwardingResponse
400 Bad Request Bad Request - Invalid argument or out of range Inline
401 Unauthorized Unauthorized - Missing, invalid, or expired credentials UnauthenticatedError
403 Forbidden Forbidden - Insufficient permissions PermissionDeniedError
404 Not Found Not Found - Resource not found NotFoundError
500 Internal Server Error Internal Server Error InternalServerError
Response Schema

Schemas

PhoneNumberRequest

{
  "phoneNumber": "+491234567890"
}

Properties

Name Type Required Restrictions Description
phoneNumber string true none The phone number of the subscriber, according to E.164 standard

SimSwapCheckRequest

{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}

Properties

Name Type Required Restrictions Description
phoneNumber string true none The phone number of the subscriber, according to E.164 standard
maxAge integer false none Time counted in minutes

DeviceSwapCheckRequest

{
  "phoneNumber": "+491234567890",
  "maxAge": 120
}

Properties

Name Type Required Restrictions Description
phoneNumber string true none The phone number of the subscriber, according to E.164 standard
maxAge integer false none Time counted in minutes

SimSwapResponse

{
  "swapped": true
}

Properties

Name Type Required Restrictions Description
swapped boolean false none Indicates whether a SIM swap has occurred within the specified time period

DeviceSwapResponse

{
  "swapped": true
}

Properties

Name Type Required Restrictions Description
swapped boolean false none Indicates whether a device swap has occurred within the specified time period

LatestSimChangeResponse

{
  "latestSimChange": "2024-09-18T07:37:53.471829447Z"
}

Properties

Name Type Required Restrictions Description
latestSimChange string(date-time)¦null false none Timestamp of the latest SIM change in ISO 8601 format, or null if no change detected

LatestDeviceChangeResponse

{
  "latestSimChange": "2024-09-18T07:37:53.471829447Z"
}

Properties

Name Type Required Restrictions Description
latestSimChange string(date-time)¦null false none Timestamp of the latest device change in ISO 8601 format, or null if no change detected

CallForwardingResponse

{
  "active": true
}

Properties

Name Type Required Restrictions Description
active boolean false none Indicates whether unconditional call forwarding is currently active

InvalidArgumentError

{
  "status": 400,
  "code": "INVALID_ARGUMENT",
  "message": "Client specified an invalid argument, request body or query param."
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message

OutOfRangeError

{
  "status": 400,
  "code": "OUT_OF_RANGE",
  "message": "Client specified an invalid range."
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message

UnauthenticatedError

{
  "status": 401,
  "code": "UNAUTHENTICATED",
  "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required."
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message

PermissionDeniedError

{
  "status": 403,
  "code": "PERMISSION_DENIED",
  "message": "Client does not have sufficient permissions to perform this action."
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message

NotFoundError

{
  "status": 404,
  "code": "NOT_FOUND",
  "message": "The specified resource is not found."
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message

InternalServerError

{
  "status": 500,
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Request could not be processed"
}

Properties

Name Type Required Restrictions Description
status integer true none HTTP status code
code string true none Error code
message string true none Error message