Tài liệu cho nhà phát triển · API v1

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.

Địa chỉ gốchttp://127.0.0.1:19555
Xác thựcX-API-Key
Trả về{code, data, msg}
Phạm vichỉ 127.0.0.1

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

  1. Bắt đầu nhanh — bật API, lấy khoá, gọi thử, gắn công cụ tự động hoá.
  2. Xác thực và mã lỗi — cách gửi khoá, cách đọc kết quả.
  3. Giới hạn & quy tắc gói — những gì API cho và không cho làm.
  4. 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ơ.

  1. Mở ADSSPEED và đăng nhập. API chạy cùng app — tắt app thì API cũng tắt.
  2. 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ộ.
  3. 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.
  4. 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())
    Ví dụ trả vềHTTP 200
    {
      "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.

  5. 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)
    Lưu ý
    • Selenium cần chromedriver cù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ường Browser, 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ơ.

Xác thực

Mọi lệnh (trừ /status) cần khoá API. Gửi khoá theo một trong hai cách:

Header — khuyên dùng
X-API-Key: ads-xxxxxxxx
Tham số trên địa chỉ
…/api/v1/profile/list?key=ads-xxxxxxxx

Thiếu hoặc sai khoá: HTTP 401. Khoá nằm ở Cài đặt → API & Tích hợp (dòng Khoá API).

Bảo mật
  • 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.

Khuôn trả vềHTTP 200
{
  "code": 0,
  "data": {
    "…": "…"
  },
  "msg": "success"
}

Bảng mã

codeHTTPÝ nghĩa
0200Thành công.
-1200Lỗi nghiệp vụ — msg nói rõ lý do (proxy sai, không tìm thấy hồ sơ, hết chỗ…).
401401Thiếu hoặc sai khoá API.
403403App chưa đăng nhập hoặc đang khởi động. Bản mới
404404Không có đường dẫn này — hoặc bản app bạn đang dùng chưa có lệnh này.
429200Gọi lệnh nặng quá nhanh (quá 1 lần/giây).

Ví dụ lỗi

Ví dụ code -1
Ví dụHTTP 200
{
  "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
Ví dụHTTP 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
Ví dụHTTP 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
Ví dụHTTP 404
{
  "code": 404,
  "data": null,
  "msg": "Không có đường dẫn '/api/v1/khong-co'. Xem /status."
}
Ví dụ code 429
Ví dụHTTP 200
{
  "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.

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 -1 kè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_size tố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ạngVí dụGhi chúBản mới2.9.220
host:port203.0.113.10:8000Không mật khẩu, loại HTTPcócó
host:port:user:pass203.0.113.10:8000:user:passKiểu nhà bán proxy hay xuấtcócó
user:pass@host:portuser:pass@203.0.113.10:8000—có—
loại://user:pass@host:portsocks5://user:pass@203.0.113.10:1080http · https · socks4 · socks5có—
LOẠI|host|port|user|passSOCKS5|203.0.113.10|1080|user|passDạng xuất của nhiều tool antidetectcó—
object{"type":"socks5","host":"203.0.113.10","port":1080,"user":"u","pass":"p"}—cócó
Theo phiên bản
  • 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ận host: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ã:

profile_id
Số thứ tự của hồ sơ trong app (1, 2, 3…). Mọi lệnh đều nhận.
public_id
Mã 8 số hiện trên giao diện — cũng là tên thư mục dữ liệu của hồ sơ.
Theo phiên bản
  • 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ố sang profile_id: gọi Danh sách hồ sơ với search = 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)?
API đang tắt, app chưa mở, hoặc cổng bị chương trình khác giữ. Mở app → Cài đặt → API & Tích hợp: bật API (bản 2.9.220 mặc định tắt); cổng bị giữ thì đổi sang cổng khác rồi bấm Áp dụng, nhớ đổi cổng trong mã của bạn.
Báo 401?
Thiếu hoặc sai khoá. Chép lại khoá ở Cài đặt → API & Tích hợp; nếu vừa bấm Đổi khoá, cập nhật khoá mới vào mã.
Báo 403?
App chưa đăng nhập hoặc đang khởi động (bản mới). Đăng nhập rồi gọi lại sau vài giây.
Gọi một lệnh báo 404?
Bản app chưa có lệnh đó. Kiểm số bản bằng 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?
Lệnh mở hồ sơ tối đa 1 lần/giây — chờ 1 giây giữa hai lần mở.
Selenium báo “This version of ChromeDriver only supports…”?
Dùng chromedriver cùng số phiên bản với lõi của hồ sơ (xem /json/version trên cổng debug).
Puppeteer / Playwright mở ra trang trắng, mất đăng nhập?
Bạn đang tạo ngữ cảnh mới. Dùng 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?
Có — hồ sơ tạo bằng API cũng là hồ sơ của gói, như tạo trong app. Xem gói và hạn mức còn lại bằng lệnh Tài khoản (bản mới).
Xoá nhầm hồ sơ?
Hồ sơ xoá bằng lệnh Xoá hồ sơ nằm trong Thùng rác: khôi phục trong app, hoặc bằng lệnh Khôi phục (bản mới). Xoá vĩnh viễn thì không lấy lại được.

Thay đổi giữa các bản

Từ Bản 2.9.220 lên Bản mới.

Đổ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ếu type ⇒ 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).
Bỏ
Các tham số và lệnh liên quan vân tay. Muốn kiểu vân tay riêng: dùng Cấu hình mẫu (config_id khi tạo hồ sơ).
Từ bản 2.9.221

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ề.

Áp dụng cho ADSSPEED 2.9.221 trở lên. Đang dùng 2.9.220? Xem tài liệu Bản 2.9.220 hoặc cập nhật app. Kiểm bản đang dùng: GET /status → 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.5 lệnh — Mở hồ sơ · Đóng hồ sơ · Hồ sơ có đang mở? …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.6 lệnh — Danh sách hồ sơ · Chi tiết hồ sơ · Trạng thái để lọc …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.12 lệnh — Tạo hồ sơ · Sửa hồ sơ · Nhãn nhiều hồ sơ …4. ProxyGán và kiểm proxy cho hồ sơ; kho proxy, nhóm proxy, Dcom 4G.14 lệnh — Đổi proxy nhiều hồ sơ · Kiểm một proxy · Kiểm proxy của hồ sơ …5. Kịch bảnChạy kịch bản kéo-thả trên các hồ sơ và theo dõi tiến độ.4 lệnh — Danh sách kịch bản · Chạy kịch bản · Tiến độ kịch bản …6. Chiến dịchChạ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.9 lệnh — Danh sách chiến dịch · Chi tiết chiến dịch · Lưu cài đặt …7. Lịch chạyHẹn giờ chạy kịch bản hằng ngày hoặc một lần.4 lệnh — Danh sách lịch · Thêm lịch · Bật / tắt lịch …8. Thùng rác · Cookie · Tiện íchKhôi phục / xoá vĩnh viễn hồ sơ, xuất nhập cookie, quản lý tiện ích.9 lệnh — Thùng rác · Khôi phục · Xoá vĩnh viễn …9. Người dùng · Hệ thốngGói, hạn mức còn lại và trạng thái API.2 lệnh — Tài khoản · API có đang chạy?

Tải bộ Postman — Bản mới (.json)

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.

GET1 lệnh/giây
Lưu ý
  • Selenium: dùng data.ws.selenium cho debuggerAddress. Puppeteer / Playwright: dùng data.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: true kèm cổng hiện tại, không mở thêm cửa sổ.
  • proxy / launch_args gử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
GEThttp://127.0.0.1:19555/api/v1/browser/start
POSThttp://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ểuBắt buộcMô tả
profile_id | public_idsố | chuỗicóHồ sơ cần mở (public_id = mã 8 số trên giao diện)
proxychuỗi | objectkhôngProxy mới — lưu vào hồ sơ trước khi mở
launch_argschuỗi | mảngkhôngTham 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ơ.

GET
Lưu ý
  • Đó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
GEThttp://127.0.0.1:19555/api/v1/browser/stop

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ở.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/browser/active

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/browser/clear-cache

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "profile_id": 2,
    "cleared": true
  },
  "msg": "success"
}

2.1Danh sách hồ sơ

Lọc và sắp như bảng hồ sơ trong app. Có phân trang.

GET
Lưu ý
  • Mỗi trang tối đa 500 hồ sơ. Lấy hết: tăng page tới khi page × page_size ≥ total.

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/profile/list

Tham số

Tham sốKiểuBắt buộcMô tả
pagesốkhôngTrang (từ 1)
page_sizesốkhôngSố hồ sơ mỗi trang (1–500, mặc định 100)
searchchuỗikhôngTìm theo tên / ghi chú / host proxy / mã 8 số
groupchuỗikhôngTên nhóm; __ungrouped__ = hồ sơ chưa có nhóm
statuschuỗikhôngrun · err · ok · uncheck · ready (xem profile/statuses)
tagchuỗikhôngNhãn; nhiều nhãn cách dấu phẩy = có MỘT trong các nhãn
sortchuỗikhôngrecent (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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/profile/detail

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

3.1POSTTạo hồ sơ /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.

POST
Lưu ý
  • 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: -1 kè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), Netscape cookies.txt, hoặc a=1; b=2 kèm start_url.

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/profile/create

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗicóTên hồ sơ
oschuỗikhôngWindows · macOS · Linux · Android · iOS (mặc định Windows)
browserchuỗikhôngTheo os — xem browser/versions (mặc định Chrome)
os_versionchuỗikhôngPhiên bản OS — xem browser/versions; bỏ trống = tự động
browser_buildchuỗikhôngBản lõi đã cài — xem browser/versions
config_idsốkhôngCấu hình mẫu (config/list). Không gửi = theo cấu hình đang bật
group / note / tagschuỗikhôngNhóm, ghi chú, nhãn (nhãn: chuỗi phẩy hoặc mảng)
proxychuỗi | objectkhônghost:port:user:pass · socks5://user:pass@host:port · TYPE|host|port|user|pass · {type,host,port,user,pass}
proxy_groupchuỗikhôngLấy lần lượt một proxy trong nhóm proxy này
start_urlchuỗikhôngURL mở đầu
launch_argschuỗi | mảngkhôngTham số khởi động, ví dụ --lang=vi
cookieschuỗi | mảngkhôngCookie 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/profile/update

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—
name / group / note / tagschuỗikhông—
proxychuỗi | objectkhông{} = bỏ proxy; null = giữ nguyên
start_urlchuỗikhông"" = về URL mặc định
launch_argschuỗi | mảngkhô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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/profile/tags

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—
tagschuỗi | mảngcóNhãn
modechuỗikhôngset (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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/profile/pin

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—
pinnedboolkhôngMặ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POST
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/profile/duplicate

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POST
Lưu ý

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/profile/delete

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "trashed": [
      4
    ]
  },
  "msg": "success"
}

3.7Chuyển nhóm

Đưa các hồ sơ vào một nhóm.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/group/assign

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—
groupchuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "group": "TikTok",
    "profiles": [
      3
    ]
  },
  "msg": "success"
}

3.8Đổi tên nhóm

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/group/rename

Tham số

Tham sốKiểuBắt buộcMô tả
oldchuỗicó—
newchuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST
Lưu ý
  • drop_profiles: true đưa hồ sơ trong nhóm vào Thùng rác (khôi phục được). Chỉ true / 1 mới được hiểu là có.

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/group/delete

Tham số

Tham sốKiểuBắt buộcMô tả
groupchuỗicó—
drop_profilesboolkhô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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ơ).

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/config/detail

Tham số

Tham sốKiểuBắt buộcMô tả
config_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/config/apply

Tham số

Tham sốKiểuBắt buộcMô tả
config_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

4.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).

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/proxy/update-profiles

Tham số

Tham sốKiểuBắt buộcMô tả
itemsmảngkhông[{profile_id, proxy}]
profile_ids + proxymảng + chuỗikhôngDù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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ễ.

POST1 lệnh/giâyMới — chưa có ở 2.9.220
Lưu ý
  • Đ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
POSThttp://127.0.0.1:19555/api/v1/proxy/test

Tham số

Tham sốKiểuBắt buộcMô tả
proxychuỗi | objectcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POSTMới — chưa có ở 2.9.220
Lưu ý

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/profile/check-proxy

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "started": true,
    "profile_ids": [
      1,
      2
    ]
  },
  "msg": "success"
}

4.4Kho proxy

Proxy trong kho (mật khẩu che ***).

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/import

Tham số

Tham sốKiểuBắt buộcMô tả
proxiesmảngcóChuỗi mọi định dạng hoặc object
groupchuỗikhôngNhó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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/assign

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngcó—
profile_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220
Lưu ý

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/check

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngkhông—
stopboolkhô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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "started": true,
    "total": 2
  },
  "msg": "success"
}

4.8Tiến độ kiểm kho

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/delete

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "deleted": [
      2
    ]
  },
  "msg": "success"
}

4.10Nhóm proxy

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "list": [
      {
        "ten": "US-Res",
        "so": 2,
        "live": 0
      }
    ]
  },
  "msg": "success"
}

4.11Proxy trong nhóm

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/proxy/group/detail

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/group/assign

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngcó—
namechuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

GET1 lệnh/giây
Lưu ý
  • 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
GEThttp://127.0.0.1:19555/api/v1/dcom/rotate

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗikhôngTê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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "rotating": "DCOM-1",
    "count": 1
  },
  "msg": "success"
}

5.1Danh sách kịch bản

Thông tin chung (không trả nội dung bước).

GETMới — chưa có ở 2.9.220
Lưu ý
  • 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
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST1 lệnh/giâyMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/script/run

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
profile_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "started": true,
    "script_id": 1,
    "profiles": 2
  },
  "msg": "success"
}

5.3Tiến độ kịch bản

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "stopping": true
  },
  "msg": "success"
}

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).

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GETMới — chưa có ở 2.9.220
Lưu ý
  • 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
GEThttp://127.0.0.1:19555/api/v1/campaign/detail

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/campaign/save

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
threadssốkhôngSố luồng 1–10
thread_delaysốkhôngGiây giãn cách mở giữa các luồng (0–60)
restmảngkhông[ít nhất, nhiều nhất] giây nghỉ giữa 2 hồ sơ
wait_factorsốkhôngHệ số thời gian chờ của bước (0–5)
timeout_minutessốkhôngTối đa mỗi hồ sơ (1–180 phút)
on_errorchuỗikhôngskip · stop
retriessốkhôngThử lại khi lỗi (0–3)
close_afterboolkhôngĐóng hồ sơ khi xong
limitsốkhôngChỉ chạy N hồ sơ đầu (0 = tất cả)
orderchuỗikhôngsequential · random
stop_after_successsốkhôngDừng khi đủ N hồ sơ đạt (0 = không)
write_noteboolkhôngGhi kết quả vào ghi chú hồ sơ
conditionsobjectkhông{success: [{type, value}], fail: [...]}; type: url · text · no_text · css
profile_idsmảngkhôngThay 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/campaign/profiles

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
profile_idsmảngkhông—
modechuỗikhôngset (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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ó.

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/campaign/data

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
dataobjectkhông{profile_id: {biến: giá trị}}
allobjectkhông{biến: giá trị} cho mọi hồ sơ của chiến dịch
profile_idsmảngkhôngGiớ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST1 lệnh/giâyMới — chưa có ở 2.9.220
Lưu ý

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/campaign/run

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
(khoá cài đặt)—khôngNhư 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

GETMới — chưa có ở 2.9.220
Lưu ý
  • 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
GEThttp://127.0.0.1:19555/api/v1/campaign/status

Tham số

Tham sốKiểuBắt buộcMô tả
page / page_sizesốkhôngPhâ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/campaign/stop

Tham số

Tham sốKiểuBắt buộcMô tả
modechuỗikhôngstop (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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "started": true,
    "profiles": 1
  },
  "msg": "success"
}

7.1Danh sách lịch

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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á.

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/schedule/create

Tham số

Tham sốKiểuBắt buộcMô tả
script_idsốcó—
profile_idsmảngcó—
modechuỗicódaily · once
atchuỗikhôngHH:MM (daily)
after_minutessốkhông1–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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/schedule/toggle

Tham số

Tham sốKiểuBắt buộcMô tả
schedule_idsố | mảngcó—
enabledboolkhôngMặ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "schedule_ids": [
      1
    ],
    "enabled": false
  },
  "msg": "success"
}

7.4Xoá lịch

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/schedule/delete

Tham số

Tham sốKiểuBắt buộcMô tả
schedule_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "deleted": [
      1
    ]
  },
  "msg": "success"
}

8.1Thùng rác

Có phân trang.

GETMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/trash/list

Tham số

Tham sốKiểuBắt buộcMô tả
page / page_sizesố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/trash/restore

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngkhông—
allboolkhôngKhô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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST1 lệnh/giâyMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/trash/purge

Tham số

Tham sốKiểuBắt buộcMô tả
confirmboolcóPhải là true
profile_idsmảngkhông—
allboolkhôngDọ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "purged": [
      4
    ],
    "folders_left": 0
  },
  "msg": "success"
}

8.4Xuất cookie

GETMới — chưa có ở 2.9.220
Lưu ý
  • 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
GEThttp://127.0.0.1:19555/api/v1/profile/cookies

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—
formatchuỗikhôngjson (mặc định) · netscape
domainchuỗikhôngChỉ 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/profile/cookies

Tham số

Tham sốKiểuBắt buộcMô tả
profile_id | public_idsố | chuỗicó—
cookieschuỗi | mảngcóJSON, Netscape hoặc a=1; b=2
modechuỗikhôngmerge (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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "profile_id": 1,
    "cookies": 1,
    "applies": "next_open",
    "restart_required": false
  },
  "msg": "success"
}

8.6Kho tiện ích

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POSTMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/extension/toggle

Tham số

Tham sốKiểuBắt buộcMô tả
keychuỗicó—
enabledboolkhôngMặ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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST1 lệnh/giâyMới — chưa có ở 2.9.220
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/extension/install

Tham số

Tham sốKiểuBắt buộcMô tả
urlchuỗicó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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "installed": true,
    "key": "hlkenndednhfkekhgcdicdfddnkalmdm",
    "name": "Cookie-Editor",
    "enabled": false
  },
  "msg": "success"
}

8.9Gỡ tiện ích

POSTMới — chưa có ở 2.9.220

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/extension/remove

Tham số

Tham sốKiểuBắt buộcMô tả
keychuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "removed": "hlkenndednhfkekhgcdicdfddnkalmdm"
  },
  "msg": "success"
}

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.

GETMới — chưa có ở 2.9.220
Lưu ý
  • Đọ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
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "version": "2.9.221",
    "ready": true,
    "api": "v1"
  },
  "msg": "success"
}

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).

GET1 lệnh/giây
Lưu ý
  • Selenium: dùng data.ws.selenium cho debuggerAddress. Puppeteer / Playwright: dùng data.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
GEThttp://127.0.0.1:19555/api/v1/browser/start

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ơ.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/browser/stop

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ở.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/browser/active

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/browser/clear-cache

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "profile_id": 2,
    "cleared": true
  },
  "msg": "success"
}

2.1Danh sách hồ sơ

Có phân trang.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/profile/list

Tham số

Tham sốKiểuBắt buộcMô tả
pagesốkhôngTrang (từ 1)
page_sizesốkhôngSố hồ sơ mỗi trang (1–500, mặc định 100)
searchchuỗikhôngTìm theo tên / ghi chú / host proxy / mã 8 số
groupchuỗikhôngTê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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET
Lưu ý
  • Ví dụ trả về bên dưới đã rút gọn.

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/profile/detail

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "list": [
      {
        "name": "(Chưa phân nhóm)",
        "count": 1
      },
      {
        "name": "Shop VN",
        "count": 2
      }
    ]
  },
  "msg": "success"
}

3.1Tạo hồ sơ

Tạo MỘT hồ sơ. Vân tay do app sinh theo OS / trình duyệt.

POST
Lưu ý
  • ⚠ proxy dạng object PHẢI có type (HTTP / HTTPS / SOCKS5). Thiếu type thì 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
POSThttp://127.0.0.1:19555/api/v1/profile/create

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗicóTên hồ sơ
oschuỗikhôngWindows · macOS · Linux · Android · iOS (mặc định Windows)
browserchuỗikhôngChrome, Edge, Safari… — đúng loại có trên OS đó (mặc định Chrome)
group / notechuỗikhôngNhóm, ghi chú
tagschuỗikhôngNhãn, cách nhau dấu phẩy
proxychuỗi | objectkhôngChuỗi ip:port:user:pass (HTTP) hoặc {type, host, port, user, pass}
proxy_groupchuỗikhôngLấy lần lượt một proxy trong nhóm proxy này
browser_buildchuỗikhôngBản lõi trình duyệt (ví dụ 154)
launch_argschuỗi | mảngkhôngTham số khởi động, ví dụ --lang=vi
bo_qua_cau_hinhboolkhôngtrue = 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "profile_id": 1,
    "public_id": "46829261"
  },
  "msg": "success"
}

3.2Sửa hồ sơ

Chỉ đổi trường được gửi.

POST
Lưu ý
  • ⚠ 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
POSThttp://127.0.0.1:19555/api/v1/profile/update

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsốcó—
name / group / note / tagschuỗikhông—
proxyobjectkhô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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/profile/duplicate

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

POST
Lưu ý
  • 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
POSThttp://127.0.0.1:19555/api/v1/profile/delete

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "trashed": [
      4
    ]
  },
  "msg": "success"
}

3.5Chuyển nhóm

Đưa các hồ sơ vào một nhóm.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/group/assign

Tham số

Tham sốKiểuBắt buộcMô tả
profile_idsmảngcó—
groupchuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "group": "TikTok",
    "profiles": [
      3
    ]
  },
  "msg": "success"
}

3.6Đổi tên nhóm

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/group/rename

Tham số

Tham sốKiểuBắt buộcMô tả
oldchuỗicó—
newchuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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ơ.

POST
Lưu ý
  • ⚠ drop_profiles: true XOÁ 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
POSThttp://127.0.0.1:19555/api/v1/group/delete

Tham số

Tham sốKiểuBắt buộcMô tả
groupchuỗicó—
drop_profilesboolkhôngXem 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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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).

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

GET
Lưu ý
  • Ví dụ trả về bên dưới đã rút gọn.

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/config/detail

Tham số

Tham sốKiểuBắt buộcMô tả
config_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/config/apply

Tham số

Tham sốKiểuBắt buộcMô tả
config_idsố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "active_config_id": 1
  },
  "msg": "success"
}

4.1Kho proxy

Proxy trong kho (mật khẩu che).

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/import

Tham số

Tham sốKiểuBắt buộcMô tả
proxiesmảng | chuỗicóMảng "ip:port:user:pass" / object, hoặc chuỗi nhiều dòng
groupchuỗikhôngNhó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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/assign

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngcó—
profile_idsmảngcó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "assigned": 1,
    "proxies_used": 1
  },
  "msg": "success"
}

4.4Nhóm proxy

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "list": [
      {
        "ten": "US-Res",
        "so": 2,
        "live": 0
      }
    ]
  },
  "msg": "success"
}

4.5Proxy trong nhóm

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/proxy/group/detail

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗicó—

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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.

POST

Yêu cầu

Phương thứcĐường dẫn
POSThttp://127.0.0.1:19555/api/v1/proxy/group/assign

Tham số

Tham sốKiểuBắt buộcMô tả
proxy_idsmảngcó—
namechuỗikhôngTố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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "updated": 1,
    "group": "US-Res"
  },
  "msg": "success"
}

4.7Dcom 4G

Thiết bị Dcom và proxy của chúng.

GET
Lưu ý
  • Ví dụ trả về bên dưới đã rút gọn.

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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

GET1 lệnh/giây

Yêu cầu

Phương thứcĐường dẫn
GEThttp://127.0.0.1:19555/api/v1/dcom/rotate

Tham số

Tham sốKiểuBắt buộcMô tả
namechuỗikhôngTê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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "rotating": "DCOM-1",
    "count": 1
  },
  "msg": "success"
}

5.1Kho tiện ích

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "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.1API có đang chạy?

Không cần khoá. Trả phiên bản app.

GET

Yêu cầu

Phương thứcĐường dẫn
GEThttp://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())

Ví dụ trả về

Ví dụ trả vềHTTP 200
{
  "code": 0,
  "data": {
    "version": "2.9.220",
    "ready": true,
    "api": "v1"
  },
  "msg": "success"
}