Tài liệu API ADSSPEED
Điều khiển ADSSPEED bằng mã của bạn: mở hồ sơ rồi gắn Selenium, Puppeteer hoặc Playwright; tạo và quản lý hồ sơ, proxy, kịch bản, chiến dịch, lịch chạy. API chạy ngay trên máy của bạn, không đi qua máy chủ nào.
Chọn phiên bản
Lệnh API thay đổi theo bản app. Đọc đúng tài liệu của bản bạn đang dùng — kiểm số bản bằng
GET /status (trường data.version, không cần khoá).
Bạn muốn làm gì?
Người mới: đọc theo thứ tự này
- Bắt đầu nhanh — bật API, lấy khoá, gọi thử, gắn công cụ tự động hoá.
- Xác thực và mã lỗi — cách gửi khoá, cách đọc kết quả.
- Giới hạn & quy tắc gói — những gì API cho và không cho làm.
- Danh sách lệnh theo nhóm — Bản mới · Bản 2.9.220.
Bắt đầu nhanh
Năm bước, từ lúc mở app tới lúc điều khiển được trình duyệt của một hồ sơ.
- Mở ADSSPEED và đăng nhập. API chạy cùng app — tắt app thì API cũng tắt.
- Bật API. Bản mới bật sẵn khi mở app. Bản 2.9.220 mặc định tắt: vào Cài đặt → API & Tích hợp, bật Bật API cục bộ.
- Lấy khoá. Cùng trang đó: xem Cổng (mặc định
19555), bấm Xem ở dòng Khoá API để chép khoá. Bấm Đổi khoá thì mọi mã đang dùng khoá cũ ngừng chạy. - Gọi thử — lệnh này không cần khoá:
import requests print(requests.get("http://127.0.0.1:19555/status").json())curl "http://127.0.0.1:19555/status"{ "code": 0, "data": { "version": "2.9.221", "ready": true, "api": "v1" }, "msg": "success" }Báo từ chối kết nối: API đang tắt, app chưa mở, hoặc cổng đang bị chương trình khác giữ — xem Hỏi đáp.
- Mở hồ sơ rồi gắn công cụ tự động hoá vào chính trình duyệt đó:
import requests from selenium import webdriver from selenium.webdriver.chrome.options import Options BASE, KEY = "http://127.0.0.1:19555", "API_KEY" # 1) Mở hồ sơ, nhận cổng điều khiển r = requests.get(f"{BASE}/api/v1/browser/start", params={"profile_id": 1}, headers={"X-API-Key": KEY}, timeout=120).json() if r["code"] != 0: raise SystemExit(r["msg"]) # 2) Gắn Selenium vào trình duyệt ĐANG MỞ (không bật trình duyệt mới) opts = Options() opts.add_experimental_option("debuggerAddress", r["data"]["ws"]["selenium"]) driver = webdriver.Chrome(options=opts) # cần chromedriver cùng số phiên bản lõi driver.get("https://ip.me/") print(driver.title)// npm i puppeteer-core · Node 18+ (tệp .mjs) import puppeteer from "puppeteer-core"; const BASE = "http://127.0.0.1:19555", KEY = "API_KEY"; const r = await (await fetch(`${BASE}/api/v1/browser/start?profile_id=1`, { headers: { "X-API-Key": KEY } })).json(); if (r.code !== 0) throw new Error(r.msg); // defaultViewport: null — GIỮ kích thước cửa sổ của hồ sơ (đừng để Puppeteer ép 800×600) const browser = await puppeteer.connect({ browserWSEndpoint: r.data.ws.puppeteer, defaultViewport: null }); const [page] = await browser.pages(); await page.goto("https://ip.me/"); console.log(await page.title()); browser.disconnect(); // ngắt kết nối, KHÔNG đóng trình duyệt# pip install playwright requests import requests from playwright.sync_api import sync_playwright BASE, KEY = "http://127.0.0.1:19555", "API_KEY" r = requests.get(f"{BASE}/api/v1/browser/start", params={"profile_id": 1}, headers={"X-API-Key": KEY}, timeout=120).json() with sync_playwright() as p: browser = p.chromium.connect_over_cdp(r["data"]["ws"]["puppeteer"]) ctx = browser.contexts[0] # ngữ cảnh CỦA HỒ SƠ (có cookie, phiên đăng nhập) page = ctx.pages[0] if ctx.pages else ctx.new_page() page.goto("https://ip.me/") print(page.title())Lưu ý- Selenium cần
chromedrivercùng số phiên bản với lõi trình duyệt của hồ sơ. Xem số phiên bản ởhttp://127.0.0.1:<debug_port>/json/version(trườngBrowser, ví dụChrome/154…). - Puppeteer / Playwright gắn qua WebSocket (
ws.puppeteer), không cần driver. - Luôn dùng tab / ngữ cảnh có sẵn của hồ sơ; tạo ngữ cảnh mới (
browser.newContext()) là phiên trắng, không có cookie của hồ sơ. - Xong việc:
disconnect()để ngắt mã; đóng hồ sơ bằng lệnh Đóng hồ sơ.
- Selenium cần
Xác thực
Mọi lệnh (trừ /status) cần khoá API. Gửi khoá theo một trong hai cách:
X-API-Key: ads-xxxxxxxx…/api/v1/profile/list?key=ads-xxxxxxxxThiếu hoặc sai khoá: HTTP 401. Khoá nằm ở Cài đặt → API & Tích hợp (dòng Khoá API).
- API chỉ nghe ở
127.0.0.1— máy khác trong mạng không gọi tới được. - Trang web khác mở trên chính máy bạn cũng gọi được API nếu biết khoá — hãy giữ kín khoá, bấm Đổi khoá ngay khi nghi bị lộ.
- Đừng đưa khoá lên dịch vụ bên ngoài (máy chủ của bạn, bot, kho mã công khai) — khoá chỉ dùng trên máy đang chạy ADSSPEED.
Định dạng trả về & mã lỗi
Mọi câu trả lời là JSON cùng một khuôn (giống AdsPower). Luôn kiểm code trước khi đọc
data.
{
"code": 0,
"data": {
"…": "…"
},
"msg": "success"
}Bảng mã
| code | HTTP | Ý nghĩa |
|---|---|---|
0 | 200 | Thành công. |
-1 | 200 | Lỗi nghiệp vụ — msg nói rõ lý do (proxy sai, không tìm thấy hồ sơ, hết chỗ…). |
401 | 401 | Thiếu hoặc sai khoá API. |
403 | 403 | App chưa đăng nhập hoặc đang khởi động. Bản mới |
404 | 404 | Không có đường dẫn này — hoặc bản app bạn đang dùng chưa có lệnh này. |
429 | 200 | Gọi lệnh nặng quá nhanh (quá 1 lần/giây). |
Ví dụ lỗi
Ví dụ code -1
{
"code": -1,
"data": null,
"msg": "Proxy không hợp lệ — cần host + cổng, dạng 'host:port:user:pass', 'socks5://user:pass@host:port' hoặc object {type,host,port,user,pass}. Muốn bỏ proxy: gửi {} hoặc {\"type\": \"none\"}."
}Ví dụ code 401
{
"code": 401,
"data": null,
"msg": "Thiếu hoặc sai khoá API. Xem Cài đặt → API & Tích hợp."
}Ví dụ code 403
{
"code": 403,
"data": null,
"msg": "Chưa đăng nhập ADSSPEED (hoặc app đang khởi động). Mở app, đăng nhập rồi gọi lại sau vài giây."
}Ví dụ code 404
{
"code": 404,
"data": null,
"msg": "Không có đường dẫn '/api/v1/khong-co'. Xem /status."
}Ví dụ code 429
{
"code": 429,
"data": null,
"msg": "Gọi quá nhanh — việc này cần 1 giây giữa hai lần."
}Giới hạn & quy tắc gói
API làm được đúng những gì app cho phép với gói của bạn — không hơn.
Nhịp gọi
Lệnh nặng tối đa 1 lần/giây; gọi dồn trả code 429. Các lệnh khác không giới hạn nhịp.
- Bản mới
browser/start,proxy/test,dcom/rotate,script/run,campaign/run,trash/purge,extension/install - Bản 2.9.220
browser/start,dcom/rotate
Quy tắc gói Bản mới
- Hạn mức gói. Tạo / nhân bản qua API tính vào số hồ sơ tối đa và lượt tạo của gói — giống hệt nút Tạo trong
app. Hết chỗ:
code -1kèm lý do. - Hồ sơ vượt hạn mức (sau khi hạ gói hoặc khôi phục từ Thùng rác): chỉ đọc — không sửa, không mở; vẫn xuất cookie, xoá, khôi phục được.
- Tài khoản bị khoá / hết hạn: lệnh mở, tạo, chạy kịch bản bị từ chối kèm lý do.
- App chưa đăng nhập: mọi lệnh trả
403. - Dữ liệu nhạy cảm không bao giờ trả ra: mật khẩu proxy (hiện
***), khoá Dcom, token, nội dung kịch bản, giá trị biến chiến dịch. - Kích thước: lệnh hàng loạt tối đa 5.000 hồ sơ/lần; cookie tối đa 20 MB/lần.
Mọi bản
- Vân tay do app dựng cho từng hồ sơ; tài liệu này không hướng dẫn chỉnh vân tay qua API. Muốn kiểu vân tay
riêng: tạo Cấu hình mẫu trong app rồi chọn khi tạo hồ sơ (bản mới:
config_id; bản 2.9.220: bật bằng lệnh Bật cấu hình mẫu trước khi tạo). - Phân trang:
page_sizetối đa 500. - Mật khẩu proxy luôn hiện
***. - Chưa có trong API: hồ sơ điện thoại (máy Android), sửa nội dung kịch bản, tool Python (mở trong app).
Định dạng proxy
Ô proxy ở các lệnh tạo / sửa / mở hồ sơ nhận các dạng dưới đây.
| Dạng | Ví dụ | Ghi chú | Bản mới | 2.9.220 |
|---|---|---|---|---|
| host:port | 203.0.113.10:8000 | Không mật khẩu, loại HTTP | có | có |
| host:port:user:pass | 203.0.113.10:8000:user:pass | Kiểu nhà bán proxy hay xuất | có | có |
| user:pass@host:port | user:pass@203.0.113.10:8000 | — | có | — |
| loại://user:pass@host:port | socks5://user:pass@203.0.113.10:1080 | http · https · socks4 · socks5 | có | — |
| LOẠI|host|port|user|pass | SOCKS5|203.0.113.10|1080|user|pass | Dạng xuất của nhiều tool antidetect | có | — |
| object | {"type":"socks5","host":"203.0.113.10","port":1080,"user":"u","pass":"p"} | — | có | có |
- Bản mới proxy sai định dạng bị từ chối kèm lý do — app không lặng lẽ bỏ proxy rồi mở bằng IP thật. Object thiếu
type⇒ HTTP. Bỏ proxy: gửi{}hoặc{"type": "none"}. Trong lệnh Sửa hồ sơ,"proxy": null= giữ nguyên. - Bản 2.9.220 ⚠ object phải có
type(HTTP / HTTPS / SOCKS5) — thiếu thì hồ sơ lưu KHÔNG proxy. Chuỗi chỉ nhậnhost:port/host:port:user:pass, loại HTTP. Lệnh Sửa hồ sơ chỉ nhận object. - Mật khẩu proxy không bao giờ trả lại qua API (hiện
***).
profile_id và public_id
Mỗi hồ sơ có hai mã:
- Bản mới mọi lệnh nhận một hồ sơ đều nhận cả
public_id— tiện khi bạn chép mã từ giao diện. - Bản 2.9.220 chỉ nhận
profile_id. Đổi mã 8 số sangprofile_id: gọi Danh sách hồ sơ vớisearch= mã 8 số.
Hỏi đáp
Những lỗi hay gặp khi mới dùng API.
Gọi API báo “từ chối kết nối” (connection refused)?
Báo 401?
Báo 403?
Gọi một lệnh báo 404?
GET /status, đọc đúng tài liệu của bản đang dùng, hoặc cập nhật app.Mở hồ sơ báo 429?
Selenium báo “This version of ChromeDriver only supports…”?
/json/version trên cổng debug).Puppeteer / Playwright mở ra trang trắng, mất đăng nhập?
browser.contexts[0] (Playwright) hoặc browser.pages() (Puppeteer), kèm defaultViewport: null.Hồ sơ tạo qua API có tính vào gói không?
Xoá nhầm hồ sơ?
Thay đổi giữa các bản
Từ Bản 2.9.220 lên Bản mới.
- API bật sẵn khi mở app (bản 2.9.220 phải tự bật).
- Mở hồ sơ nhận thêm
proxy,launch_args(lưu vào hồ sơ). - Mọi lệnh một hồ sơ nhận cả
public_id; Danh sách hồ sơ lọc được theo trạng thái, nhãn, sắp xếp. - Proxy nhận thêm dạng
socks5://…,LOẠI|host|port|user|pass; object thiếutype⇒ HTTP; proxy sai định dạng bị từ chối kèm lý do. - Xoá hồ sơ đang mở: tự đóng trước khi đưa vào Thùng rác.
- Xoá nhóm kèm
drop_profiles: đưa hồ sơ vào Thùng rác (bản 2.9.220 xoá hẳn).
config_id khi tạo hồ sơ).API cục bộ — Bản mới
64 lệnh, chia 9 nhóm. Chọn một nhóm để xem từng lệnh: yêu cầu, tham số, ví dụ gọi và ví dụ trả về.
data.version.1. Điều khiển hồ sơ
Mở, đóng hồ sơ và lấy cổng điều khiển cho Selenium / Puppeteer / Playwright.
/api/v1/browser/startMở trình duyệt của hồ sơ, trả cổng điều khiển cho Selenium / Puppeteer / Playwright. Đang mở rồi thì trả luôn cổng đang dùng (already_open). Gửi kèm proxy / launch_args thì LƯU vào hồ sơ rồi mới mở. Proxy dạng object thì gọi bằng POST. Hồ sơ vượt hạn mức gói không mở được.1.2GETĐóng hồ sơ /api/v1/browser/stopĐóng trình duyệt của hồ sơ.1.3GETHồ sơ có đang mở? /api/v1/browser/activeActive / Inactive kèm cổng điều khiển nếu đang mở.1.4GETHồ sơ đang mở /api/v1/browser/listMọi hồ sơ đang mở cùng cổng điều khiển.1.5POSTXoá cache /api/v1/browser/clear-cacheXoá bộ nhớ đệm, GIỮ cookie và đăng nhập. Hồ sơ phải đang đóng.1.1Mở hồ sơ
Mở trình duyệt của hồ sơ, trả cổng điều khiển cho Selenium / Puppeteer / Playwright. Đang mở rồi thì trả luôn cổng đang dùng (already_open). Gửi kèm proxy / launch_args thì LƯU vào hồ sơ rồi mới mở. Proxy dạng object thì gọi bằng POST. Hồ sơ vượt hạn mức gói không mở được.
- Selenium: dùng
data.ws.seleniumchodebuggerAddress. Puppeteer / Playwright: dùngdata.ws.puppeteer(xem Bắt đầu nhanh). - Mở lần đầu có proxy thường mất 5–30 giây (kiểm proxy, dựng hồ sơ) — đặt thời gian chờ của mã ≥ 90 giây.
- Hồ sơ đang mở: trả
already_open: truekèm cổng hiện tại, không mở thêm cửa sổ. proxy/launch_argsgửi kèm được LƯU vào hồ sơ (áp cho cả các lần mở sau). Hồ sơ đang mở mà đổi proxy thìrestart_required: true— đóng rồi mở lại.- Hồ sơ vượt hạn mức gói không mở được (chỉ đọc).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/start |
| POST | http://127.0.0.1:19555/api/v1/browser/start — cùng lệnh, gửi thân JSON khi proxy là object |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | Hồ sơ cần mở (public_id = mã 8 số trên giao diện) |
proxy | chuỗi | object | không | Proxy mới — lưu vào hồ sơ trước khi mở |
launch_args | chuỗi | mảng | không | Tham số khởi động — lưu vào hồ sơ trước khi mở |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/start",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/start?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/start?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"already_open": false,
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041",
"puppeteer": "ws://127.0.0.1:10041/devtools/browser/6f1c2b9e-3d4a-4c8e-9a51-0b7d2e4f8c13"
}
},
"msg": "success"
}1.2Đóng hồ sơ
Đóng trình duyệt của hồ sơ.
- Đóng cả cây tiến trình trình duyệt của hồ sơ. Cookie, phiên đăng nhập được giữ.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/stop |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/stop",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/stop?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/stop?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1
},
"msg": "success"
}1.3Hồ sơ có đang mở?
Active / Inactive kèm cổng điều khiển nếu đang mở.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/active |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/active",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/active?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/active?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"status": "Active",
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041",
"puppeteer": "ws://127.0.0.1:10041/devtools/browser/6f1c2b9e-3d4a-4c8e-9a51-0b7d2e4f8c13"
}
},
"msg": "success"
}1.4Hồ sơ đang mở
Mọi hồ sơ đang mở cùng cổng điều khiển.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"profile_id": 1,
"name": "Shop VN 01",
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041"
}
}
],
"total": 1
},
"msg": "success"
}1.5Xoá cache
Xoá bộ nhớ đệm, GIỮ cookie và đăng nhập. Hồ sơ phải đang đóng.
- Chỉ xoá bộ nhớ đệm (cache, mã đã biên dịch…). Cookie, đăng nhập, lịch sử giữ nguyên.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/browser/clear-cache |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/browser/clear-cache",
json={"profile_id": 2},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/clear-cache`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_id": 2})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/browser/clear-cache" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 2}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 2,
"cleared": true
},
"msg": "success"
}2. Thông tin hồ sơ
Tra cứu danh sách, chi tiết hồ sơ và các lựa chọn khi tạo.
/api/v1/profile/listLọc và sắp như bảng hồ sơ trong app. Có phân trang.2.2GETChi tiết hồ sơ /api/v1/profile/detailTên, nhóm, nhãn, ghi chú, proxy (mật khẩu che ***), bản lõi, tham số khởi động, URL mở đầu, IP/nước đo qua proxy, thư mục dữ liệu. KHÔNG có thông số vân tay.2.3GETTrạng thái để lọc Mới/api/v1/profile/statusesCác trạng thái dùng cho tham số status của profile/list.2.4GETDanh sách nhãn Mới/api/v1/tag/listNhãn đang dùng và số hồ sơ mỗi nhãn.2.5GETDanh sách nhóm /api/v1/group/listNhóm hồ sơ và số hồ sơ mỗi nhóm.2.6GETLựa chọn khi tạo hồ sơ Mới/api/v1/browser/versionsTrình duyệt hợp lệ và phiên bản OS của từng hệ điều hành; các bản lõi trình duyệt đã cài trên máy (browser_build).2.1Danh sách hồ sơ
Lọc và sắp như bảng hồ sơ trong app. Có phân trang.
- Mỗi trang tối đa 500 hồ sơ. Lấy hết: tăng
pagetới khipage × page_size ≥ total.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/list |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page | số | không | Trang (từ 1) |
page_size | số | không | Số hồ sơ mỗi trang (1–500, mặc định 100) |
search | chuỗi | không | Tìm theo tên / ghi chú / host proxy / mã 8 số |
group | chuỗi | không | Tên nhóm; __ungrouped__ = hồ sơ chưa có nhóm |
status | chuỗi | không | run · err · ok · uncheck · ready (xem profile/statuses) |
tag | chuỗi | không | Nhãn; nhiều nhãn cách dấu phẩy = có MỘT trong các nhãn |
sort | chuỗi | không | recent (mặc định: hồ sơ ghim trước, mới nhất trước) · old · name · name_desc · id |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/list",
params={"page": 1, "page_size": 50},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/list?page=1&page_size=50`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/list?page=1&page_size=50&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"profile_id": 3,
"public_id": "22789501",
"name": "TikTok US 01",
"group": "",
"os": "Android",
"browser": "Chrome",
"note": "",
"tags": "tiktok",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "Không proxy",
"host": "",
"port": "",
"user": "",
"pass": ""
},
"pinned": false
},
{
"profile_id": 2,
"public_id": "23490317",
"name": "Shop VN 02",
"group": "Shop VN",
"os": "macOS",
"browser": "Safari",
"note": "",
"tags": "",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "SOCKS5",
"host": "203.0.113.11",
"port": "1080",
"user": "user2",
"pass": "***"
},
"pinned": false
},
{
"profile_id": 1,
"public_id": "89977289",
"name": "Shop VN 01",
"group": "Shop VN",
"os": "Windows",
"browser": "Chrome",
"note": "",
"tags": "shopee, vn",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "HTTP",
"host": "203.0.113.10",
"port": "8000",
"user": "user1",
"pass": "***"
},
"pinned": false
}
],
"page": 1,
"page_size": 50,
"total": 3
},
"msg": "success"
}2.2Chi tiết hồ sơ
Tên, nhóm, nhãn, ghi chú, proxy (mật khẩu che ***), bản lõi, tham số khởi động, URL mở đầu, IP/nước đo qua proxy, thư mục dữ liệu. KHÔNG có thông số vân tay.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/detail",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/detail?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/detail?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"public_id": "89977289",
"name": "Shop VN 01",
"group": "Shop VN",
"os": "Windows",
"browser": "Chrome",
"note": "",
"tags": "shopee, vn",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "HTTP",
"host": "203.0.113.10",
"port": "8000",
"user": "user1",
"pass": "***"
},
"pinned": false,
"browser_build": "",
"launch_args": "--lang=vi",
"start_url": "https://shopee.vn/",
"proxy_ip": "",
"proxy_country": "",
"user_data_dir": "<thư mục ADSSPEED>\\accounts\\_cuc_bo\\profiles\\89977289"
},
"msg": "success"
}2.3Trạng thái để lọc
Các trạng thái dùng cho tham số status của profile/list.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/statuses |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/statuses",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/statuses`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/statuses?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"status": "run",
"name": "Đang chạy"
},
{
"status": "err",
"name": "Lỗi (mở hồ sơ / proxy)"
},
{
"status": "ok",
"name": "Có proxy, đã kiểm dùng được"
},
{
"status": "uncheck",
"name": "Có proxy, chưa kiểm"
},
{
"status": "ready",
"name": "Không dùng proxy"
}
]
},
"msg": "success"
}2.4Danh sách nhãn
Nhãn đang dùng và số hồ sơ mỗi nhãn.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/tag/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/tag/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/tag/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/tag/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"tag": "shopee",
"count": 1
},
{
"tag": "tiktok",
"count": 1
},
{
"tag": "vn",
"count": 1
}
],
"total": 3
},
"msg": "success"
}2.5Danh sách nhóm
Nhóm hồ sơ và số hồ sơ mỗi nhóm.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/group/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/group/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/group/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"name": "(Chưa phân nhóm)",
"count": 1
},
{
"name": "Shop VN",
"count": 2
}
]
},
"msg": "success"
}2.6Lựa chọn khi tạo hồ sơ
Trình duyệt hợp lệ và phiên bản OS của từng hệ điều hành; các bản lõi trình duyệt đã cài trên máy (browser_build).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/versions |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/versions",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/versions`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/versions?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"os": [
{
"os": "Windows",
"browsers": [
"Chrome",
"Edge",
"Brave",
"Opera",
"Opera GX",
"Yandex",
"Cốc Cốc",
"Chromium"
],
"os_versions": [
"Windows 11",
"Windows 10"
]
},
{
"os": "macOS",
"browsers": [
"Safari",
"Chrome",
"Edge",
"Brave",
"Opera",
"Opera GX",
"Yandex",
"Chromium"
],
"os_versions": [
"macOS 15 Sequoia",
"macOS 14 Sonoma",
"macOS 13 Ventura",
"macOS 12 Monterey"
]
},
{
"os": "Linux",
"browsers": [
"Chrome",
"Edge",
"Brave",
"Opera",
"Yandex",
"Chromium"
],
"os_versions": [
"Ubuntu 24.04",
"Ubuntu 22.04",
"Ubuntu 20.04"
]
},
{
"os": "Android",
"browsers": [
"Chrome",
"Samsung",
"Edge",
"Brave",
"Opera",
"Yandex"
],
"os_versions": [
"Android 16",
"Android 15",
"Android 14",
"Android 13",
"Android 12",
"Android 11",
"Android 10"
]
},
{
"os": "iOS",
"browsers": [
"Safari",
"Chrome",
"Edge",
"Brave",
"Opera",
"Yandex"
],
"os_versions": [
"iOS 26",
"iOS 18",
"iOS 17",
"iOS 16",
"iOS 15"
]
}
],
"builds": [],
"default_build": ""
},
"msg": "success"
}3. Thao tác hồ sơ
Tạo, sửa, nhân bản, xoá hồ sơ; nhãn, ghim, nhóm và cấu hình mẫu.
/api/v1/profile/createTạo MỘT hồ sơ. Tính vào hạn mức gói và lượt tạo trong ngày như nút Tạo. Vân tay do app sinh — muốn kiểu khác thì tạo Cấu hình mẫu trong app rồi gửi config_id.3.2POSTSửa hồ sơ /api/v1/profile/updateChỉ đổi trường được gửi. Hồ sơ vượt hạn mức gói là chỉ đọc (không sửa, không mở). Đổi proxy / tham số lúc hồ sơ đang mở thì restart_required = true.3.3POSTNhãn nhiều hồ sơ Mới/api/v1/profile/tagsĐặt / thêm / bớt nhãn cho nhiều hồ sơ một lần.3.4POSTGhim hồ sơ Mới/api/v1/profile/pinGhim / bỏ ghim — hồ sơ ghim luôn nằm đầu bảng.3.5POSTNhân bản hồ sơ /api/v1/profile/duplicateTạo bản sao (tính vào hạn mức như tạo mới).3.6POSTXoá hồ sơ /api/v1/profile/deleteĐóng trình duyệt nếu đang mở rồi đưa vào Thùng rác (khôi phục được).3.7POSTChuyển nhóm /api/v1/group/assignĐưa các hồ sơ vào một nhóm.3.8POSTĐổi tên nhóm /api/v1/group/rename3.9POSTXoá nhóm /api/v1/group/deleteMặc định chỉ bỏ nhóm, giữ hồ sơ. drop_profiles = true thì hồ sơ vào Thùng rác.3.10GETCấu hình mẫu /api/v1/config/listCác cấu hình mẫu tạo trong app (dùng cho config_id khi tạo hồ sơ).3.11GETChi tiết cấu hình mẫu /api/v1/config/detailTên, OS, trình duyệt, phiên bản OS, URL, nhóm, nhãn.3.12POSTBật cấu hình mẫu /api/v1/config/applyHồ sơ tạo qua API mà không gửi config_id sẽ theo cấu hình này. 0 = tắt.3.1Tạo hồ sơ
Tạo MỘT hồ sơ. Tính vào hạn mức gói và lượt tạo trong ngày như nút Tạo. Vân tay do app sinh — muốn kiểu khác thì tạo Cấu hình mẫu trong app rồi gửi config_id.
- Mỗi lệnh tạo MỘT hồ sơ, tính vào hạn mức gói và lượt tạo — y như nút Tạo trong app. Hết chỗ ⇒
code: -1kèm lý do. - Muốn hồ sơ theo một kiểu vân tay riêng: tạo Cấu hình mẫu trong app rồi gửi
config_id(xem Cấu hình mẫu). Không gửi thì theo cấu hình đang bật (Bật cấu hình mẫu). cookiesđược nạp vào trình duyệt ở lần mở đầu tiên — nhận JSON (EditThisCookie / Cookie-Editor), Netscapecookies.txt, hoặca=1; b=2kèmstart_url.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/create |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | có | Tên hồ sơ |
os | chuỗi | không | Windows · macOS · Linux · Android · iOS (mặc định Windows) |
browser | chuỗi | không | Theo os — xem browser/versions (mặc định Chrome) |
os_version | chuỗi | không | Phiên bản OS — xem browser/versions; bỏ trống = tự động |
browser_build | chuỗi | không | Bản lõi đã cài — xem browser/versions |
config_id | số | không | Cấu hình mẫu (config/list). Không gửi = theo cấu hình đang bật |
group / note / tags | chuỗi | không | Nhóm, ghi chú, nhãn (nhãn: chuỗi phẩy hoặc mảng) |
proxy | chuỗi | object | không | host:port:user:pass · socks5://user:pass@host:port · TYPE|host|port|user|pass · {type,host,port,user,pass} |
proxy_group | chuỗi | không | Lấy lần lượt một proxy trong nhóm proxy này |
start_url | chuỗi | không | URL mở đầu |
launch_args | chuỗi | mảng | không | Tham số khởi động, ví dụ --lang=vi |
cookies | chuỗi | mảng | không | Cookie nạp sẵn: JSON, Netscape hoặc a=1; b=2 |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/create",
json={
"name": "Shop VN 01",
"os": "Windows",
"browser": "Chrome",
"group": "Shop VN",
"tags": ["shopee", "vn"],
"proxy": "203.0.113.10:8000:user1:pass1",
"start_url": "https://shopee.vn/",
"launch_args": "--lang=vi"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/create`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"name": "Shop VN 01",
"os": "Windows",
"browser": "Chrome",
"group": "Shop VN",
"tags": [
"shopee",
"vn"
],
"proxy": "203.0.113.10:8000:user1:pass1",
"start_url": "https://shopee.vn/",
"launch_args": "--lang=vi"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/create" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"name": "Shop VN 01", "os": "Windows", "browser": "Chrome", "group": "Shop VN", "tags": ["shopee", "vn"], "proxy": "203.0.113.10:8000:user1:pass1", "start_url": "https://shopee.vn/", "launch_args": "--lang=vi"}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"public_id": "89977289"
},
"msg": "success"
}3.2Sửa hồ sơ
Chỉ đổi trường được gửi. Hồ sơ vượt hạn mức gói là chỉ đọc (không sửa, không mở). Đổi proxy / tham số lúc hồ sơ đang mở thì restart_required = true.
proxy: null= giữ nguyên proxy;proxy: {}= bỏ proxy.- Proxy / tham số khởi động chỉ áp khi mở hồ sơ ⇒ đổi lúc đang mở thì
restart_required: true.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/update |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
name / group / note / tags | chuỗi | không | — |
proxy | chuỗi | object | không | {} = bỏ proxy; null = giữ nguyên |
start_url | chuỗi | không | "" = về URL mặc định |
launch_args | chuỗi | mảng | không | "" = bỏ hết |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/update",
json={
"profile_id": 1,
"note": "Tài khoản chính",
"launch_args": "--lang=vi --start-maximized"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/update`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"profile_id": 1,
"note": "Tài khoản chính",
"launch_args": "--lang=vi --start-maximized"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/update" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 1, "note": "Tài khoản chính", "launch_args": "--lang=vi --start-maximized"}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"updated": [
"launch_args",
"note"
],
"restart_required": false
},
"msg": "success"
}3.3Nhãn nhiều hồ sơ
Đặt / thêm / bớt nhãn cho nhiều hồ sơ một lần.
- Hồ sơ chỉ đọc (vượt hạn mức gói) được bỏ qua và liệt kê trong
skipped_read_only.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/tags |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
tags | chuỗi | mảng | có | Nhãn |
mode | chuỗi | không | set (mặc định, thay hết) · add · remove |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/tags",
json={"profile_ids": [1, 2], "tags": ["vip"], "mode": "add"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/tags`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [1, 2], "tags": ["vip"], "mode": "add"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/tags" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [1, 2], "tags": ["vip"], "mode": "add"}'Ví dụ trả về
{
"code": 0,
"data": {
"updated": [
1,
2
],
"skipped_read_only": [],
"not_found": []
},
"msg": "success"
}3.4Ghim hồ sơ
Ghim / bỏ ghim — hồ sơ ghim luôn nằm đầu bảng.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/pin |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
pinned | bool | không | Mặc định true |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/pin",
json={"profile_ids": [1], "pinned": True},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/pin`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [1], "pinned": true})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/pin" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [1], "pinned": true}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_ids": [
1
],
"pinned": true
},
"msg": "success"
}3.5Nhân bản hồ sơ
Tạo bản sao (tính vào hạn mức như tạo mới).
- Bản sao có thư mục dữ liệu riêng; tính vào hạn mức như tạo mới.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/duplicate |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/duplicate",
json={"profile_id": 2},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/duplicate`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_id": 2})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/duplicate" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 2}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 4
},
"msg": "success"
}3.6Xoá hồ sơ
Đóng trình duyệt nếu đang mở rồi đưa vào Thùng rác (khôi phục được).
- Hồ sơ đang mở được đóng trước, rồi vào Thùng rác — khôi phục bằng Khôi phục từ Thùng rác.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/delete",
json={"profile_ids": [4]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [4]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [4]}'Ví dụ trả về
{
"code": 0,
"data": {
"trashed": [
4
]
},
"msg": "success"
}3.7Chuyển nhóm
Đưa các hồ sơ vào một nhóm.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
group | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/assign",
json={"profile_ids": [3], "group": "TikTok"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [3], "group": "TikTok"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [3], "group": "TikTok"}'Ví dụ trả về
{
"code": 0,
"data": {
"group": "TikTok",
"profiles": [
3
]
},
"msg": "success"
}3.8Đổi tên nhóm
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/rename |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
old | chuỗi | có | — |
new | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/rename",
json={"old": "TikTok", "new": "TikTok US"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/rename`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"old": "TikTok", "new": "TikTok US"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/rename" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"old": "TikTok", "new": "TikTok US"}'Ví dụ trả về
{
"code": 0,
"data": {
"old": "TikTok",
"new": "TikTok US"
},
"msg": "success"
}3.9Xoá nhóm
Mặc định chỉ bỏ nhóm, giữ hồ sơ. drop_profiles = true thì hồ sơ vào Thùng rác.
drop_profiles: trueđưa hồ sơ trong nhóm vào Thùng rác (khôi phục được). Chỉtrue/1mới được hiểu là có.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
group | chuỗi | có | — |
drop_profiles | bool | không | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/delete",
json={"group": "Tạm", "drop_profiles": False},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"group": "Tạm", "drop_profiles": false})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"group": "Tạm", "drop_profiles": false}'Ví dụ trả về
{
"code": 0,
"data": {
"group": "Tạm",
"dropped_profiles": false
},
"msg": "success"
}3.10Cấu hình mẫu
Các cấu hình mẫu tạo trong app (dùng cho config_id khi tạo hồ sơ).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/config/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/config/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/config/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"config_id": 1,
"name": "Windows · Chrome — mặc định an toàn",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"active": true
},
{
"config_id": 2,
"name": "Windows · Chrome — máy cấu hình thấp",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"active": false
},
{
"config_id": 3,
"name": "macOS · Safari",
"os": "macOS",
"browser": "Safari",
"os_version": "",
"active": false
},
{
"config_id": 4,
"name": "iOS · Safari (điện thoại)",
"os": "iOS",
"browser": "Safari",
"os_version": "",
"active": false
},
{
"config_id": 5,
"name": "Android · Chrome (điện thoại)",
"os": "Android",
"browser": "Chrome",
"os_version": "",
"active": false
}
]
},
"msg": "success"
}3.11Chi tiết cấu hình mẫu
Tên, OS, trình duyệt, phiên bản OS, URL, nhóm, nhãn.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/config/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
config_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/config/detail",
params={"config_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/detail?config_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/config/detail?config_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"config_id": 1,
"name": "Windows · Chrome — mặc định an toàn",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"start_url": "",
"group": "",
"tags": "",
"active": true
},
"msg": "success"
}3.12Bật cấu hình mẫu
Hồ sơ tạo qua API mà không gửi config_id sẽ theo cấu hình này. 0 = tắt.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/config/apply |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
config_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/config/apply",
json={"config_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/apply`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"config_id": 1})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/config/apply" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"config_id": 1}'Ví dụ trả về
{
"code": 0,
"data": {
"active_config_id": 1
},
"msg": "success"
}4. Proxy
Gán và kiểm proxy cho hồ sơ; kho proxy, nhóm proxy, Dcom 4G.
/api/v1/proxy/update-profilesMỗi hồ sơ một proxy (items), hoặc một proxy cho cả danh sách (profile_ids + proxy).4.2POSTKiểm một proxy Mới/api/v1/proxy/testĐi thật qua proxy: sống/chết, IP, quốc gia, thành phố, múi giờ, nhà mạng, độ trễ.4.3POSTKiểm proxy của hồ sơ Mới/api/v1/profile/check-proxyChạy nền, ghi IP / nước vào hồ sơ (đọc lại ở profile/detail hoặc lọc status).4.4GETKho proxy /api/v1/proxy/listProxy trong kho (mật khẩu che ***).4.5POSTNhập proxy vào kho /api/v1/proxy/import4.6POSTGán proxy kho cho hồ sơ /api/v1/proxy/assign1 proxy → mọi hồ sơ; N proxy → chia vòng.4.7POSTKiểm proxy trong kho Mới/api/v1/proxy/checkChạy nền. Không gửi proxy_ids = kiểm cả kho; stop = true để dừng.4.8GETTiến độ kiểm kho Mới/api/v1/proxy/check-status4.9POSTXoá proxy khỏi kho Mới/api/v1/proxy/deleteHồ sơ đang dùng proxy đó giữ nguyên.4.10GETNhóm proxy /api/v1/proxy/group/list4.11GETProxy trong nhóm /api/v1/proxy/group/detail4.12POSTĐưa proxy vào nhóm /api/v1/proxy/group/assign4.13GETDcom 4G /api/v1/dcom/listThiết bị Dcom và proxy của chúng (mật khẩu che).4.14GETĐổi IP Dcom /api/v1/dcom/rotate4.1Đổi proxy nhiều hồ sơ
Mỗi hồ sơ một proxy (items), hoặc một proxy cho cả danh sách (profile_ids + proxy).
- Từng mục xử lý riêng: mục sai nằm trong
failed, các mục khác vẫn lưu.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/update-profiles |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
items | mảng | không | [{profile_id, proxy}] |
profile_ids + proxy | mảng + chuỗi | không | Dùng thay cho items |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/update-profiles",
json={
"items": [
{
"profile_id": 1,
"proxy": "203.0.113.30:8000:user5:pass5"
},
{
"profile_id": 2,
"proxy": {
"type": "socks5",
"host": "203.0.113.31",
"port": 1080,
"user": "user6",
"pass": "pass6"
}
}
]
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/update-profiles`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"items": [
{
"profile_id": 1,
"proxy": "203.0.113.30:8000:user5:pass5"
},
{
"profile_id": 2,
"proxy": {
"type": "socks5",
"host": "203.0.113.31",
"port": 1080,
"user": "user6",
"pass": "pass6"
}
}
]
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/update-profiles" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"items": [{"profile_id": 1, "proxy": "203.0.113.30:8000:user5:pass5"}, {"profile_id": 2, "proxy": {"type": "socks5", "host": "203.0.113.31", "port": 1080, "user": "user6", "pass": "pass6"}}]}'Ví dụ trả về
{
"code": 0,
"data": {
"updated": [
1,
2
],
"failed": [],
"restart_required": []
},
"msg": "success"
}4.2Kiểm một proxy
Đi thật qua proxy: sống/chết, IP, quốc gia, thành phố, múi giờ, nhà mạng, độ trễ.
- Đi THẬT qua proxy để đo — có thể mất tới 20 giây. Không lưu gì vào hồ sơ.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/test |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy | chuỗi | object | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/test",
json={"proxy": "socks5://user7:pass7@203.0.113.40:1080"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/test`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy": "socks5://user7:pass7@203.0.113.40:1080"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/test" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy": "socks5://user7:pass7@203.0.113.40:1080"}'Ví dụ trả về
{
"code": 0,
"data": {
"alive": true,
"protocol": "SOCKS5",
"ping_ms": 0,
"ip": "198.51.100.23",
"country": "United States",
"country_code": "US",
"region": "California",
"city": "Los Angeles",
"zip": "90014",
"timezone": "America/Los_Angeles",
"isp": "Example Telecom",
"asn": "AS64500 Example Telecom",
"org": "Example Residential",
"ip_type": "Dân cư",
"hosting": false,
"is_proxy": false
},
"msg": "success"
}4.3Kiểm proxy của hồ sơ
Chạy nền, ghi IP / nước vào hồ sơ (đọc lại ở profile/detail hoặc lọc status).
- Chạy nền. Đọc kết quả ở
proxy_ip/proxy_countrycủa Chi tiết hồ sơ, hoặc lọc Danh sách hồ sơ theostatus=ok/status=err.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/check-proxy |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/check-proxy",
json={"profile_ids": [1, 2]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/check-proxy`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [1, 2]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/check-proxy" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [1, 2]}'Ví dụ trả về
{
"code": 0,
"data": {
"started": true,
"profile_ids": [
1,
2
]
},
"msg": "success"
}4.4Kho proxy
Proxy trong kho (mật khẩu che ***).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"id": 2,
"type": "SOCKS5",
"host": "203.0.113.22",
"port": "1080",
"user": "user4",
"country": "",
"city": "",
"live": -1,
"ping": 0,
"provider": "",
"note": "",
"created_at": "2026-10-02 23:31",
"grp": "US-Res",
"masked": "203.0.113.22:1080:user4:***"
},
{
"id": 1,
"type": "HTTP",
"host": "203.0.113.21",
"port": "8000",
"user": "user3",
"country": "",
"city": "",
"live": -1,
"ping": 0,
"provider": "",
"note": "",
"created_at": "2026-10-02 23:31",
"grp": "US-Res",
"masked": "203.0.113.21:8000:user3:***"
}
],
"total": 2
},
"msg": "success"
}4.5Nhập proxy vào kho
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/import |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxies | mảng | có | Chuỗi mọi định dạng hoặc object |
group | chuỗi | không | Nhóm proxy |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/import",
json={
"proxies": ["203.0.113.21:8000:user3:pass3", "socks5://user4:pass4@203.0.113.22:1080"],
"group": "US-Res"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/import`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"proxies": [
"203.0.113.21:8000:user3:pass3",
"socks5://user4:pass4@203.0.113.22:1080"
],
"group": "US-Res"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/import" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxies": ["203.0.113.21:8000:user3:pass3", "socks5://user4:pass4@203.0.113.22:1080"], "group": "US-Res"}'Ví dụ trả về
{
"code": 0,
"data": {
"imported": 2,
"skipped": 0,
"proxy_ids": [
1,
2
]
},
"msg": "success"
}4.6Gán proxy kho cho hồ sơ
1 proxy → mọi hồ sơ; N proxy → chia vòng.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | có | — |
profile_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/assign",
json={"proxy_ids": [1], "profile_ids": [3]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [1], "profile_ids": [3]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [1], "profile_ids": [3]}'Ví dụ trả về
{
"code": 0,
"data": {
"assigned": 1,
"proxies_used": 1
},
"msg": "success"
}4.7Kiểm proxy trong kho
Chạy nền. Không gửi proxy_ids = kiểm cả kho; stop = true để dừng.
- Chạy nền, theo dõi bằng tiến độ kiểm proxy.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/check |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | không | — |
stop | bool | không | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/check",
json={"proxy_ids": [1, 2]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/check`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [1, 2]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/check" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [1, 2]}'Ví dụ trả về
{
"code": 0,
"data": {
"started": true,
"total": 2
},
"msg": "success"
}4.8Tiến độ kiểm kho
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/check-status |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/check-status",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/check-status`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/check-status?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"running": false,
"done": 2,
"total": 2
},
"msg": "success"
}4.9Xoá proxy khỏi kho
Hồ sơ đang dùng proxy đó giữ nguyên.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/delete",
json={"proxy_ids": [2]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [2]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [2]}'Ví dụ trả về
{
"code": 0,
"data": {
"deleted": [
2
]
},
"msg": "success"
}4.10Nhóm proxy
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/group/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/group/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/group/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"ten": "US-Res",
"so": 2,
"live": 0
}
]
},
"msg": "success"
}4.11Proxy trong nhóm
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/group/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/group/detail",
params={"name": "US-Res"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/detail?name=US-Res`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/group/detail?name=US-Res&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"group": "US-Res",
"count": 2,
"list": [
{
"proxy_id": 1,
"type": "HTTP",
"host": "203.0.113.21",
"port": "8000",
"user": "user3",
"country": "",
"live": -1
},
{
"proxy_id": 2,
"type": "SOCKS5",
"host": "203.0.113.22",
"port": "1080",
"user": "user4",
"country": "",
"live": -1
}
]
},
"msg": "success"
}4.12Đưa proxy vào nhóm
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/group/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | có | — |
name | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/group/assign",
json={"proxy_ids": [2], "name": "US-Res"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [2], "name": "US-Res"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/group/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [2], "name": "US-Res"}'Ví dụ trả về
{
"code": 0,
"data": {
"updated": 1,
"group": "US-Res"
},
"msg": "success"
}4.13Dcom 4G
Thiết bị Dcom và proxy của chúng (mật khẩu che).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/dcom/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/dcom/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/dcom/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/dcom/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"chay": true,
"api_port": 8500,
"ds": [
{
"name": "DCOM-1",
"imei": "35xxxxxxxxxxx21",
"ip": "100.64.12.7",
"nha_mang": "Viettel",
"user": "dcom",
"accounts": [
{
"user": "dcom",
"pass": "***"
}
],
"proxy_local": "127.0.0.1:8001:dcom:***",
"proxy_lan": "192.168.1.5:8001:dcom:***"
}
]
},
"msg": "success"
}4.14Đổi IP Dcom
- Cần Dcom 4G đã cắm và cấu hình trong app (mục Dcom).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/dcom/rotate |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | không | Tên Dcom; all = tất cả |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/dcom/rotate",
params={"name": "DCOM-1"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/dcom/rotate?name=DCOM-1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/dcom/rotate?name=DCOM-1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"rotating": "DCOM-1",
"count": 1
},
"msg": "success"
}5. Kịch bản
Chạy kịch bản kéo-thả trên các hồ sơ và theo dõi tiến độ.
/api/v1/script/listThông tin chung (không trả nội dung bước).5.2POSTChạy kịch bản Mới/api/v1/script/runChạy kịch bản kéo-thả trên các hồ sơ, lần lượt từng hồ sơ, chạy nền.5.3GETTiến độ kịch bản Mới/api/v1/script/status5.4POSTDừng kịch bản Mới/api/v1/script/stopDừng ở bước kế tiếp (không đóng trình duyệt).5.1Danh sách kịch bản
Thông tin chung (không trả nội dung bước).
- Chỉ thông tin chung — không trả nội dung bước. Kịch bản thuê (
locked) không bao giờ lộ nội dung.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/script/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/script/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/script/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/script/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"script_id": 1,
"name": "Đăng nhập Shopee",
"type": "steps",
"locked": false,
"review": "",
"steps_total": 4,
"last_run": "",
"created_at": "2026-10-02 23:31",
"runnable": true,
"schedulable": true
}
],
"total": 1
},
"msg": "success"
}5.2Chạy kịch bản
Chạy kịch bản kéo-thả trên các hồ sơ, lần lượt từng hồ sơ, chạy nền.
- Chỉ chạy kịch bản kéo-thả; tool Python mở từ app (cửa sổ riêng).
- Mỗi lúc một lượt chạy; đang có chiến dịch chạy thì từ chối.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/script/run |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
profile_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/script/run",
json={"script_id": 1, "profile_ids": [1, 2]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/script/run`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"script_id": 1, "profile_ids": [1, 2]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/script/run" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1, "profile_ids": [1, 2]}'Ví dụ trả về
{
"code": 0,
"data": {
"started": true,
"script_id": 1,
"profiles": 2
},
"msg": "success"
}5.3Tiến độ kịch bản
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/script/status |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/script/status",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/script/status`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/script/status?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"running": true,
"script_id": 1,
"name": "Đăng nhập Shopee",
"profiles_total": 2,
"profile_index": 1,
"profile_name": "Shop VN 01",
"steps_done": 3,
"steps_total": 4,
"error": ""
},
"msg": "success"
}5.4Dừng kịch bản
Dừng ở bước kế tiếp (không đóng trình duyệt).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/script/stop |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/script/stop",
json={},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/script/stop`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/script/stop" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{}'Ví dụ trả về
{
"code": 0,
"data": {
"stopping": true
},
"msg": "success"
}6. Chiến dịch
Chạy một kịch bản hàng loạt trên nhiều hồ sơ: số luồng, nghỉ, điều kiện, biến đầu vào.
/api/v1/campaign/listChiến dịch = một kịch bản chạy hàng loạt trên nhiều hồ sơ (gọi bằng script_id).6.2GETChi tiết chiến dịch Mới/api/v1/campaign/detailCài đặt, hồ sơ, tên biến {{...}} kịch bản cần, hồ sơ nào đã điền biến.6.3POSTLưu cài đặt Mới/api/v1/campaign/saveChỉ khoá được gửi thay đổi.6.4POSTHồ sơ của chiến dịch Mới/api/v1/campaign/profiles6.5POSTBiến đầu vào Mới/api/v1/campaign/dataĐiền biến {{...}} cho từng hồ sơ (data) hoặc cho mọi hồ sơ (all). Trộn vào dữ liệu đang có.6.6POSTChạy chiến dịch Mới/api/v1/campaign/runGửi kèm khoá cài đặt thì lưu luôn rồi chạy. Mỗi lúc chỉ chạy một chiến dịch.6.7GETTiến độ chiến dịch Mới/api/v1/campaign/statusTổng hợp + từng hồ sơ (state: waiting · running · success · failed · error · stopped).6.8POSTDừng / tạm dừng Mới/api/v1/campaign/stop6.9POSTChạy lại hồ sơ lỗi Mới/api/v1/campaign/retry-failedChỉ các hồ sơ lỗi / bị dừng của lượt trước.6.1Danh sách chiến dịch
Chiến dịch = một kịch bản chạy hàng loạt trên nhiều hồ sơ (gọi bằng script_id).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/campaign/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/campaign/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/campaign/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"script_id": 1,
"name": "Đăng nhập Shopee",
"locked": false,
"profiles": 2,
"threads": 2,
"updated": "2026-10-02 23:31",
"running": false
}
],
"total": 1
},
"msg": "success"
}6.2Chi tiết chiến dịch
Cài đặt, hồ sơ, tên biến {{...}} kịch bản cần, hồ sơ nào đã điền biến.
- Chiến dịch = một kịch bản chạy hàng loạt trên nhiều hồ sơ, gọi bằng
script_id. - Giá trị biến không trả lại qua API (có thể là mật khẩu tài khoản) — chỉ báo hồ sơ nào đã điền biến nào.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/campaign/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/campaign/detail",
params={"script_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/detail?script_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/campaign/detail?script_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"script_id": 1,
"name": "Đăng nhập Shopee",
"locked": false,
"variables": [
"email",
"password"
],
"steps_total": 4,
"problem": "",
"settings": {
"threads": 2,
"thread_delay": 0,
"wait_factor": 1.0,
"timeout_minutes": 15,
"retries": 1,
"limit": 0,
"stop_after_success": 0,
"profile_ids": [
1,
2
],
"rest": [
0.0,
0.0
],
"on_error": "skip",
"close_after": true,
"order": "sequential",
"write_note": true,
"conditions": {
"success": [
{
"type": "url",
"value": "/buyer"
}
],
"fail": [
{
"type": "text",
"value": "Sai mật khẩu"
}
]
}
},
"data_filled": [
{
"profile_id": 1,
"variables": [
"email",
"password"
]
},
{
"profile_id": 2,
"variables": [
"email",
"password"
]
}
],
"running": false
},
"msg": "success"
}6.3Lưu cài đặt
Chỉ khoá được gửi thay đổi.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/save |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
threads | số | không | Số luồng 1–10 |
thread_delay | số | không | Giây giãn cách mở giữa các luồng (0–60) |
rest | mảng | không | [ít nhất, nhiều nhất] giây nghỉ giữa 2 hồ sơ |
wait_factor | số | không | Hệ số thời gian chờ của bước (0–5) |
timeout_minutes | số | không | Tối đa mỗi hồ sơ (1–180 phút) |
on_error | chuỗi | không | skip · stop |
retries | số | không | Thử lại khi lỗi (0–3) |
close_after | bool | không | Đóng hồ sơ khi xong |
limit | số | không | Chỉ chạy N hồ sơ đầu (0 = tất cả) |
order | chuỗi | không | sequential · random |
stop_after_success | số | không | Dừng khi đủ N hồ sơ đạt (0 = không) |
write_note | bool | không | Ghi kết quả vào ghi chú hồ sơ |
conditions | object | không | {success: [{type, value}], fail: [...]}; type: url · text · no_text · css |
profile_ids | mảng | không | Thay danh sách hồ sơ |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/save",
json={
"script_id": 1,
"threads": 2,
"thread_delay": 0,
"rest": [0, 0],
"retries": 1,
"on_error": "skip",
"order": "sequential",
"close_after": True,
"conditions": {
"success": [
{
"type": "url",
"value": "/buyer"
}
],
"fail": [
{
"type": "text",
"value": "Sai mật khẩu"
}
]
}
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/save`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"script_id": 1,
"threads": 2,
"thread_delay": 0,
"rest": [
0,
0
],
"retries": 1,
"on_error": "skip",
"order": "sequential",
"close_after": true,
"conditions": {
"success": [
{
"type": "url",
"value": "/buyer"
}
],
"fail": [
{
"type": "text",
"value": "Sai mật khẩu"
}
]
}
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/save" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1, "threads": 2, "thread_delay": 0, "rest": [0, 0], "retries": 1, "on_error": "skip", "order": "sequential", "close_after": true, "conditions": {"success": [{"type": "url", "value": "/buyer"}], "fail": [{"type": "text", "value": "Sai mật khẩu"}]}}'Ví dụ trả về
{
"code": 0,
"data": {
"script_id": 1,
"settings": {
"threads": 2,
"thread_delay": 0,
"wait_factor": 1.0,
"timeout_minutes": 15,
"retries": 1,
"limit": 0,
"stop_after_success": 0,
"profile_ids": [],
"rest": [
0.0,
0.0
],
"on_error": "skip",
"close_after": true,
"order": "sequential",
"write_note": true,
"conditions": {
"success": [
{
"type": "url",
"value": "/buyer"
}
],
"fail": [
{
"type": "text",
"value": "Sai mật khẩu"
}
]
}
}
},
"msg": "success"
}6.4Hồ sơ của chiến dịch
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/profiles |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
profile_ids | mảng | không | — |
mode | chuỗi | không | set (mặc định) · add · remove · clear |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/profiles",
json={"script_id": 1, "profile_ids": [1, 2], "mode": "set"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/profiles`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"script_id": 1, "profile_ids": [1, 2], "mode": "set"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/profiles" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1, "profile_ids": [1, 2], "mode": "set"}'Ví dụ trả về
{
"code": 0,
"data": {
"script_id": 1,
"profile_ids": [
1,
2
],
"total": 2
},
"msg": "success"
}6.5Biến đầu vào
Điền biến {{...}} cho từng hồ sơ (data) hoặc cho mọi hồ sơ (all). Trộn vào dữ liệu đang có.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/data |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
data | object | không | {profile_id: {biến: giá trị}} |
all | object | không | {biến: giá trị} cho mọi hồ sơ của chiến dịch |
profile_ids | mảng | không | Giới hạn all cho các hồ sơ này |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/data",
json={
"script_id": 1,
"data": {
"1": {
"email": "shop01@mail.com",
"password": "******"
},
"2": {
"email": "shop02@mail.com",
"password": "******"
}
}
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/data`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"script_id": 1,
"data": {
"1": {
"email": "shop01@mail.com",
"password": "******"
},
"2": {
"email": "shop02@mail.com",
"password": "******"
}
}
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/data" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1, "data": {"1": {"email": "shop01@mail.com", "password": "******"}, "2": {"email": "shop02@mail.com", "password": "******"}}}'Ví dụ trả về
{
"code": 0,
"data": {
"script_id": 1,
"profiles_updated": [
1,
2
],
"skipped_not_found": [],
"unknown_variables": []
},
"msg": "success"
}6.6Chạy chiến dịch
Gửi kèm khoá cài đặt thì lưu luôn rồi chạy. Mỗi lúc chỉ chạy một chiến dịch.
- Tool chạy MỘT chiến dịch mỗi lúc. Theo dõi bằng tiến độ chiến dịch.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/run |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
(khoá cài đặt) | — | không | Như campaign/save |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/run",
json={"script_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/run`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"script_id": 1})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/run" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1}'Ví dụ trả về
{
"code": 0,
"data": {
"started": true,
"script_id": 1,
"profiles": 2
},
"msg": "success"
}6.7Tiến độ chiến dịch
Tổng hợp + từng hồ sơ (state: waiting · running · success · failed · error · stopped).
- state:
waiting·running·success·failed(không đạt điều kiện) ·error(lỗi kỹ thuật) ·stopped.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/campaign/status |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page / page_size | số | không | Phân trang danh sách hồ sơ (mặc định 500) |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/campaign/status",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/status`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/campaign/status?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"running": false,
"paused": false,
"script_id": 1,
"name": "Đăng nhập Shopee",
"started_at": "23:31:08 02/10",
"ended_at": "23:31:10 02/10",
"elapsed_seconds": 1,
"eta_seconds": 0,
"threads": 2,
"total": 2,
"success": 1,
"failed": 0,
"error": 1,
"running_now": 0,
"waiting": 0,
"stopped": 0,
"result_dir": "<thư mục ADSSPEED>\\ket_qua_kich_ban\\2026-10-02_2331__ng_nh_p_Shopee",
"labels": [],
"profiles": [
{
"profile_id": 1,
"name": "Shop VN 01",
"state": "success",
"step": 4,
"steps_total": 4,
"percent": 100,
"seconds": 0,
"attempt": 1,
"thread": 1,
"started_at": "23:31:08",
"ended_at": "23:31:09",
"label": "",
"reason": "chạy hết 4/4 bước"
},
{
"profile_id": 2,
"name": "Shop VN 02",
"state": "error",
"step": 1,
"steps_total": 4,
"percent": 25,
"seconds": 0,
"attempt": 2,
"thread": 2,
"started_at": "23:31:10",
"ended_at": "23:31:10",
"label": "",
"reason": "Không thấy ô nhập mật khẩu (hết 15 giây chờ)"
}
],
"page": 1,
"page_size": 500,
"profiles_total": 2
},
"msg": "success"
}6.8Dừng / tạm dừng
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/stop |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
mode | chuỗi | không | stop (mặc định) · after · pause · resume |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/stop",
json={"mode": "after"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/stop`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"mode": "after"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/stop" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"mode": "after"}'Ví dụ trả về
{
"code": 0,
"data": {
"mode": "after"
},
"msg": "success"
}6.9Chạy lại hồ sơ lỗi
Chỉ các hồ sơ lỗi / bị dừng của lượt trước.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/campaign/retry-failed |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/campaign/retry-failed",
json={},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/campaign/retry-failed`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/campaign/retry-failed" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{}'Ví dụ trả về
{
"code": 0,
"data": {
"started": true,
"profiles": 1
},
"msg": "success"
}7. Lịch chạy
Hẹn giờ chạy kịch bản hằng ngày hoặc một lần.
7.1Danh sách lịch
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/schedule/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/schedule/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/schedule/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/schedule/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"schedule_id": 1,
"script_id": 1,
"script_name": "Đăng nhập Shopee",
"mode": "daily",
"at": "08:30",
"after_minutes": 0,
"next_run": "2026-10-03 08:30:00",
"last_run": "",
"enabled": true,
"profile_ids": [
1,
2
]
}
],
"total": 1
},
"msg": "success"
}7.2Thêm lịch
Hằng ngày lúc HH:MM, hoặc chạy một lần sau N phút. Chỉ kịch bản kéo-thả không khoá.
- App phải đang mở thì lịch mới chạy.
- Chỉ kịch bản kéo-thả tự dựng (không khoá).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/schedule/create |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
script_id | số | có | — |
profile_ids | mảng | có | — |
mode | chuỗi | có | daily · once |
at | chuỗi | không | HH:MM (daily) |
after_minutes | số | không | 1–525600 (once) |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/schedule/create",
json={"script_id": 1, "profile_ids": [1, 2], "mode": "daily", "at": "08:30"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/schedule/create`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"script_id": 1, "profile_ids": [1, 2], "mode": "daily", "at": "08:30"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/schedule/create" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"script_id": 1, "profile_ids": [1, 2], "mode": "daily", "at": "08:30"}'Ví dụ trả về
{
"code": 0,
"data": {
"schedule_id": 1,
"script_id": 1,
"script_name": "Đăng nhập Shopee",
"mode": "daily",
"at": "08:30",
"after_minutes": 0,
"next_run": "2026-10-03 08:30:00",
"last_run": "",
"enabled": true,
"profile_ids": [
1,
2
]
},
"msg": "success"
}7.3Bật / tắt lịch
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/schedule/toggle |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
schedule_id | số | mảng | có | — |
enabled | bool | không | Mặc định true |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/schedule/toggle",
json={"schedule_id": 1, "enabled": False},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/schedule/toggle`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"schedule_id": 1, "enabled": false})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/schedule/toggle" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"schedule_id": 1, "enabled": false}'Ví dụ trả về
{
"code": 0,
"data": {
"schedule_ids": [
1
],
"enabled": false
},
"msg": "success"
}7.4Xoá lịch
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/schedule/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
schedule_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/schedule/delete",
json={"schedule_ids": [1]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/schedule/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"schedule_ids": [1]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/schedule/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"schedule_ids": [1]}'Ví dụ trả về
{
"code": 0,
"data": {
"deleted": [
1
]
},
"msg": "success"
}8. Thùng rác · Cookie · Tiện ích
Khôi phục / xoá vĩnh viễn hồ sơ, xuất nhập cookie, quản lý tiện ích.
/api/v1/trash/listCó phân trang.8.2POSTKhôi phục Mới/api/v1/trash/restoreKhông chặn theo hạn mức (giữ dữ liệu cho khách); hồ sơ vượt hạn mức gói thành chỉ đọc và không mở được — vẫn xuất cookie, xoá được.8.3POSTXoá vĩnh viễn Mới/api/v1/trash/purgeXoá hẳn cả dữ liệu, không hoàn tác. Chỉ hồ sơ đang ở Thùng rác.8.4GETXuất cookie Mới/api/v1/profile/cookies8.5POSTNhập cookie Mới/api/v1/profile/cookiesNhư ô Dán cookie: nạp vào trình duyệt ở lần mở kế tiếp (ghi đè cookie trùng tên, không xoá cookie khác).8.6GETKho tiện ích /api/v1/extension/list8.7POSTBật / tắt tiện ích Mới/api/v1/extension/toggleÁp cho hồ sơ mở sau lệnh này.8.8POSTCài tiện ích Mới/api/v1/extension/installTừ Chrome Web Store. Tiện ích mới mặc định tắt.8.9POSTGỡ tiện ích Mới/api/v1/extension/remove8.1Thùng rác
Có phân trang.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/trash/list |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page / page_size | số | không | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/trash/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/trash/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/trash/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"profile_id": 4,
"public_id": "67525549",
"name": "Shop VN 02 (bản sao)",
"group": "",
"os": "macOS",
"browser": "Safari",
"deleted_at": "2026-10-02 23:31"
}
],
"page": 1,
"page_size": 100,
"total": 1
},
"msg": "success"
}8.2Khôi phục
Không chặn theo hạn mức (giữ dữ liệu cho khách); hồ sơ vượt hạn mức gói thành chỉ đọc và không mở được — vẫn xuất cookie, xoá được.
- Không bị chặn theo hạn mức để không mất dữ liệu; phần vượt hạn mức gói thành chỉ đọc và không mở được.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/trash/restore |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | không | — |
all | bool | không | Khôi phục hết |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/trash/restore",
json={"profile_ids": [4]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/trash/restore`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [4]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/trash/restore" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [4]}'Ví dụ trả về
{
"code": 0,
"data": {
"restored": [
4
],
"count": 1,
"read_only": []
},
"msg": "success"
}8.3Xoá vĩnh viễn
Xoá hẳn cả dữ liệu, không hoàn tác. Chỉ hồ sơ đang ở Thùng rác.
- KHÔNG hoàn tác: xoá cả thư mục dữ liệu (cookie, phiên đăng nhập).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/trash/purge |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
confirm | bool | có | Phải là true |
profile_ids | mảng | không | — |
all | bool | không | Dọn sạch Thùng rác |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/trash/purge",
json={"profile_ids": [4], "confirm": True},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/trash/purge`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [4], "confirm": true})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/trash/purge" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [4], "confirm": true}'Ví dụ trả về
{
"code": 0,
"data": {
"purged": [
4
],
"folders_left": 0
},
"msg": "success"
}8.4Xuất cookie
- Xuất được cả khi hồ sơ đang đóng. Nhập: cookie được nạp vào trình duyệt ở lần mở kế tiếp — cookie trùng tên bị ghi đè, cookie khác giữ nguyên.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/cookies |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
format | chuỗi | không | json (mặc định) · netscape |
domain | chuỗi | không | Chỉ lấy cookie của tên miền này |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/cookies",
params={"profile_id": 1, "domain": "shopee.vn"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/cookies?profile_id=1&domain=shopee.vn`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/cookies?profile_id=1&domain=shopee.vn&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"format": "json",
"count": 2,
"cookies": [
{
"domain": ".shopee.vn",
"name": "SPC_EC",
"value": "…",
"path": "/",
"expirationDate": 1787500800,
"secure": true,
"httpOnly": true,
"sameSite": "lax",
"hostOnly": false,
"session": false,
"storeId": "0"
},
{
"domain": ".shopee.vn",
"name": "SPC_U",
"value": "123456789",
"path": "/",
"expirationDate": 1787500800,
"secure": true,
"httpOnly": false,
"sameSite": "lax",
"hostOnly": false,
"session": false,
"storeId": "0"
}
]
},
"msg": "success"
}8.5Nhập cookie
Như ô Dán cookie: nạp vào trình duyệt ở lần mở kế tiếp (ghi đè cookie trùng tên, không xoá cookie khác).
- Xuất được cả khi hồ sơ đang đóng. Nhập: cookie được nạp vào trình duyệt ở lần mở kế tiếp — cookie trùng tên bị ghi đè, cookie khác giữ nguyên.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/cookies |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | public_id | số | chuỗi | có | — |
cookies | chuỗi | mảng | có | JSON, Netscape hoặc a=1; b=2 |
mode | chuỗi | không | merge (mặc định) · replace |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/cookies",
json={
"profile_id": 1,
"mode": "merge",
"cookies": "# Netscape HTTP Cookie File\n.shopee.vn\tTRUE\t/\tTRUE\t1893456000\tSPC_F\t…"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/cookies`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"profile_id": 1,
"mode": "merge",
"cookies": "# Netscape HTTP Cookie File\n.shopee.vn\tTRUE\t/\tTRUE\t1893456000\tSPC_F\t…"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/cookies" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 1, "mode": "merge", "cookies": "# Netscape HTTP Cookie File\n.shopee.vn\tTRUE\t/\tTRUE\t1893456000\tSPC_F\t…"}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"cookies": 1,
"applies": "next_open",
"restart_required": false
},
"msg": "success"
}8.6Kho tiện ích
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/extension/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/extension/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/extension/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/extension/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"key": "captcha-solver",
"name": "Giải captcha (dựng sẵn)",
"builtin": true,
"enabled": false,
"scope": "all",
"path": "captcha-solver",
"source": "Dựng sẵn"
},
{
"key": "metamask",
"name": "MetaMask",
"builtin": false,
"enabled": false,
"scope": "all",
"path": "metamask",
"source": "Chrome Web Store",
"version": "12.3.1"
}
]
},
"msg": "success"
}8.7Bật / tắt tiện ích
Áp cho hồ sơ mở sau lệnh này.
- Tiện ích giải captcha dựng sẵn bật / tắt trong trang Tiện ích của app.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/extension/toggle |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
key | chuỗi | có | — |
enabled | bool | không | Mặc định true |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/extension/toggle",
json={"key": "metamask", "enabled": True},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/extension/toggle`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"key": "metamask", "enabled": true})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/extension/toggle" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"key": "metamask", "enabled": true}'Ví dụ trả về
{
"code": 0,
"data": {
"key": "metamask",
"enabled": true,
"applies": "next_open"
},
"msg": "success"
}8.8Cài tiện ích
Từ Chrome Web Store. Tiện ích mới mặc định tắt.
- Tiện ích mới mặc định TẮT; bật bằng Bật / tắt tiện ích — áp cho hồ sơ mở sau đó.
- Tệp .zip / .crx / thư mục: thêm trong app.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/extension/install |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
url | chuỗi | có | Mã 32 ký tự hoặc link cửa hàng |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/extension/install",
json={
"url": "https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/extension/install`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"url": "https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/extension/install" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"url": "https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm"}'Ví dụ trả về
{
"code": 0,
"data": {
"installed": true,
"key": "hlkenndednhfkekhgcdicdfddnkalmdm",
"name": "Cookie-Editor",
"enabled": false
},
"msg": "success"
}8.9Gỡ tiện ích
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/extension/remove |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
key | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/extension/remove",
json={"key": "hlkenndednhfkekhgcdicdfddnkalmdm"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/extension/remove`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"key": "hlkenndednhfkekhgcdicdfddnkalmdm"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/extension/remove" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"key": "hlkenndednhfkekhgcdicdfddnkalmdm"}'Ví dụ trả về
{
"code": 0,
"data": {
"removed": "hlkenndednhfkekhgcdicdfddnkalmdm"
},
"msg": "success"
}9. Người dùng · Hệ thống
Gói, hạn mức còn lại và trạng thái API.
9.1Tài khoản
Gói, trạng thái, hạn dùng, hạn mức hồ sơ, số hồ sơ, lượt tạo hôm nay.
- Đọc ngay trong máy, không gọi máy chủ; không trả email hay khoá giấy phép.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/user/info |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/user/info",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/user/info`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/user/info?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"logged_in": true,
"plan": "basic",
"status": "active",
"expires_at": "2026-11-02T00:00:00",
"locked": false,
"lock_reason": "",
"max_profiles": 100,
"profiles": 4,
"trash": 0,
"profiles_left": 96,
"can_create": true,
"daily_create_limit": 0,
"created_today": 4
},
"msg": "success"
}9.2API có đang chạy?
Không cần khoá. Trả phiên bản app.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/status |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
r = requests.get("http://127.0.0.1:19555/status")
print(r.json())// Node 18+ (tệp .mjs)
const r = await fetch("http://127.0.0.1:19555/status");
console.log(await r.json());curl "http://127.0.0.1:19555/status"Ví dụ trả về
{
"code": 0,
"data": {
"version": "2.9.221",
"ready": true,
"api": "v1"
},
"msg": "success"
}API cục bộ — Bản 2.9.220
27 lệnh, chia 6 nhóm. Chọn một nhóm để xem từng lệnh: yêu cầu, tham số, ví dụ gọi và ví dụ trả về.
1. Điều khiển hồ sơ
Mở, đóng hồ sơ và lấy cổng điều khiển cho Selenium / Puppeteer / Playwright.
/api/v1/browser/startMở trình duyệt của hồ sơ, trả cổng điều khiển cho Selenium / Puppeteer / Playwright. Đang mở rồi thì trả luôn cổng đang dùng (already_open).1.2GETĐóng hồ sơ /api/v1/browser/stopĐóng trình duyệt của hồ sơ.1.3GETHồ sơ có đang mở? /api/v1/browser/activeActive / Inactive kèm cổng điều khiển nếu đang mở.1.4GETHồ sơ đang mở /api/v1/browser/listMọi hồ sơ đang mở cùng cổng điều khiển.1.5POSTXoá cache /api/v1/browser/clear-cacheXoá bộ nhớ đệm, GIỮ cookie và đăng nhập. Hồ sơ phải đang đóng.1.1Mở hồ sơ
Mở trình duyệt của hồ sơ, trả cổng điều khiển cho Selenium / Puppeteer / Playwright. Đang mở rồi thì trả luôn cổng đang dùng (already_open).
- Selenium: dùng
data.ws.seleniumchodebuggerAddress. Puppeteer / Playwright: dùngdata.ws.puppeteer. - Mở lần đầu có proxy thường mất 5–30 giây — đặt thời gian chờ của mã ≥ 90 giây.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/start |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | Hồ sơ cần mở |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/start",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/start?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/start?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"already_open": false,
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041",
"puppeteer": "ws://127.0.0.1:10041/devtools/browser/6f1c2b9e-3d4a-4c8e-9a51-0b7d2e4f8c13"
}
},
"msg": "success"
}1.2Đóng hồ sơ
Đóng trình duyệt của hồ sơ.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/stop |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/stop",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/stop?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/stop?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1
},
"msg": "success"
}1.3Hồ sơ có đang mở?
Active / Inactive kèm cổng điều khiển nếu đang mở.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/active |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/active",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/active?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/active?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"status": "Active",
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041",
"puppeteer": "ws://127.0.0.1:10041/devtools/browser/6f1c2b9e-3d4a-4c8e-9a51-0b7d2e4f8c13"
}
},
"msg": "success"
}1.4Hồ sơ đang mở
Mọi hồ sơ đang mở cùng cổng điều khiển.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/browser/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/browser/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/browser/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"profile_id": 1,
"name": "Shop VN 01",
"debug_port": "10041",
"ws": {
"selenium": "127.0.0.1:10041"
}
}
],
"total": 1
},
"msg": "success"
}1.5Xoá cache
Xoá bộ nhớ đệm, GIỮ cookie và đăng nhập. Hồ sơ phải đang đóng.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/browser/clear-cache |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/browser/clear-cache",
json={"profile_id": 2},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/browser/clear-cache`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_id": 2})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/browser/clear-cache" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 2}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 2,
"cleared": true
},
"msg": "success"
}2. Thông tin hồ sơ
Tra cứu danh sách, chi tiết hồ sơ và các lựa chọn khi tạo.
2.1Danh sách hồ sơ
Có phân trang.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/list |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
page | số | không | Trang (từ 1) |
page_size | số | không | Số hồ sơ mỗi trang (1–500, mặc định 100) |
search | chuỗi | không | Tìm theo tên / ghi chú / host proxy / mã 8 số |
group | chuỗi | không | Tên nhóm |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/list",
params={"page": 1, "page_size": 50},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/list?page=1&page_size=50`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/list?page=1&page_size=50&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"profile_id": 3,
"public_id": "37286469",
"name": "TikTok US 01",
"group": "",
"os": "Android",
"browser": "Chrome",
"note": "",
"tags": "",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "Không proxy",
"host": "",
"port": "",
"user": "",
"pass": ""
}
},
{
"profile_id": 2,
"public_id": "67074971",
"name": "Shop VN 02",
"group": "Shop VN",
"os": "macOS",
"browser": "Safari",
"note": "",
"tags": "",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "SOCKS5",
"host": "203.0.113.11",
"port": "1080",
"user": "user2",
"pass": "***"
}
},
{
"profile_id": 1,
"public_id": "46829261",
"name": "Shop VN 01",
"group": "Shop VN",
"os": "Windows",
"browser": "Chrome",
"note": "",
"tags": "shopee, vn",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "HTTP",
"host": "203.0.113.10",
"port": "8000",
"user": "user1",
"pass": "***"
}
}
],
"page": 1,
"page_size": 50,
"total": 3
},
"msg": "success"
}2.2Chi tiết hồ sơ
Tên, nhóm, nhãn, ghi chú, proxy (mật khẩu che ***), thư mục dữ liệu.
- Ví dụ trả về bên dưới đã rút gọn.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/profile/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/profile/detail",
params={"profile_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/detail?profile_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/profile/detail?profile_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"public_id": "46829261",
"name": "Shop VN 01",
"group": "Shop VN",
"os": "Windows",
"browser": "Chrome",
"note": "",
"tags": "shopee, vn",
"status": "Sẵn sàng",
"last_open": "",
"proxy": {
"type": "HTTP",
"host": "203.0.113.10",
"port": "8000",
"user": "user1",
"pass": "***"
},
"user_data_dir": "<thư mục ADSSPEED>\\accounts\\_cuc_bo\\profiles\\46829261"
},
"msg": "success"
}2.3Danh sách nhóm
Nhóm hồ sơ và số hồ sơ mỗi nhóm.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/group/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/group/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/group/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"name": "(Chưa phân nhóm)",
"count": 1
},
{
"name": "Shop VN",
"count": 2
}
]
},
"msg": "success"
}3. Thao tác hồ sơ
Tạo, sửa, nhân bản, xoá hồ sơ; nhãn, ghim, nhóm và cấu hình mẫu.
/api/v1/profile/createTạo MỘT hồ sơ. Vân tay do app sinh theo OS / trình duyệt.3.2POSTSửa hồ sơ /api/v1/profile/updateChỉ đổi trường được gửi.3.3POSTNhân bản hồ sơ /api/v1/profile/duplicateTạo bản sao với thư mục dữ liệu riêng.3.4POSTXoá hồ sơ /api/v1/profile/deleteĐưa vào Thùng rác (khôi phục được trong app).3.5POSTChuyển nhóm /api/v1/group/assignĐưa các hồ sơ vào một nhóm.3.6POSTĐổi tên nhóm /api/v1/group/rename3.7POSTXoá nhóm /api/v1/group/deleteMặc định chỉ bỏ nhóm, giữ nguyên hồ sơ.3.8GETCấu hình mẫu /api/v1/config/listCác cấu hình mẫu tạo trong app (active = đang bật).3.9GETChi tiết cấu hình mẫu /api/v1/config/detailTên, OS, trình duyệt, phiên bản OS của một cấu hình.3.10POSTBật cấu hình mẫu /api/v1/config/applyHồ sơ tạo qua API sau đó theo cấu hình này. 0 = tắt.3.1Tạo hồ sơ
Tạo MỘT hồ sơ. Vân tay do app sinh theo OS / trình duyệt.
- ⚠ proxy dạng object PHẢI có
type(HTTP / HTTPS / SOCKS5). Thiếutypethì hồ sơ được lưu KHÔNG proxy — mở ra bằng IP thật. - Proxy dạng chuỗi ở bản này chỉ nhận
ip:port:user:pass(loại HTTP). SOCKS5: gửi object.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/create |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | có | Tên hồ sơ |
os | chuỗi | không | Windows · macOS · Linux · Android · iOS (mặc định Windows) |
browser | chuỗi | không | Chrome, Edge, Safari… — đúng loại có trên OS đó (mặc định Chrome) |
group / note | chuỗi | không | Nhóm, ghi chú |
tags | chuỗi | không | Nhãn, cách nhau dấu phẩy |
proxy | chuỗi | object | không | Chuỗi ip:port:user:pass (HTTP) hoặc {type, host, port, user, pass} |
proxy_group | chuỗi | không | Lấy lần lượt một proxy trong nhóm proxy này |
browser_build | chuỗi | không | Bản lõi trình duyệt (ví dụ 154) |
launch_args | chuỗi | mảng | không | Tham số khởi động, ví dụ --lang=vi |
bo_qua_cau_hinh | bool | không | true = không áp cấu hình mẫu đang bật |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/create",
json={
"name": "Shop VN 01",
"os": "Windows",
"browser": "Chrome",
"group": "Shop VN",
"tags": "shopee, vn",
"proxy": "203.0.113.10:8000:user1:pass1",
"launch_args": "--lang=vi"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/create`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"name": "Shop VN 01",
"os": "Windows",
"browser": "Chrome",
"group": "Shop VN",
"tags": "shopee, vn",
"proxy": "203.0.113.10:8000:user1:pass1",
"launch_args": "--lang=vi"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/create" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"name": "Shop VN 01", "os": "Windows", "browser": "Chrome", "group": "Shop VN", "tags": "shopee, vn", "proxy": "203.0.113.10:8000:user1:pass1", "launch_args": "--lang=vi"}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"public_id": "46829261"
},
"msg": "success"
}3.2Sửa hồ sơ
Chỉ đổi trường được gửi.
- ⚠ proxy chỉ nhận object có
type; gửi chuỗi sẽ bị bỏ qua.{}= bỏ proxy.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/update |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
name / group / note / tags | chuỗi | không | — |
proxy | object | không | {type, host, port, user, pass}; {} = bỏ proxy |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/update",
json={
"profile_id": 1,
"note": "Tài khoản chính",
"proxy": {
"type": "HTTP",
"host": "203.0.113.30",
"port": 8000,
"user": "user5",
"pass": "pass5"
}
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/update`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"profile_id": 1,
"note": "Tài khoản chính",
"proxy": {
"type": "HTTP",
"host": "203.0.113.30",
"port": 8000,
"user": "user5",
"pass": "pass5"
}
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/update" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 1, "note": "Tài khoản chính", "proxy": {"type": "HTTP", "host": "203.0.113.30", "port": 8000, "user": "user5", "pass": "pass5"}}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 1,
"updated": [
"note",
"proxy_host",
"proxy_pass",
"proxy_port",
"proxy_type",
"proxy_user"
]
},
"msg": "success"
}3.3Nhân bản hồ sơ
Tạo bản sao với thư mục dữ liệu riêng.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/duplicate |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/duplicate",
json={"profile_id": 2},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/duplicate`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_id": 2})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/duplicate" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_id": 2}'Ví dụ trả về
{
"code": 0,
"data": {
"profile_id": 4
},
"msg": "success"
}3.4Xoá hồ sơ
Đưa vào Thùng rác (khôi phục được trong app).
- Hồ sơ đang mở KHÔNG tự đóng khi xoá — gọi browser/stop trước.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/profile/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | Mảng id, hoặc chuỗi "1,2,3" |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/profile/delete",
json={"profile_ids": [4]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/profile/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [4]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/profile/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [4]}'Ví dụ trả về
{
"code": 0,
"data": {
"trashed": [
4
]
},
"msg": "success"
}3.5Chuyển nhóm
Đưa các hồ sơ vào một nhóm.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
profile_ids | mảng | có | — |
group | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/assign",
json={"profile_ids": [3], "group": "TikTok"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"profile_ids": [3], "group": "TikTok"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"profile_ids": [3], "group": "TikTok"}'Ví dụ trả về
{
"code": 0,
"data": {
"group": "TikTok",
"profiles": [
3
]
},
"msg": "success"
}3.6Đổi tên nhóm
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/rename |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
old | chuỗi | có | — |
new | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/rename",
json={"old": "TikTok", "new": "TikTok US"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/rename`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"old": "TikTok", "new": "TikTok US"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/rename" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"old": "TikTok", "new": "TikTok US"}'Ví dụ trả về
{
"code": 0,
"data": {
"old": "TikTok",
"new": "TikTok US"
},
"msg": "success"
}3.7Xoá nhóm
Mặc định chỉ bỏ nhóm, giữ nguyên hồ sơ.
- ⚠
drop_profiles: trueXOÁ HẲN mọi hồ sơ trong nhóm — không qua Thùng rác, không khôi phục được. - Muốn giữ hồ sơ: KHÔNG gửi tham số này. Ở bản này, gửi chuỗi
"false"cũng bị hiểu làtrue.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/group/delete |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
group | chuỗi | có | — |
drop_profiles | bool | không | Xem cảnh báo bên dưới |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/group/delete",
json={"group": "Tạm"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/group/delete`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"group": "Tạm"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/group/delete" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"group": "Tạm"}'Ví dụ trả về
{
"code": 0,
"data": {
"group": "Tạm",
"dropped_profiles": false
},
"msg": "success"
}3.8Cấu hình mẫu
Các cấu hình mẫu tạo trong app (active = đang bật).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/config/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/config/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/config/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"config_id": 1,
"name": "Windows · Chrome — mặc định an toàn",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"active": true
},
{
"config_id": 2,
"name": "Windows · Chrome — máy cấu hình thấp",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"active": false
},
{
"config_id": 3,
"name": "macOS · Safari",
"os": "macOS",
"browser": "Safari",
"os_version": "",
"active": false
},
{
"config_id": 4,
"name": "iOS · Safari (điện thoại)",
"os": "iOS",
"browser": "Safari",
"os_version": "",
"active": false
},
{
"config_id": 5,
"name": "Android · Chrome (điện thoại)",
"os": "Android",
"browser": "Chrome",
"os_version": "",
"active": false
}
]
},
"msg": "success"
}3.9Chi tiết cấu hình mẫu
Tên, OS, trình duyệt, phiên bản OS của một cấu hình.
- Ví dụ trả về bên dưới đã rút gọn.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/config/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
config_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/config/detail",
params={"config_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/detail?config_id=1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/config/detail?config_id=1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"config_id": 1,
"name": "Windows · Chrome — mặc định an toàn",
"os": "Windows",
"browser": "Chrome",
"os_version": "",
"active": true
},
"msg": "success"
}3.10Bật cấu hình mẫu
Hồ sơ tạo qua API sau đó theo cấu hình này. 0 = tắt.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/config/apply |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
config_id | số | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/config/apply",
json={"config_id": 1},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/config/apply`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"config_id": 1})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/config/apply" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"config_id": 1}'Ví dụ trả về
{
"code": 0,
"data": {
"active_config_id": 1
},
"msg": "success"
}4. Proxy
Gán và kiểm proxy cho hồ sơ; kho proxy, nhóm proxy, Dcom 4G.
/api/v1/proxy/listProxy trong kho (mật khẩu che).4.2POSTNhập proxy vào kho /api/v1/proxy/importDòng sai định dạng bị bỏ qua và đếm vào skipped.4.3POSTGán proxy kho cho hồ sơ /api/v1/proxy/assign1 proxy → mọi hồ sơ; N proxy → chia vòng.4.4GETNhóm proxy /api/v1/proxy/group/list4.5GETProxy trong nhóm /api/v1/proxy/group/detail4.6POSTĐưa proxy vào nhóm /api/v1/proxy/group/assignTên rỗng = bỏ khỏi nhóm.4.7GETDcom 4G /api/v1/dcom/listThiết bị Dcom và proxy của chúng.4.8GETĐổi IP Dcom /api/v1/dcom/rotate4.1Kho proxy
Proxy trong kho (mật khẩu che).
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"id": 2,
"type": "SOCKS5",
"host": "203.0.113.22",
"port": "1080",
"user": "user4",
"country": "",
"city": "",
"live": -1,
"ping": 0,
"provider": "",
"note": "",
"created_at": "2026-10-02 23:09",
"grp": "US-Res",
"masked": "203.0.113.22:1080:user4:***"
},
{
"id": 1,
"type": "HTTP",
"host": "203.0.113.21",
"port": "8000",
"user": "user3",
"country": "",
"city": "",
"live": -1,
"ping": 0,
"provider": "",
"note": "",
"created_at": "2026-10-02 23:09",
"grp": "US-Res",
"masked": "203.0.113.21:8000:user3:***"
}
],
"total": 2
},
"msg": "success"
}4.2Nhập proxy vào kho
Dòng sai định dạng bị bỏ qua và đếm vào skipped.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/import |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxies | mảng | chuỗi | có | Mảng "ip:port:user:pass" / object, hoặc chuỗi nhiều dòng |
group | chuỗi | không | Nhóm proxy |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/import",
json={
"proxies": [
"203.0.113.21:8000:user3:pass3",
{
"type": "SOCKS5",
"host": "203.0.113.22",
"port": 1080,
"user": "user4",
"pass": "pass4"
}
],
"group": "US-Res"
},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/import`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"proxies": [
"203.0.113.21:8000:user3:pass3",
{
"type": "SOCKS5",
"host": "203.0.113.22",
"port": 1080,
"user": "user4",
"pass": "pass4"
}
],
"group": "US-Res"
})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/import" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxies": ["203.0.113.21:8000:user3:pass3", {"type": "SOCKS5", "host": "203.0.113.22", "port": 1080, "user": "user4", "pass": "pass4"}], "group": "US-Res"}'Ví dụ trả về
{
"code": 0,
"data": {
"imported": 2,
"skipped": 0,
"proxy_ids": [
1,
2
]
},
"msg": "success"
}4.3Gán proxy kho cho hồ sơ
1 proxy → mọi hồ sơ; N proxy → chia vòng.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | có | — |
profile_ids | mảng | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/assign",
json={"proxy_ids": [1], "profile_ids": [3]},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [1], "profile_ids": [3]})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [1], "profile_ids": [3]}'Ví dụ trả về
{
"code": 0,
"data": {
"assigned": 1,
"proxies_used": 1
},
"msg": "success"
}4.4Nhóm proxy
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/group/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/group/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/group/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"ten": "US-Res",
"so": 2,
"live": 0
}
]
},
"msg": "success"
}4.5Proxy trong nhóm
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/proxy/group/detail |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | có | — |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/proxy/group/detail",
params={"name": "US-Res"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/detail?name=US-Res`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/proxy/group/detail?name=US-Res&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"group": "US-Res",
"count": 2,
"list": [
{
"proxy_id": 1,
"type": "HTTP",
"host": "203.0.113.21",
"port": "8000",
"user": "user3",
"country": "",
"live": -1
},
{
"proxy_id": 2,
"type": "SOCKS5",
"host": "203.0.113.22",
"port": "1080",
"user": "user4",
"country": "",
"live": -1
}
]
},
"msg": "success"
}4.6Đưa proxy vào nhóm
Tên rỗng = bỏ khỏi nhóm.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| POST | http://127.0.0.1:19555/api/v1/proxy/group/assign |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
proxy_ids | mảng | có | — |
name | chuỗi | không | Tối đa 40 ký tự |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.post(f"{BASE}/api/v1/proxy/group/assign",
json={"proxy_ids": [2], "name": "US-Res"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/proxy/group/assign`, {
method: "POST",
headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
body: JSON.stringify({"proxy_ids": [2], "name": "US-Res"})
});
console.log(await r.json());curl -X POST "http://127.0.0.1:19555/api/v1/proxy/group/assign" \
-H "X-API-Key: API_KEY" -H "Content-Type: application/json" \
-d '{"proxy_ids": [2], "name": "US-Res"}'Ví dụ trả về
{
"code": 0,
"data": {
"updated": 1,
"group": "US-Res"
},
"msg": "success"
}4.7Dcom 4G
Thiết bị Dcom và proxy của chúng.
- Ví dụ trả về bên dưới đã rút gọn.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/dcom/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/dcom/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/dcom/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/dcom/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"chay": true,
"api_port": 8500,
"ds": [
{
"name": "DCOM-1",
"imei": "35xxxxxxxxxxx21",
"ip": "100.64.12.7",
"nha_mang": "Viettel",
"user": "dcom",
"proxy_local": "127.0.0.1:8001:dcom:***",
"proxy_lan": "192.168.1.5:8001:dcom:***"
}
]
},
"msg": "success"
}4.8Đổi IP Dcom
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/dcom/rotate |
Tham số
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name | chuỗi | không | Tên Dcom; all = tất cả (mặc định) |
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/dcom/rotate",
params={"name": "DCOM-1"},
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/dcom/rotate?name=DCOM-1`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/dcom/rotate?name=DCOM-1&key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"rotating": "DCOM-1",
"count": 1
},
"msg": "success"
}5.1Kho tiện ích
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/api/v1/extension/list |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
BASE, KEY = "http://127.0.0.1:19555", "API_KEY"
r = requests.get(f"{BASE}/api/v1/extension/list",
headers={"X-API-Key": KEY})
print(r.json())// Node 18+ (tệp .mjs)
const BASE = "http://127.0.0.1:19555", KEY = "API_KEY";
const r = await fetch(`${BASE}/api/v1/extension/list`, { headers: { "X-API-Key": KEY } });
console.log(await r.json());curl "http://127.0.0.1:19555/api/v1/extension/list?key=API_KEY"Ví dụ trả về
{
"code": 0,
"data": {
"list": [
{
"key": "metamask",
"name": "MetaMask",
"builtin": false,
"enabled": true,
"scope": "all",
"path": "metamask",
"source": "Chrome Web Store",
"version": "12.3.1"
}
]
},
"msg": "success"
}6. Hệ thống
Kiểm tra API đang chạy và phiên bản app.
6.1API có đang chạy?
Không cần khoá. Trả phiên bản app.
Yêu cầu
| Phương thức | Đường dẫn |
|---|---|
| GET | http://127.0.0.1:19555/status |
Tham số
Không cần tham số (ngoài khoá API).
Ví dụ yêu cầu
import requests
r = requests.get("http://127.0.0.1:19555/status")
print(r.json())// Node 18+ (tệp .mjs)
const r = await fetch("http://127.0.0.1:19555/status");
console.log(await r.json());curl "http://127.0.0.1:19555/status"Ví dụ trả về
{
"code": 0,
"data": {
"version": "2.9.220",
"ready": true,
"api": "v1"
},
"msg": "success"
}