Passer au contenu

API

Introduction

With the API v1.5 in Undetectable, you will be able to get a list of profiles, create, launch, update, and close them. Additionally, with the obtained information, you can connect various automation tools, such as Puppeteer, Playwright, and others, to profiles on the Chromium core.

You can download Chromedriver for working with Selenium here:
Windows
MacOS M series
MacOS Intel

The program must be running to use the API.

By default, the local server runs on port 25325. If this port is occupied, it will start on another port. You can check the port in the program settings and change it if necessary.

To access the local server, use the IP 127.0.0.1, localhost, or the local IP within your network, and the port from the settings, plus the path you want to execute. For example, http://localhost:25325/status.

All API responses look like:

{
"code": `<status code>`,
"status": `<status>`,
"data": `<return object>`,
}

where <status code> and <status> reflect the status:

<status code><status>Description
0”success”success
1”error”error, <return object> = {“error”:“error description”}

<return object> - various data sent by the API, for example, a list of profiles.

Errors have the following format:

{
"code":1,
"status":"error",
"data":
{"error": "error description"},
}

Requests

Status

  • Path: /status
  • Method: GET

Description: Returns the status of the local server, whether it is running or not.

Returning Data
{
"code":0,
"status":"success",
"data":{},
}

List of Profiles

  • Path: /list
  • Method: GET

Description: Returns a list of profiles available in the program on the Chromium browser.

Returning Data
{
"code": 0,
"status": "success",
"data" {
"profile_id1": {
"name": "Profile1", // Profile name in the program
"status": "Available", // Profile status, can be: "Started", "Locked", "Available"
"debug_port": "xxxx", // Browser debug port used for automation (empty if the profile is not running). Only for Chromium browser
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Browser link used for automation (empty if the profile is not running). Only for Chromium browser
"folder": "Name", // Profile folder name
"tags": ["tag1", "tag2", "tag3"], // Profile tags
"cloud_id": "", // Cloud profile ID
"creation_date": 123456789, // Creation date Unix Timestamp
"modify_date": 123456789, // Modification date Unix Timestamp
},
"profile_id2": {
},
},
}

Create Profile

  • Path: /profile/create
  • Method: POST

Description: Creates a profile with the selected parameters. All parameters are optional and may not be present. The list of browsers for the command: Chrome, Edge, FireFox, IE, Opera, Safari, Yandex. The list of OS for the command: Windows, Windows 7, Windows 8, Windows 8.1, Windows 10, Android, iPhone, iPad, Linux, Mac. If there are no configurations with the selected OS or Browser, a random OS or Browser type will be used.
Format: JSON

Paramètres de la requête :
{
"name": "profil avec des paramètres aléatoires", // Nom du profil dans le programme
"os": "Windows", // Configuration du système d'exploitation à utiliser
"browser": "Chrome", // Configuration du navigateur à utiliser
"cpu": 8, // Nombre de cœurs, valeurs possibles : 32, 24, 20, 16, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0
"memory": 8, // Quantité de mémoire, valeurs possibles : 8, 4, 2, 1, 0
"tags": ["tag1", "tag2"], // Définir des tags sur le profil
"geolocation": "12.44, 13.524", // Définir la géolocalisation, si une valeur vide ou incorrecte est saisie, les paramètres par défaut seront utilisés
"resolution": "1024x768", // Résolution de l'écran, valeurs possibles : "800x600", "960x540", "1024x768", "1152x864", "1280x720", "1280x768", "1280x800", "1280x1024", "1366x768", "1408x792", "1440x900", "1400x1050", "1440x1080", "1536x864", "1600x900", "1600x1024", "1600x1200", "1680x1050", "1920x1080", "1920x1200", "2048x1152", "2560x1080", "2560x1440", "3440x1440", "3840x2160", "5120x1440"
"proxy": "socks5://127.0.0.1:5555:login:pass", // Modifier le proxy du profil (les proxies peuvent être http, https, socks5, avec ou sans nom d'utilisateur et mot de passe)
"notes": "Texte", // Modifier les notes du profil
"folder": "testFolder", // Dossier dans lequel le profil sera créé
"language": "ru-RU, en-US", // Possibilité de définir 2 langues
"cookies": [{}], // Importer des cookies dans le profil
"type": "cloud", // Type de profil : cloud, local
"group": "group_example", // Si aucun groupe n'est spécifié, il utilise les paramètres par défaut, s'il y a un groupe spécifié et qu'il est incorrect, une erreur est renvoyée
"configid": "id", // ID de configuration, si spécifié, les paramètres OS et Browser sont ignorés, les autres paramètres sont utilisés si possible, par exemple, si la configuration est pour Android, la résolution de l'écran ne sera pas modifiée
"accounts": [ // Importer des comptes de différents sites dans le profil
{"website": "facebook.com", "username": "test@gmail.com", "password": "123456"},
{"website": "mail.com","username": "test@gmail.com","password": "123456"}
],
"timezone": "Pacific/Niue" ("Auto", "System") // set timezone or timezone mode
}
Données renvoyées :
{
"code": 0,
"status": "success",
"data": {
"profile_id": "xxxxxxxx...", // ID unique du profil
"name": "profil avec des paramètres aléatoires" // Nom du profil dans le programme
}
}

Démarrage du profil

  • Chemin : /profile/start/<profileID>
  • Méthode : GET

Description : Démarre le profil avec l’ID <profileID> spécifié. Vous pouvez ajouter des paramètres à l’URL :

  • chrome_flags et passer n’importe quel drapeau de démarrage que vous souhaitez, il suffit de les encoder en URL, par exemple : ?chrome_flags=—blink-settings%3DimagesEnabled%3Dfalse%20—disable-webgl2
  • start-pages et spécifier les pages de démarrage, il suffit de les encoder en URL, par exemple : ?start-pages=https%3A%2F%2Fgoogle.com%2Chttps%3A%2F%2Fya.ru
Données renvoyées :
{
"code":0,
"status":"success",
"data":{
"name": "Profile1" // Nom du profil dans le programme
"websocket_link":"ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // lien vers le navigateur, utilisé pour l'automatisation (valeur vide si le profil n'est pas démarré). Uniquement pour le navigateur Chromium
"debug_port": "xxxx", // port de débogage du navigateur Chromium, utilisé pour l'automatisation (valeur vide si le profil n'est pas démarré). Uniquement pour le navigateur Chromium
"folder": "Nom", // Nom du dossier du profil
"tags": ["tag1", "tag2", "tag3"] // Tags du profil
},
}

Fermeture du profil

  • Chemin : /profile/stop/<profileID>
  • Méthode : GET

Description : Arrête le profil avec l’ID <profileID> spécifié

Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Mise à jour du profil

  • Chemin : /profile/update/<profileID>
  • Méthode : POST

Description : Met à jour les informations du profil avec l’ID de profil spécifié <profileID>. Tous les paramètres sont facultatifs et peuvent être absents.
Format : JSON

Paramètres de la requête :
{
"proxy": "socks5://127.0.0.1:5555:login:pass", // Change le proxy dans le profil (les proxies peuvent être http, https, socks5, avec ou sans nom d'utilisateur et mot de passe)
"notes": "Texte", // Change les notes dans le profil
"name": "Nom du profil", // Change le nom du profil
"folder":"DossierTest", // Change le dossier dans le profil
"tags": ["tag1", "tag2"], // Définit les tags du profil, les anciens tags seront écrasés, si le tableau est vide, tous les tags seront supprimés du profil
"geolocation": "12.44, 13.524", // Définit la géolocalisation, si une valeur vide ou incorrecte est saisie, les paramètres par défaut seront utilisés
"cookies":[{}], // Importe les cookies dans le profil
"type": "cloud", // Type de profil : cloud, local
"group": "groupe_exemple", // Si aucun groupe n'est spécifié, il utilise les paramètres par défaut, s'il y a un groupe spécifié et qu'il est incorrect, une erreur est affichée
"accounts": [ // Importe des comptes de différents sites dans le profil
{"website": "facebook.com", "username": "test@gmail.com", "password": "123456"},
{"website": "mail.com","username": "test@gmail.com","password": "123456"}
],
"timezone": "Pacific/Niue" ("Auto", "System") // set timezone or timezone mode
}
Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Suppression du profil

  • Chemin : /profile/delete/<profileID>
  • Méthode : GET

Description : Supprime le profil avec l’ID de profil spécifié <profileID>.

Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Effacement des données du profil

  • Chemin : /profile/cleardata/<profileID>
  • Méthode : GET

Description : Efface toutes les données (cookies, historique, notes, cache, etc.) du profil avec l’ID de profil spécifié <profileID>.

Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Clear profile cookies

  • Path: /profile/clearcookies/<profileID>
  • Method: GET

Description: Clear only cookies from profile with selected <profileID>

Returning Data:
{
"code": 0,
"status": "success",
"data": {}
}

Cookies du profil

  • Chemin : /profile/cookies/<profileID>
  • Méthode : GET

Description : Récupère les cookies du profil avec l’ID de profil spécifié <profileID>.

Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Envoi vers le cloud

  • Chemin : /profile/tocloud
  • Méthode : POST

Description : Envoie les profils sélectionnés vers le cloud.
Format : JSON

Paramètres de la requête :
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"],
"group": "test"
}
Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Rendre local

  • Chemin : /profile/tolocal
  • Méthode : POST

Description : Rend les profils sélectionnés locaux.
Format : JSON

Paramètres de la requête :
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"]
}
Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Mise à jour du navigateur

  • Chemin : /profile/updatebrowser/<profileID>
  • Méthode : GET

Description : Met à jour la version du navigateur dans le profil avec l’ID de profil spécifié <profileID>.
Format : JSON

Renvoi des données :
{
"code": 0,
"status": "success",
"data": {}
}

Liste des configurations

  • Chemin : /configslist
  • Méthode : GET

Description : Renvoie la liste des configurations actives.
Format : JSON

Возвращаемые данные:
{
"code":0,
"status":"success",
"data": {
"config_id1":
{
"os": "Windows 10" // Système d'exploitation
"browser":"Chrome 115", // Type de navigateur et version
"useragent": "xxxx", // UserAgent dans la configuration
"webgl": "Apple GPU", // WebGL dans la configuration
"screen": "1024x768", // Résolution de l'écran
},
"config_id2":
{
},
},
}

Liste des groupes

  • Chemin : /groupslist
  • Méthode : GET

Description : Renvoie la liste des groupes
Format : JSON

Données renvoyées :
{
"code":0,
"status": "success",
"data": {["group1", "group2"]},
}

Informations sur le profil

  • Chemin : /profile/getinfo/<profileID>
  • Méthode : GET

Description : Récupère les informations sur le profil avec l’ID de profil sélectionné <profileID>
Format : JSON

Données renvoyées :
{
"code":0,
"status": "success",
"data": {
"name": "Profile1" // Nom du profil dans le programme
"status": "Available", // Statut du profil, peut être : "Started","Locked", "Available"
"debug_port": "xxxx", // Port de débogage du navigateur, utilisé pour l'automatisation (valeur vide si le profil n'est pas démarré)
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Lien vers le navigateur, utilisé pour l'automatisation (valeur vide si le profil n'est pas démarré)
"configid": "id" // ID de configuration
"cloud_id": ""
"type": "cloud" // Type de profil : cloud, local
"proxy": "socks5://127.0.0.1:5555:login:pass", // Proxy du profil
"folder": "Name", // Nom du dossier du profil
"tags": ["tag1", "tag2", "tag3"], // Tags du profil
"notes": "Text", // Notes du profil
"useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43", // UserAgent du profil
"browser": "Edge 114.0.1823.43", // Navigateur du profil
"os": "Windows 10", // Système d'exploitation du profil
"screen": "1366x768", // Résolution de l'écran du profil
"language": "en-US,en;q=0.9,ak-GH;q=0.8,ak;q=0.7", // Langue du profil
"cpu": 8, // Nombre de cœurs
"memory": 4, // Quantité de mémoire
"creation_date": 123456789, // Date de création Unix Timestamp
"modify_date": 123456789, // Date de modification Unix Timestamp
},
}

Check IP

  • Chemin: /profile/getinfo/<profileID>
  • Méthode: GET

Description: Checks the connection in the profile with the selected , if the check fails, an error is returned
Format: JSON

Returning Data:
{
"code":0,
"status": "success",
"data": {
"ip": "127.0.0.1" // Returns the IP address in this profile
}
}

Get timezones list

  • Path: /timezoneslist
  • Method: GET

Description: Returning timezones list
Format: JSON

Returning Data:
{
"code":0,
"status": "success",
"data": {
"Pacific/Niue": "GMT-11:00",
"America/Cambridge_Bay": "GMT-7:00",
...
},
}

Exemples

Puppeteer (Node.js)

Exécution d’un profil avec un nom spécifique et ouverture de la page undetectable.io dans ce profil avec Node.js Puppeteer :

const puppeteer = require('puppeteer');
const axios = require('axios');
const port = 25325; // Port
const ip = '127.0.0.1'; // IP local
const profileName = ‘TestProfile; // Nom du profil
const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
axios.get('http://' + ip + ':' + port + '/status').then(response => {
if (response.data.code == 0) {
axios.get('http://' + ip + ':' + port + '/list').then(async response => {
for (var profile in response.data.data) {
///// Démarrage d'un profil spécifique et navigation vers une page
if (response.data.data[profile].name == profileName ) {
axios.get('http://' + ip + ':' + port + '/profile/start/' + profile).then(async response => {
try {
const browser = await puppeteer.connect({
browserWSEndpoint: response.data.data.websocket_link,
defaultViewport: null
});
const page = await browser.newPage();
await sleep(1000);
await page.goto('https://undetectable.io');
} catch (e) {
console.log(e);
}
})
.catch(error => {
console.log(error);
});
}
}
})
.catch(error => {
console.log(error);
});
}
})
.catch(error => {
console.log(error);
});

Selenium (Python)

Exécution de profils se trouvant dans un dossier spécifique et ouverture de plusieurs sites avec Python + Selenium :

from time import sleep
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
address = "127.0.0.1" # Adresse IP locale de l'API (si vous travaillez à partir d'un autre ordinateur sur le même réseau ou si le port est ouvert dans les paramètres du routeur, vous pouvez accéder à l'API locale à distance et vous devrez modifier cette adresse)
port_from_settings_browser = '25325' # Port de l'API locale (peut être trouvé dans les paramètres du programme)
chrome_driver_path = "chromedriver.exe" # Chemin vers le chromedriver pour v110
ser = Service(chrome_driver_path)
chrome_options = Options()
list_response = requests.get(f'http://{address}:{port_from_settings_browser}/list').json()['data'] # Envoie une requête à l'API locale pour obtenir la liste des profils
profile_id = ''
for key, value in list_response.items(): # Parcourt la liste des profils et les lance un par un
if value['folder'] == 'test': # Vous pouvez ajouter une vérification ici pour ne lancer que les profils souhaités (dans cet exemple, nous lançons les profils qui se trouvent dans le dossier 'test')
profile_id = key
if value['status'] == 'Available': # Si le profil n'est pas lancé, le lance et obtient le debug_port
start_profile_response = requests.get(f'http://{address}:{port_from_settings_browser}/profile/start/{profile_id}', timeout=5).json()['data']
debug_port = start_profile_response['debug_port']
if value['status'] == 'Started': # Si le profil est lancé, récupère simplement le debug_port des données disponibles
debug_port = value['debug_port']
if value['status'] == 'Locked': # Si le profil est verrouillé, le passe
continue
if debug_port: # Vérifie si le navigateur a un port de connexion (les profils WebEngine n'ont pas de ports, nous les fermons donc immédiatement)
chrome_options.debugger_address = f'{address}:{debug_port}'
driver = webdriver.Chrome(service=ser, options=chrome_options)
driver.get("https://whoer.net/") # Ouvre whoer.net dans l'onglet actif
driver.switch_to.new_window('tab') # Crée un nouvel onglet et passe à celui-ci
driver.get(url='https://browserleaks.com/js') # Ouvre browserleaks.com/js dans l'onglet actif
# Vous pouvez ajouter n'importe quelle autre action ici
sleep(5) # Attend 5 secondes
requests.get(f'http://{address}:{port_from_settings_browser}/profile/stop/{profile_id}') # Arrête le profil