Tiktok Captcha
Tổng quan
TikTok Captcha là hệ thống xác thực được TikTok sử dụng để bảo vệ nền tảng khỏi bot và spam. Captcha này thường xuất hiện khi đăng ký tài khoản mới, đăng nhập, hoặc khi có hoạt động bất thường.
Hiện tại đã có extension cho cả 4 loại captcha trên trình duyệt, các bạn inbox admin để nhận extension. Cung cấp đủ tất cả các loại captcha cho cả trình duyệt, giả lập và phone.

1. Tạo yêu cầu
Request
POST https://api.achicaptcha.com/createTask
Tham số
| Tên param | Kiểu dữ liệu | Bắt buộc? | Mô tả |
|---|---|---|---|
clientKey | string | yes | Api key |
task.type | string | yes | TiktokCaptchaTask |
task.image | string | yes | Base64 của ảnh |
task.subType | int | yes | Loại captcha: 0 (Rotate captcha trên browser), 1 (Slider captcha), 2 (Chọn 2 đối tượng giống nhau), 3 (Rotate captcha trên phone, giả lập), 5 (Chọn các vật thỏa mãn câu hỏi) |
task.other | string | no | Với subType 5, trường này là bắt buộc. Câu hỏi của captcha, ví dụ: "Which of these objects neighs" |
Ví dụ Request
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TiktokCaptchaTask",
"image": "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...(10460 chars omitted)...V7Q4rk8i3IvOS/eZexY2wFyvTDXyzAWT5qNlUXkiKiAJVRdUYlkBFEQQRQEC2yAghRCyCWQSyBZAsgWQW1kCyCoCCoqIqoFkVCiCKXVC3ooCKKKxIRkhCxZw+Zj8FjMPpFmJjHRYdL69ad0OidK+5LIM1V6WM3fQBZRD5TbagWWbCZZKsVRiqqCIIindVil0UJQEQ5XRV5oiHZA3sgKBzRBFSyIHS6AgWRQa3RCyAgHZFUahA5ofAdkVLoKgnOyKE6KgoBQUDVGSE2CBYWUVjyRU5qMtgAKCAAqKoGqErZVFCrHYAqjIBRAKoiAqj//Z",
"subType": 2
}
}Response
Khi thành công, server sẽ trả về errorId = 0 và taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Mẫu ảnh gửi lên server giải captcha
Trên trình duyệt:
Trường image = base64_ảnh_ngoài|base64_ảnh_trong


Trên giả lập, phone:
Trường image là base64 của 1 ảnh, ảnh cắt chỉ chứa phần captcha xoay (đủ 2 hình tròn, có thể thừa phần trắng ở lề, độ dài phần thừa tùy)

2. Lấy kết quả
Request
POST https://api.achicaptcha.com/getTaskResult
Tham số
| Tên param | Kiểu dữ liệu | Bắt buộc? | Mô tả |
|---|---|---|---|
clientKey | string | yes | Api key trên website |
taskId | string | yes | TaskId lấy từ (1) |
Ví dụ Request
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "API_KEY của bạn",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Response
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2"
}Ý nghĩa kết quả trả về
errorId = 0vàstatus = ready: Giải thành công, đọc kết quả trongsolutionerrorId = 1vàstatus = processing: Đang giải captcha, đợi 1-2 giây rồi thử lạierrorId khác 0 và 1: Lỗi hệ thống, đưa ra mã lỗi và mô tả lỗisolution:- Với captcha xoay trên trình duyệt: trả về độ dài của đoạn cần kéo thanh trượt
- Với captcha xoay trên giả lập, phone: trả về góc xoay, người dùng tính ra đoạn cần kéo theo công thức: Đoạn cần kéo = (L / 180) * solution (với L là khoảng cách từ vị trí đầu tới vị trí cuối của thanh trượt, tính từ tâm thanh trượt)
- Với captcha kéo: trả về tọa độ cần kéo theo trục x của ảnh
- Với captcha chọn 2 đối tượng giống nhau: trả về cặp tọa độ cần click trên ảnh "x1,y1,x2,y2"
- Với captcha chọn nhiều vật thỏa mãn câu hỏi: trả về các tọa độ cần click trên ảnh "x1,y1,x2,y2,x3,y3,..."
Ví dụ tích hợp
import requests
import time
import base64
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='YOUR_API_KEY'):
# Bước 1: Tạo task
task = {
'type': 'TiktokCaptchaTask',
'image': image_base64,
'subType': sub_type
}
# Nếu subType = 5, thêm trường other (câu hỏi)
if sub_type == 5 and question:
task['other'] = question
create_task_url = 'https://api.achicaptcha.com/createTask'
create_task_payload = {
'clientKey': api_key,
'task': task
}
response = requests.post(create_task_url, json=create_task_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result.get('errorDescription', 'Unknown error'))
task_id = result['taskId']
# Bước 2: Lấy kết quả
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Đợi 2 giây
get_result_payload = {
'clientKey': api_key,
'taskId': task_id
}
response = requests.post(get_result_url, json=get_result_payload)
result = response.json()
if result['errorId'] == 0 and result.get('status') == 'ready':
return result['solution']
if result['errorId'] == 1 and result.get('status') == 'processing':
# Tiếp tục đợi
continue
# Lỗi khác
raise Exception(result.get('errorDescription', 'Unknown error'))
# Sử dụng - Ví dụ với captcha chọn 2 đối tượng (subType = 2)
with open('captcha_image.png', 'rb') as f:
image_base64 = base64.b64encode(f.read()).decode('utf-8')
sub_type = 2 # 0: Rotate browser, 1: Slider, 2: Chọn 2 đối tượng, 3: Rotate phone, 5: Chọn theo câu hỏi
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='YOUR_API_KEY')
print('TikTok captcha solution:', solution) # "x1,y1,x2,y2"Các mã lỗi thường gặp
Mã lỗi khi tạo task
| Mã lỗi | Mô tả | Chú thích |
|---|---|---|
| 0 | success | Tạo task thành công |
| 2 | missing required fields | Thiếu trường bắt buộc, kiểm tra lại tham số (image, subType) |
| 3 | task not supported | Loại task không được hỗ trợ |
| 4 | task creation failed | Tạo task thất bại, thử lại sau |
| 5 | client key does not exist | API key không tồn tại, kiểm tra lại API key |
| 6 | insufficient account balance | Số dư tài khoản không đủ, nạp thêm credit |
Mã lỗi khi lấy kết quả
| Mã lỗi | Mô tả | Chú thích |
|---|---|---|
| 0 | success | Thành công, đọc kết quả trong trường solution |
| 1 | processing | Đang xử lý, đợi 1-2 giây rồi gửi request lại |
| 5 | client key does not exist | API key không tồn tại, kiểm tra lại API key |
| 7 | task failed, please create a new task | Task thất bại, vui lòng tạo task mới |
| 8 | task ID does not exist | Task ID không tồn tại hoặc đã hết hạn |
Best Practices
Để đạt hiệu quả tốt nhất khi sử dụng API Achicaptcha, hãy tuân thủ các nguyên tắc sau:
1. Xác định đúng loại captcha và subType
- TikTok sử dụng nhiều loại captcha khác nhau
- Phát hiện chính xác loại captcha đang hiển thị
- Gửi đúng
subTypetrong request:0: Rotate captcha trên browser1: Slider captcha2: Chọn 2 đối tượng giống nhau3: Rotate captcha trên phone, giả lập5: Chọn các vật thỏa mãn câu hỏi (cần thêm trườngother)
2. Format ảnh đúng chuẩn
- Rotate captcha trên browser: Gửi
base64_ảnh_ngoài|base64_ảnh_trong - Rotate captcha trên phone/giả lập: Gửi base64 của 1 ảnh (chỉ chứa phần captcha xoay)
- Các loại khác: Gửi base64 của ảnh tương ứng
- Đảm bảo ảnh được encode đúng định dạng base64
3. Xử lý kết quả đúng cách
- Với captcha xoay trên giả lập/phone: Tính toán đoạn cần kéo theo công thức: Đoạn cần kéo = (L / 180) * solution
Đo L như hình trên: chiều dài để tính toán đoạn cần kéo - Với captcha chọn đối tượng: Parse chuỗi tọa độ "x1,y1,x2,y2" để lấy các điểm cần click
- Với captcha kéo: Sử dụng tọa độ x trả về để kéo thanh trượt
4. Polling interval
- Đợi ít nhất 1-2 giây giữa các lần kiểm tra kết quả
- Không spam API với quá nhiều request liên tiếp
- Có timeout để tránh vòng lặp vô hạn (khuyến nghị 120 giây)
5. Xử lý lỗi
- Kiểm tra
errorId = 1vàstatus = processingđể tiếp tục đợi - Xử lý các lỗi khác một cách phù hợp
- Implement retry logic cho các lỗi tạm thời
6. Bảo mật API key
- Không hardcode API key trong code
- Sử dụng biến môi trường
- Không expose API key ra client-side
Liên kết hữu ích: