TikTok Captcha
Обзор
TikTok Captcha — это система верификации, используемая TikTok для защиты платформы от ботов и спама. Эта капча обычно появляется при регистрации нового аккаунта, входе в систему или при обнаружении необычной активности.
В настоящее время доступны расширения для всех 4 типов капчи в браузерах. Пожалуйста, напишите администратору, чтобы получить расширение. Предоставляет все типы капчи для браузеров, эмуляторов и телефонов.

1. Создание задачи
Запрос
POST https://api.achicaptcha.com/createTask
Параметры
| Параметр | Тип данных | Обязательно? | Описание |
|---|---|---|---|
clientKey | string | да | API ключ |
task.type | string | да | TiktokCaptchaTask |
task.image | string | да | Base64 изображения |
task.subType | int | да | Тип капчи: 0 (Капча с вращением в браузере), 1 (Капча-слайдер), 2 (Выбор 2 похожих объектов), 3 (Капча с вращением на телефоне, эмуляторе), 5 (Выбор объектов, удовлетворяющих вопросу) |
task.other | string | нет | Для subType 5 это поле обязательно. Вопрос капчи, например: "Which of these objects neighs" |
Пример запроса
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
}
}Ответ
При успехе сервер вернет errorId = 0 и taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Примеры изображений для отправки на сервер решения капчи
В браузере:
Поле image = base64_outer_image|base64_inner_image


На эмуляторе, телефоне:
Поле image — это base64 1 изображения, обрезанного так, чтобы содержать только часть капчи с вращением (с обоими кругами, может иметь лишнее белое пространство по краям, длина полей гибкая)

2. Получение результата
Запрос
POST https://api.achicaptcha.com/getTaskResult
Параметры
| Параметр | Тип данных | Обязательно? | Описание |
|---|---|---|---|
clientKey | string | да | API ключ с сайта |
taskId | string | да | TaskId из шага (1) |
Пример запроса
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "Your API_KEY",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Ответ
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2"
}Значение ответа
errorId = 0иstatus = ready: Успешно решено, читайте результат вsolutionerrorId = 1иstatus = processing: Капча решается, подождите 1-2 секунды и попробуйте сноваerrorId отличный от 0 и 1: Системная ошибка, предоставлен код ошибки и описаниеsolution:- Для капчи с вращением в браузере: возвращает длину дистанции перетаскивания слайдера
- Для капчи с вращением на эмуляторе, телефоне: возвращает угол поворота, пользователь рассчитывает дистанцию перетаскивания по формуле: Дистанция перетаскивания = (L / 180) * solution (где L — расстояние от начальной до конечной позиции слайдера, измеренное от центра слайдера)
- Для капчи-слайдера: возвращает координату по оси X для перетаскивания
- Для капчи с выбором 2 похожих объектов: возвращает пару координат для клика на изображении "x1,y1,x2,y2"
- Для капчи с выбором нескольких объектов, удовлетворяющих вопросу: возвращает координаты для клика на изображении "x1,y1,x2,y2,x3,y3,..."
Примеры интеграции
import requests
import time
import base64
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='YOUR_API_KEY'):
# Step 1: Create task
task = {
'type': 'TiktokCaptchaTask',
'image': image_base64,
'subType': sub_type
}
# If subType = 5, add other field (question)
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']
# Step 2: Get result
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Wait 2 seconds
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':
# Continue waiting
continue
# Other errors
raise Exception(result.get('errorDescription', 'Unknown error'))
# Usage - Example with select 2 objects captcha (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: Select 2 objects, 3: Rotate phone, 5: Select by question
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='YOUR_API_KEY')
print('TikTok captcha solution:', solution) # "x1,y1,x2,y2"Коды общих ошибок
Коды ошибок при создании задачи
| Код ошибки | Описание | Примечания |
|---|---|---|
| 0 | success | Задача успешно создана |
| 2 | missing required fields | Отсутствуют обязательные поля, проверьте параметры (image, subType) |
| 3 | task not supported | Тип задачи не поддерживается |
| 4 | task creation failed | Ошибка создания задачи, попробуйте позже |
| 5 | client key does not exist | API ключ не существует, проверьте ваш API ключ |
| 6 | insufficient account balance | Недостаточно средств на счете, пополните баланс |
Коды ошибок при получении результата
| Код ошибки | Описание | Примечания |
|---|---|---|
| 0 | success | Успешно, читайте результат в поле solution |
| 1 | processing | В обработке, подождите 1-2 секунды и отправьте запрос снова |
| 5 | client key does not exist | API ключ не существует, проверьте ваш API ключ |
| 7 | task failed, please create a new task | Задача не выполнена, пожалуйста, создайте новую задачу |
| 8 | task ID does not exist | ID задачи не существует или истек |
Лучшие практики
Для достижения наилучших результатов при использовании Achicaptcha API следуйте этим принципам:
1. Определите правильный тип капчи и subType
- TikTok использует различные типы капчи
- Точно определите тип отображаемой капчи
- Отправьте правильный
subTypeв запросе:0: Капча с вращением в браузере1: Капча-слайдер2: Выбор 2 похожих объектов3: Капча с вращением на телефоне, эмуляторе5: Выбор объектов, удовлетворяющих вопросу (требуется полеother)
2. Правильно форматируйте изображения
- Капча с вращением в браузере: Отправьте
base64_outer_image|base64_inner_image - Капча с вращением на телефоне/эмуляторе: Отправьте base64 1 изображения (содержащего только часть капчи с вращением)
- Другие типы: Отправьте base64 соответствующего изображения
- Убедитесь, что изображения закодированы в правильном формате base64
3. Правильно обрабатывайте результаты
- Для капчи с вращением на эмуляторе/телефоне: Рассчитайте дистанцию перетаскивания по формуле: Дистанция перетаскивания = (L / 180) * solution
Измерьте L, как показано выше: длина для вычисления перетаскивания - Для капчи с выбором объектов: Разберите строку координат "x1,y1,x2,y2", чтобы получить точки клика
- Для капчи-слайдера: Используйте возвращенную координату X для перетаскивания слайдера
4. Интервал опроса
- Ждите не менее 1-2 секунд между проверками результата
- Не отправляйте слишком много последовательных запросов к API
- Установите тайм-аут, чтобы избежать бесконечных циклов (рекомендуется 120 секунд)
5. Обработка ошибок
- Проверяйте
errorId = 1иstatus = processing, чтобы продолжить ожидание - Обрабатывайте другие ошибки соответствующим образом
- Реализуйте логику повторных попыток для временных ошибок
6. Безопасность API ключа
- Не прописывайте API ключ жестко в коде
- Используйте переменные окружения
- Не раскрывайте API ключ на стороне клиента
Полезные ссылки: