AdsPower Local API — REST API Layer

Knowledge base section 01. Covers the Local API (REST endpoints), authentication, rate limits, and the complete endpoint catalog. Source: AdsPower help page (api.txt) + Postman API reference (https://documenter.getpostman.com/view/45822952/2sB34hEzQH)


1. Overview

The AdsPower Local API is a REST HTTP API running on the user’s device (the machine where the AdsPower client is running). It allows you to:

  1. Read and write browser profile configuration (create, update, delete, list profiles).
  2. Start and close browser profiles programmatically.
  3. Manage groups, tags, proxies, and extensions.
  4. Connect automation frameworks (Selenium, Puppeteer) to opened browser profiles via the WebSocket/Debug Port returned by the start endpoint.

The API is the foundation for programmatic multi-profile management — the REST layer manages profile lifecycle, while browser automation (clicking, typing, navigating) is handled via Selenium/Puppeteer connecting to the debug port, or via the MCP server / RPA layer (covered in their respective KB sections).


2. Authentication

Bearer Token (API Key)

ItemValue
Auth methodBearer Token
Token sourceAPI Key generated in AdsPower client (Automation → API)
Postman variableAPI_TOKEN (configured as collection-level Bearer Token)
Header formatAuthorization: Bearer YOUR_API_TOKEN

API Key Generation

  • Super admins have API access by default. Team members need the manager/admin to assign API permission.
  • Go to Automation → API in the AdsPower client to check API connection status.
  • Click Generate or Reset to get your API key.
  • Each team member has a unique API key.

When API Key is Required

  • CLI / Headless mode: API Key authentication is required for ALL calls.
  • Security verification enabled: API Key authentication is required for ALL calls.
  • In standard GUI mode with no security verification, the API may work without the key (but using it is best practice).

Key Reset Behavior

  • Resetting the API key immediately invalidates the previous key.
  • You must stop the service first, then restart with the new key — you cannot update the key while the service is running.

3. Base URL and Port

ItemValue
Default addresshttp://local.adspower.net or http://localhost
Default port50325
Full base URLhttp://localhost:50325

Both addresses resolve to the same local API service. Use localhost for scripts running on the same machine; use local.adspower.net if you need a hostname that works across network configurations.


4. Headless Mode

AdsPower can run in headless mode (no GUI), which is required for server/VPS deployments and automated workflows.

Requirements

  • AdsPower version v3.3.2 or above
  • Kernel version v2.4.2.8 or above
  • API access permission

Start Commands

OSCommand
Windows"AdsPower Global.exe" --headless=true --api-key=XXXX --api-port=50325
macOS"/Applications/AdsPower Global.app/Contents/MacOS/AdsPower Global" --args --headless=true --api-key=XXXX --api-port=50325
Linuxadspower_global --headless=true --api-key=XXXX --api-port=50325

Flags

FlagRequiredDescription
--headlessYesRuns browser in headless mode (true)
--api-keyYesCredential to use Local API in headless mode
--api-portNoSpecified port for Local API (default: 50325)

Key Differences: Headless vs GUI

  • GUI mode: One account can log in on only one device at a time.
  • Headless (API-key) mode: One account can log in on multiple devices simultaneously — enables distributed automation across multiple machines for one AdsPower account.

Stopping Headless Service

  • Press Ctrl+C (under CMD/Terminal) or close the command line window.
  • You cannot run GUI mode and headless mode simultaneously on the same device.

5. Rate Limits

Standard Rate Limits (by profile count)

Number of ProfilesRequest Limit
0 – 2002 requests per second
200 – 50005 requests per second
5000+10 requests per second

The profile count is based on the total profiles in your AdsPower account, not the number of profiles being operated on.

Special-Rate Endpoints (fixed 1 req/sec)

These endpoints always have a fixed rate limit of 1 request per second, regardless of your profile count:

Endpoint
GET /api/v1/user/list
POST /api/v2/browser-profile/list
GET /api/v1/group/list
GET /api/v2/browser-profile/cookies
POST /api/v2/browser-profile/download-kernel

Practical note for Reddit workflow: The profile list endpoint (/api/v2/browser-profile/list) is rate-limited to 1 req/sec. When polling profile status at scale, use the active-status endpoints (/api/v1/browser/active or /api/v2/browser-profile/active) instead, which follow the standard rate limit.


6. Complete Endpoint Catalog

6.1 Connection Status

MethodEndpointNameDescription
GET/statusConnection StatusCheck API availability. Returns {"code":0,"msg":"success"}

6.2 Profiles (29 endpoints)

Profile Lifecycle (Open / Close / Status)

MethodEndpointNameKey Params
GET/api/v1/browser/startOpen Profileuser_id, serial_number, open_tabs, ip_tab, launch_args, headless, disable_password_filling, clear_cache_after_closing, enable_password_saving, cdp_mask, device_scale
POST/api/v2/browser-profile/startOpen Profile v2profile_id, profile_no, launch_args, headless, last_opened_tabs, proxy_detection, password_filling, password_saving, cdp_mask, device_scale, delete_cache
GET/api/v1/browser/stopClose Profileuser_id, serial_number
POST/api/v2/browser-profile/stopClose Profile v2profile_id, profile_no
GET/api/v1/browser/activeCheck Profile Statususer_id, serial_number — returns Active/Inactive status
GET/api/v2/browser-profile/activeCheck Profile Status v2profile_id, profile_no — returns status + ws/selenium debug info
GET/api/v1/browser/active-localCheck startup status (current device)
GET/api/v2/browser-profile/active-localCheck startup status (current device) v2
POST/api/v2/browser-profile/active-crossCheck Profile Status (cross-devices)Cross-device profile status check
GET/api/v1/browser/active-listQuery Active ProfileList all currently active/open profiles

Profile CRUD

MethodEndpointNameKey Params
GET/api/v1/user/listQuery Profilepage, page_size — legacy v1 list
POST/api/v2/browser-profile/listQuery Profile v2profile_id[], profile_no[], group_id, limit, page, sort_type, sort_order, tag_ids, tags_filter, name, name_filter
POST/api/v1/user/createNew Profilename, domain_name, username, password, fakey, cookie, group_id, user_proxy_config/proxyid, fingerprint_config, country, remark, etc.
POST/api/v2/browser-profile/createNew Profile v2name, group_id, remark, platform, username, password, fakey, platform_account[], cookie, repeat_config, ignore_cookie_error, tabs, user_proxy_config/proxyid, ip, country, region, city, ipchecker, fingerprint_config, category_id
POST/api/v1/user/updateUpdate ProfileSame as create + user_id (profile ID)
POST/api/v2/browser-profile/updateUpdate Profile v2Same as create v2 + profile_id
POST/api/v1/user/deleteDelete Profileuser_ids[] (max 100 per request)
POST/api/v2/browser-profile/deleteDelete Profile v2profile_id[]

Profile Management

MethodEndpointNameKey Params
POST/api/v1/user/moveMove Profilegroup_id, user_ids[] — move profiles to a group
POST/api/v1/user/delete-cacheDelete Cacheuser_id — legacy v1
POST/api/v2/browser-profile/clear-cacheDelete Cache v2profile_id[], type[] (local_storage, indexeddb, extension_cache, cookie, history, image_file)
POST/api/v1/shareShare Profileuser_ids[], receiver (email), share_type, content
GET/api/v1/user/profile-cookiesQuery Profile Cookiesuser_id / serial_number — fixed 1 req/sec rate limit
POST/api/v2/browser-profile/cookiesQuery Profile Cookies v2profile_id / profile_no — fixed 1 req/sec rate limit
POST/api/v1/user/profile-uaQuery Profile User-Agentuser_id[] / serial_number[] (up to 10)
POST/api/v1/browser/stop-allClose All ProfilesNo params — closes all open profiles on current device
POST/api/v1/user/new-fingerprintNew Fingerprintuser_id[] / serial_number[] (up to 10) — regenerate fingerprint for existing profile

Kernel & Patch

MethodEndpointNameKey Params
GET/api/v1/kernel/listGet Kernel Listkernel_type (Chrome/Firefox)
POST/api/v2/browser-profile/download-kernelDownload Kernelkernel_type, kernel_version — fixed 1 req/sec rate limit
POST/api/v1/client/upgradeUpdate to Latest Patchversion_type (stable/beta)

6.3 Tags (4 endpoints)

MethodEndpointNameKey Params
POST/api/v2/browser-tags/createCreate Tagtags[] with name (required, max 50 chars), color (optional: darkBlue, blue, purple, red, yellow, orange, green, lightGreen)
POST/api/v2/browser-tags/updateUpdate Tagtags[] with id (required), name, color
POST/api/v2/browser-tags/deleteDelete Tagids[] (required, max 100 per request)
POST/api/v2/browser-tags/listQuery Tagids[], limit, page

6.4 Groups (3 endpoints)

MethodEndpointNameKey Params
GET/api/v1/group/listQuery Groupgroup_name, page, page_size (1-200) — fixed 1 req/sec rate limit
POST/api/v1/group/createNew Groupgroup_name (required, max 30 chars, unique), remark (max 100 chars)
POST/api/v1/group/updateUpdate Groupgroup_id (required), group_name (required, max 30 chars, unique), remark

6.5 Proxies (4 endpoints)

MethodEndpointNameKey Params
GET/api/v2/proxy-list/createCreate Proxytype (http/https/ssh/socks5), host, port, user, password, proxy_url, ipchecker, remark — max 500 per request
POST/api/v2/proxy-list/updateUpdate Proxyproxy_id (required), type, host, port, user, password, proxy_url, ipchecker, remark
POST/api/v2/proxy-list/listQuery Proxyproxy_id[] (max 100), limit (1-200), page
POST/api/v2/proxy-list/deleteDelete Proxyproxy_id[] (max 100 per request)

6.6 Extensions (2 endpoints)

MethodEndpointNameKey Params
GET/api/v1/application/listCategory Listpage (default 1), page_size (default 50, range 1-200)
GET/api/v2/category/listCategory List v2category_id, limit (1-200), page

7. v1 vs v2 Differences

Aspectv1v2
ID parameter nameuser_id, serial_numberprofile_id, profile_no
HTTP method for create/listGET (query) / POST (create)POST (both)
List endpointGET /api/v1/user/list (fixed 1 req/sec)POST /api/v2/browser-profile/list (fixed 1 req/sec, richer filtering)
Open Profile paramsopen_tabs, ip_tab, new_first_tab, disable_password_filling, clear_cache_after_closing, enable_password_savinglast_opened_tabs, proxy_detection, password_filling, password_saving, delete_cache (renamed/restructured)
Create Profiledomain_name, open_urlsplatform, platform_account[] (multi-account support), tabs
Multi-account platformNot supportedSupported via platform_account[] array
Cache deletionSingle profileBatch via profile_id[] + type[] (local_storage, indexeddb, extension_cache, cookie, history, image_file)
Cookie format queryGET /api/v1/user/profile-cookiesPOST /api/v2/browser-profile/cookies

Recommendation: Use v2 endpoints wherever available. They have better filtering, multi-account platform support, batch operations, and are the actively maintained API surface.


8. Key Endpoint Deep-Dives

8.1 Open Profile v2 — POST /api/v2/browser-profile/start

This is the core endpoint for launching a browser profile. It returns the debug port and WebSocket endpoints needed for Selenium/Puppeteer automation.

Parameters:

ParamTypeRequiredDefaultDescription
profile_idstringYes*Unique profile ID
profile_nostringNo*Profile serial number (used if profile_id empty)
launch_argsstring[]NoChromium command-line switches, e.g. ["--disable-notifications"]
headlessstringNo01=headless, 0=GUI
last_opened_tabsstringNo11=reopen last tabs, 0=no
proxy_detectionstringNo11=open IP detection page, 0=no
password_fillingstringNo01=fill password (first open only), 0=no
password_savingstringNo01=allow password saving (Chrome only), 0=no
cdp_maskstringNo11=mask CDP detection (forced on iOS/Android), 0=no
device_scalestringNoZoom ratio for mobile: 1=100%, range 0.1-2 (Chrome 128+, Android/iOS only)
delete_cachestringNo01=clear cache on close, 0=no

*Either profile_id or profile_no must be provided — both cannot be empty.

Response (success):

{
    "code": 0,
    "msg": "success",
    "data": {
        "ws": {
            "puppeteer": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxxxx",
            "selenium": "127.0.0.1:xxxx"
        },
        "debug_port": "xxxx",
        "webdriver": "xxxxxxxxxxxx"
    }
}

The ws.puppeteer and ws.selenium values are the connection strings for browser automation frameworks. This is the bridge between the REST API (profile management) and the automation layer (browser actions).

8.2 New Profile v2 — POST /api/v2/browser-profile/create

Creates a new browser profile with full fingerprint, proxy, and platform account configuration.

Key Parameters:

ParamTypeRequiredDescription
namestring(100)NoProfile name
group_idstringYesGroup ID (use 0 for ungrouped)
remarkstring(1500)NoProfile remarks
platformstringNoPlatform domain (e.g. reddit.com) — for single-account
usernamestringNoPlatform account username
passwordstringNoPlatform account password
fakeystringNo2FA key
platform_accountarrayNoMulti-account platform config (array of {domain_name, login_user, password, fakey})
cookiestringNoCookie data (Netscape or JSON format)
repeat_configstringNo0=allow duplicates, 2=dedupe by account+password, 3=by cookies, 4=by c_user
ignore_cookie_errorstringNo0=return as-is, 1=filter invalid cookies
tabsarray(10)NoURLs to open as tabs
user_proxy_configobjectNo*Inline proxy config (see Appendix)
proxyidstringNo*Proxy ID from saved proxies (takes priority over user_proxy_config)
ipstringNoIP address
countrystringNoCountry code (2 letters, e.g. us)
regionstringNoRegion
citystringNoCity
ipcheckerstringNoIP checker: ip2location/ipapi/ipfoxy
fingerprint_configobjectYesFingerprint configuration (see Appendix)
category_idstringNoExtension category ID

*Either user_proxy_config or proxyid must be provided for proxy configuration.

Minimal example for Reddit profile creation:

{
    "name": "Reddit-User-001",
    "group_id": "0",
    "platform": "reddit.com",
    "username": "reddit_user",
    "password": "***",
    "country": "us",
    "proxyid": "random",
    "fingerprint_config": {
        "automatic_timezone": "1",
        "webrtc": "disabled",
        "location": "ask",
        "location_switch": "1",
        "canvas": "1",
        "webgl": "3",
        "webgl_image": "1",
        "audio": "1",
        "browser_kernel_config": {
            "version": "ua_auto",
            "type": "chrome"
        }
    }
}

8.3 Query Profile v2 — POST /api/v2/browser-profile/list

Lists browser profiles with filtering. Rate limited to 1 req/sec.

Parameters:

ParamTypeRequiredDefaultDescription
profile_idarrayNoLookup by profile IDs
profile_noarrayNoLookup by profile numbers
group_idstringNoFilter by group
limitintegerNo1Items per page (1-1000)
pageintegerNo1Page number
sort_typestringNoprofile_noprofile_no/last_open_time/created_time
sort_orderstringNodescasc/desc
tag_idsarrayNoFilter by tag IDs
tags_filterstringNoincludeinclude/exclude
namestringNoFilter by profile name
name_filterstringNoincludeinclude/exclude

Response:

{
  "data": {
    "list": [
      {
        "name": "",
        "created_time": "1754534006",
        "ip": "xxx",
        "ip_country": "cn",
        "password": "***",
        "user_proxy_config": {"proxy_soft": "no_proxy"},
        "group_id": "xxx",
        "group_name": "xxx",
        "remark": "",
        "last_open_time": "0",
        "username": "1",
        "platform": "facebook.com",
        "category_id": "0",
        "profile_no": "xxx",
        "profile_id": "xxx"
      }
    ],
    "page": 1,
    "page_size": 1
  },
  "code": 0,
  "msg": "Success"
}

8.4 Check Profile Status v2 — GET /api/v2/browser-profile/active

Checks if a profile is currently open/active and returns automation connection info.

Parameters: profile_id (required) or profile_no (optional)

Response:

{
    "code": 0,
    "msg": "success",
    "data": {
        "status": "Active",
        "ws": {
            "puppeteer": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxxxx",
            "selenium": "127.0.0.1:xxxx"
        },
        "debug_port": "xxxx",
        "webdriver": "xxxxxxxxxxxx"
    }
}

status is "Active" if the profile is open, "Inactive" otherwise. When Active, the ws and debug_port fields are populated for automation connections.


9. Appendix: Configuration Objects

9.1 user_proxy_config

Inline proxy configuration for create/update profile. Pass as JSON object.

FieldTypeRequiredDescription
proxy_softstringYesProxy software: brightdata, brightauto, oxylabsauto, ipfoxyauto, kookauto, lumiproxyauto, ssh, other, adspowerauto, no_proxy
proxy_typestringNohttp, https, socks5 (not needed for no_proxy)
proxy_hoststringNoProxy server address (IP or domain)
proxy_portstringNoProxy server port
proxy_userstringNoProxy username
proxy_passwordstringNoProxy password
proxy_urlstringNoIP change link (mobile proxies, http/https/socks5 only)
global_configstringNo0=don’t use saved proxy, 1=use saved proxy account

Common configs:

SoftwareExample
no_proxy{"proxy_soft":"no_proxy"}
other (custom){"proxy_soft":"other","proxy_type":"socks5","proxy_host":"xxxx","proxy_port":"xx","proxy_user":"xxx","proxy_password":"**"}
adspowerauto (rotating){"proxy_soft":"adspowerauto"}

9.2 fingerprint_config

Browser fingerprint configuration. Required for profile creation. Must be a non-empty JSON object.

Key fields (most relevant for Reddit workflow):

FieldTypeDefaultDescription
automatic_timezonestring11=auto from IP, 0=custom
timezonestringCustom timezone (e.g. America/New_York)
webrtcstringdisabledforward/proxy/local/disabled — use disabled or proxy for anti-detect
locationstringaskask/allow/block
location_switchstring11=from IP, 0=custom
languagearray["en-US","en"]Browser languages (when language_switch=0)
language_switchstring11=from IP, 0=custom
uastringCustom user-agent (leave empty for random)
screen_resolutionstringnonenone/random/custom WIDTH_HEIGHT
canvasstring11=noise, 0=default
webgl_imagestring11=noise, 0=default
webglstring30=default, 2=custom, 3=random
audiostring11=noise, 0=off
hardware_concurrencystring4CPU cores: default/2/4/6/8/16
device_memorystring8RAM: default/2/4/6/8
browser_kernel_configobject{"version":"ua_auto","type":"chrome"} or firefox
random_uaobject{"ua_browser":["chrome"],"ua_version":["80"],"ua_system_version":["Windows 10"]}
mac_address_configobject{"model":"1","address":""} (0=default, 1=match, 2=custom)
gpustring00=local setting, 1=on, 2=off
tls_switchstring01=disable TLS features, 0=enable
scan_port_typestring11=port scan protection on, 0=off

9.3 Country Codes

Two-letter country codes are used for the country parameter. Common ones for Reddit marketing:

CodeCountry
usUnited States
gbGreat Britain
caCanada
auAustralia
deGermany
frFrance
nlNetherlands
sgSingapore

10. Reddit Multi-Profile Engagement Workflow — API Usage

The Local API is the programmatic foundation for managing Reddit profiles at scale. Here’s how the API maps to the Reddit engagement workflow:

Step 1: Prepare Proxies

POST /api/v2/proxy-list/create  →  Add residential/mobile proxies
GET  /api/v2/proxy-list/list    →  Get proxy_ids for profile creation

Step 2: Create Reddit Profiles

POST /api/v2/browser-profile/create  →  Create profile with:
  - group_id: assign to a Reddit group
  - platform: "reddit.com"
  - username/password: Reddit account credentials
  - proxyid: link to a saved proxy
  - fingerprint_config: randomized fingerprint
  - country: "us" (or target country)

Step 3: Open Profile for Automation

POST /api/v2/browser-profile/start  →  Returns:
  - ws.puppeteer (WebSocket URL for Puppeteer)
  - ws.selenium (host:port for Selenium)
  - debug_port
  - webdriver path

Step 4: Automate Reddit Actions

Connect Puppeteer/Selenium to the debug port returned by the start endpoint. The REST API does NOT handle browser actions (clicking, typing, scrolling) — that’s done via:

  • Puppeteer/Selenium connecting to the ws/debug port
  • MCP Server (Playwright-based, covered in KB section 03)
  • RPA (visual automation, covered in KB section 02)

Step 5: Check Status & Close

GET  /api/v2/browser-profile/active  →  Check if profile is still open
POST /api/v2/browser-profile/stop    →  Close profile when done
POST /api/v2/browser-profile/stop-all →  Close all (emergency stop)

Step 6: Manage at Scale

POST /api/v2/browser-profile/list    →  List all Reddit profiles (filter by group_id)
POST /api/v2/browser-profile/update  →  Update proxy/fingerprint if needed
POST /api/v2/browser-profile/clear-cache  →  Clear cookies/history between sessions
POST /api/v2/browser-tags/create     →  Tag profiles (e.g. "active", "warming", "banned")
POST /api/v1/group/create            →  Create groups (e.g. "Reddit-Cluster-1")

Rate Limit Considerations

OperationEndpointRate Limit
Create profiles/api/v2/browser-profile/createStandard (2-10/sec)
List profiles/api/v2/browser-profile/list1 req/sec (fixed)
Open profiles/api/v2/browser-profile/startStandard (2-10/sec)
Check status/api/v2/browser-profile/activeStandard (2-10/sec)
Close profiles/api/v2/browser-profile/stopStandard (2-10/sec)

With 0-200 profiles, you can open/close 2 profiles per second. For a 50-profile Reddit engagement campaign, opening all profiles takes ~25 seconds. Plan automation queues accordingly.


11. CLI Wrapper (adspower-browser)

The adspower-browser CLI (installed as Hermes skill adspower-browser) wraps all Local API endpoints into a command-line tool. It’s the primary interface for Hermes agents.

Key mappings:

CLI CommandAPI Endpoint
ads open-browser <id>POST /api/v2/browser-profile/start
ads close-browser <id>POST /api/v2/browser-profile/stop
ads create-browser '{json}'POST /api/v2/browser-profile/create
ads get-browser-list '{}'POST /api/v2/browser-profile/list
ads get-browser-active <id>GET /api/v2/browser-profile/active
ads check-statusGET /status

The CLI handles authentication via --api-key flag or ADS_API_KEY env var, and default port via --port flag. See the adspower-browser skill for full CLI command reference.

Note: The CLI can manage profiles (create, open, close, list) but CANNOT perform browser automation (navigate, click, fill). For browser actions, use the MCP Server or RPA layer — covered in their respective KB sections.