Skip to content
API
Tiktok Captcha

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.

Captcha xoay

1. Tạo yêu cầu

Request

POST https://api.achicaptcha.com/createTask

Tham số

Tên paramKiểu dữ liệuBắt buộc?Mô tả
clientKeystringyesApi key
task.typestringyesTiktokCaptchaTask
task.imagestringyesBase64 của ảnh
task.subTypeintyesLoạ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.otherstringnoVớ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 = 0taskId

{
  "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

Captcha xoay - Ảnh ngoài
Captcha xoay - Ả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)

Captcha xoay trên phone

2. Lấy kết quả

Request

POST https://api.achicaptcha.com/getTaskResult

Tham số

Tên paramKiểu dữ liệuBắt buộc?Mô tả
clientKeystringyesApi key trên website
taskIdstringyesTaskId 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 = 0status = ready: Giải thành công, đọc kết quả trong solution
  • errorId = 1status = processing: Đang giải captcha, đợi 1-2 giây rồi thử lại
  • errorId khác 0 và 1: Lỗi hệ thống, đưa ra mã lỗi và mô tả lỗi
  • solution:
    • 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ỗiMô tảChú thích
0successTạo task thành công
2missing required fieldsThiếu trường bắt buộc, kiểm tra lại tham số (image, subType)
3task not supportedLoại task không được hỗ trợ
4task creation failedTạo task thất bại, thử lại sau
5client key does not existAPI key không tồn tại, kiểm tra lại API key
6insufficient account balanceSố dư tài khoản không đủ, nạp thêm credit

Mã lỗi khi lấy kết quả

Mã lỗiMô tảChú thích
0successThành công, đọc kết quả trong trường solution
1processingĐang xử lý, đợi 1-2 giây rồi gửi request lại
5client key does not existAPI key không tồn tại, kiểm tra lại API key
7task failed, please create a new taskTask thất bại, vui lòng tạo task mới
8task ID does not existTask 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 subType trong request:
    • 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 (cần thêm trường other)

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
    Cách đo L cho captcha xoay
    Đ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 = 1status = 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: