Basic Automation Dolphin {anty}
General information 📜
Browser profiles based on the "Anty" engine support launching with DevTools Protocol enabled. This allows you to connect to a profile through a port generated at startup and automate the browser using tools like Puppeteer, Playwright, Selenium, and others.
Basic automation includes three steps:
- Start a profile via API with DevTools Protocol enabled.
- Connect to the profile’s port using an automation tool (Puppeteer, Playwright, Selenium, Postman, etc.).
- Run your own automation script through the open connection.
ℹ️ To use Dolphin{anty} automation, the app must be running and authorized. Authorization can be done with login/password or programmatically via a token. You can create a token in your personal account.
Request parameters for token authorization:
To avoid a 401 error, you must send a request
Method: POST
URL: http://localhost:3001/v1.0/auth/login-with-token
Header: Content-Type: application/json
Body:
{ "token": "API_TOKEN"}
Replace API_TOKEN with your actual token from your Dolphin{anty} account on our site.
ChromeDriver ⬇️
ChromeDriver is the bridge between your script (e.g., Selenium) and the Dolphin{anty} browser. The standard driver can reveal automation, so we provide our own modified ChromeDriver for each browser version.
Examples of authorization request ⚙️
const axios = require('axios')
const apiUrl = 'http://localhost:3001/v1.0/auth/login-with-token'
const token = 'API_TOKEN'
const requestData = {token: token}
axios.post(apiUrl, requestData, {
headers: {'Content-Type': 'application/json'}
}).then(response => {
console.log('OK ', response.data)
})
.catch(error => {
console.error('Error ', error)})
import requests
api_url = 'http://localhost:3001/v1.0/auth/login-with-token'
token = 'API_TOKEN'
request_data = {'token': token}
headers = {'Content-Type': 'application/json'}
response = requests.post(api_url, json=request_data, headers=headers)
if response.status_code == 200:
print('OK ', response.json())
else:
print('Error ', response.status_code)
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
var req = HttpRequest.newBuilder(URI.create("http://localhost:3001/v1.0/auth/login-with-token"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{"token":"API_TOKEN"}"
))
.build();
var res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("OK " + res.statusCode());
System.out.println("Body: " + res.body());}}
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
url := "http://localhost:3001/v1.0/auth/login-with-token"
data := []byte(`{"token":"API_TOKEN"}`)
r, e := http.Post(url, "application/json", bytes.NewBuffer(data))
if e != nil {
fmt.Println("Error:", e)
return
}
defer r.Body.Close()
b, _ := io.ReadAll(r.Body)
if r.StatusCode == http.StatusOK {
fmt.Println("OK", string(b))
} else {
fmt.Println("Error", r.Status, string(b))
}}
✅ If successful, the response will be:
{"success": true}
Step 1 — Start a profile via API ▶️
To start a browser profile via API, send a GET request:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1
For headless mode:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1&headless=1
PROFILE_ID- the profile’s ID (you can get it via the API or in the Dolphin{anty} app when editing a profile).automation=1- required for automation.
Example of starting via Postman by sending a request:

⚠️ Important notes:
- Local API works only if Dolphin{anty} is running.
- Requests must be sent from the same machine where the browser runs.
- By default, the local API uses port 3001; if busy, another port is assigned (check in the Health window in Dolphin{anty}).
- On the Free plan, cookie import/export via API is not available due to no cloud sync.
API Response ✅
If the profile was started successfully, the response will look approximately like this (the values of the port and wsEndpoint fields may vary):
{
"success": true,
"automation": {
"port": 50568,
"wsEndpoint": "/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969" }}
Step 2 — Connect to the profile 🔌
Puppeteer

Puppeteer — Popular Google library for browser UI automation and testing. Originally made for launching Chrome and verifying UI, but supports almost any browser actions. Requires JavaScript/Node.js knowledge.
const puppeteer = require('puppeteer-core');
(async () => {
// PUT YOUR port HERE
const port = 50568;
// PUT YOUR wsEndpoint HERE
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';
// DIRECT CONNECTION
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://127.0.0.1:${port}${wsEndpoint}`
});
// FROM THIS MOMENT YOU CAN AUTOMATE WHATEVER YOU WANT
// FOR EXAMPLE, TAKE A SCREENSHOT OF GOOGLE
const page = await browser.newPage();
await page.goto('https://google.com');
await page.screenshot({ path: 'google.png' });
await browser.close();
})();
Playwright

Playwright - A newer, modern alternative to Puppeteer by Microsoft with similar API and functionality.
const { chromium } = require('playwright');
(async () => {
// PUT YOUR port HERE
const port = 50568;
// PUT YOUR wsEndpoint HERE
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';
// DIRECT CONNECTION
const browser = await chromium.connectOverCDP(`ws://127.0.0.1:${port}${wsEndpoint}`);
// FROM THIS MOMENT YOU CAN AUTOMATE WHATEVER YOU WANT
// FOR EXAMPLE, TAKE A SCREENSHOT OF GOOGLE
const page = await browser.contexts()[0].newPage();
await page.goto('https://google.com');
await page.screenshot({path: 'google.png'});
await browser.close();
})();
Selenium

Connecting Selenium to a running browser is described in this article. It’s worth noting that Selenium uses the standard ChromeDriver, but websites can detect automation. Therefore, we recommend using our ChromeDriver — download it and specify its path in your code to hide Selenium usage.
Step 3 — Stop a profile ⛔️
To stop a browser profile via API, send a GET request:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/stop
Last updated today
Built with Documentation.AI