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.
{ "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.
{ "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
{ "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}
{ "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
{ "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é
{ "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
{ "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}
{ "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>
.
{ "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>
.
{ "code": 0, "status": "success", "data": {}}
Clear profile cookies
- Path:
/profile/clearcookies/<profileID>
- Method: GET
Description: Clear only cookies from profile with selected <profileID>
{ "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>
.
{ "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
{ "profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"], "group": "test"}
{ "code": 0, "status": "success", "data": {}}
Rendre local
- Chemin :
/profile/tolocal
- Méthode : POST
Description : Rend les profils sélectionnés locaux.
Format : JSON
{ "profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"]}
{ "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
{ "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
{ "code":0, "status": "success", "data": {["group1", "group2"]},}
Informations sur le profil
- Chemin :
/profile//<profileID>
- Méthode : GET
Description : Récupère les informations sur le profil avec l’ID de profil sélectionné <profileID>
Format : JSON
{ "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/checkconnection/<profileID>
- Méthode: GET
Description: Checks the connection in the profile with the selected
Format: JSON
{ "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
{ "code":0, "status": "success", "data": { "Pacific/Niue": "GMT-11:00", "America/Cambridge_Bay": "GMT-7:00", ... },}
Get proxies list
- Path:
/proxies/list
- Method: GET
Description: Returning proxies list
Format: JSON
{ "code":0, "status": "success", "data": { "proxy_id1": { "name": "Proxy1" "type": "http", "host": "127.0.0.1", "port": "2222", "login": "12345", "password": "12345", "ipchangelink": "", } "proxy_id2": { … }, … }}
Add proxy
- Path:
/proxies/add
- Method: POST
Description: Add a proxy to the proxy manager, the parameters login, password, ipchangelink are optional, the rest are required
Format: JSON
{ "name": "Proxy1", "type": "http", "host": "127.0.0.1", "port": "2222", "login": "12345", "password": "12345", "ipchangelink": ""}
{ "code": 0, "status": "success", "data": { "proxy_id": "12345" }}
Delete proxy
- Path:
/proxies/delete/<ProxyID>
- Method: GET
Description: Removes a proxy with the selected ID. Proxy will be deleted for all profiles with that proxy, the same as during normal deletion from the manager
Format: JSON
{ "code":0, "status":"success", "data": { },}
Update proxy
- Path:
/proxies/update/<ProxyID>
- Method: POST
Description: Updates the proxy with the selected ID, all parameters are optional
Format: JSON
{ "name": "Proxy1", "type": "http", "host": "127.0.0.1", "port": "2222", "login": "12345", "password": "12345", "ipchangelink": ""}
{ "code": 0, "status": "success", "data": { }}
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; // Portconst ip = '127.0.0.1'; // IP localconst 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 sleepimport requestsfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom 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 v110ser = 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 profilsprofile_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