Appearance
Usage
Minimal usage example: start a quick browser profile via API
This example authenticates, fetches built-in proxy credentials, and launches a quick (ephemeral) browser profile. It is taken directly from the official quick_profile_proxy example.
The Multilogin X desktop app must be running before executing this script.
python
import requests
import json
import hashlib
USERNAME = "your@email.com"
PASSWORD = "YourPassword"
# Step 1: Sign in and get a bearer token
# The password is sent as an MD5 hash
signin_url = "https://api.multilogin.com/user/signin"
payload = json.dumps({
"email": USERNAME,
"password": hashlib.md5(PASSWORD.encode("UTF-8")).hexdigest()
})
headers = {
"Content-Type": "application/json",
"Accept": "application/json"
}
resp = requests.post(signin_url, headers=headers, data=payload, verify=False)
token = resp.json()["data"]["token"]
auth_headers = {
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": f"Bearer {token}"
}
# Step 2: Get proxy connection details from Multilogin built-in proxy
proxy_url = "https://profile-proxy.multilogin.com/v1/proxy/connection_url"
proxy_payload = {
"country": "us",
"region": "",
"city": "",
"protocol": "socks5",
"sessionType": "sticky",
"IPTTL": 0,
"quality": "medium"
}
proxy_resp = requests.post(
proxy_url,
headers=auth_headers,
data=json.dumps(proxy_payload),
verify=False
)
if proxy_resp.status_code != 201:
raise Exception(f"Proxy fetch failed: {proxy_resp.status_code} {proxy_resp.text}")
proxy_data = proxy_resp.json()["data"].split(":")
proxy_info = {
"host": proxy_data[0],
"type": "socks5",
"port": int(proxy_data[1]),
"username": proxy_data[2],
"password": proxy_data[-1]
}
# Step 3: Start a quick (ephemeral) browser profile via the local launcher API
# The desktop app exposes this endpoint on loopback
launch_url = "https://launcher.mlx.yt:45001/api/v2/profile/quick"
profile_payload = json.dumps({
"browser_type": "mimic",
"os_type": "macos",
"is_headless": False,
"proxy": proxy_info,
"parameters": {
"flags": {
"audio_masking": "mask",
"fonts_masking": "mask",
"geolocation_masking": "mask",
"geolocation_popup": "allow",
"graphics_masking": "mask",
"graphics_noise": "mask",
"localization_masking": "mask",
"media_devices_masking": "mask",
"navigator_masking": "mask",
"ports_masking": "mask",
"screen_masking": "mask",
"timezone_masking": "mask",
"webrtc_masking": "mask",
"proxy_masking": "custom"
},
"fingerprint": {}
}
})
launch_resp = requests.post(launch_url, headers=auth_headers, data=profile_payload, verify=False)
print(launch_resp.status_code, launch_resp.json())What this does
- Authenticates with
https://api.multilogin.comand gets a JWT bearer token. - Fetches a SOCKS5 sticky-session US residential proxy from Multilogin's built-in proxy pool.
- Sends a
POSTto the local launcher athttps://launcher.mlx.yt:45001/api/v2/profile/quickto spin up a Mimic (Chromium) browser with all fingerprint masking flags enabled and the proxy wired in. - The browser window opens on the desktop. You can then connect to it via CDP (Chromium DevTools Protocol) for Playwright or Puppeteer automation if needed.
Quick profile vs. stored profile
- Quick profile (
/api/v2/profile/quick): ephemeral, disposable, not saved to the dashboard. Best for one-off automation runs. - Stored profile (
/api/v2/profile/start): persistent profile with saved cookies, fingerprint, and proxy config. Best for long-lived accounts.
Browser type options
| Value | Browser |
|---|---|
mimic | Chromium-based (Mimic) |
stealthfox | Firefox-based (Stealthfox) |
OS type options
windows, macos, linux, android