Captcha de TikTok
Descripción General
El Captcha de TikTok es un sistema de verificación utilizado por TikTok para proteger la plataforma de bots y spam. Este captcha generalmente aparece al registrar una nueva cuenta, iniciar sesión o cuando se detecta actividad inusual.
Actualmente, las extensiones están disponibles para los 4 tipos de captcha en navegadores. Envía un mensaje al administrador para recibir la extensión. Proporciona todos los tipos de captcha para navegadores, emuladores y teléfonos.

1. Crear Tarea
Solicitud
POST https://api.achicaptcha.com/createTask
Parámetros
| Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API |
task.type | string | sí | TiktokCaptchaTask |
task.image | string | sí | Base64 de la imagen |
task.subType | int | sí | Tipo de captcha: 0 (Captcha de rotación en navegador), 1 (Captcha deslizante), 2 (Seleccionar 2 objetos similares), 3 (Captcha de rotación en teléfono, emulador), 5 (Seleccionar objetos que satisfagan la pregunta) |
task.other | string | no | Para subType 5, este campo es requerido. La pregunta del captcha, por ejemplo: "Cuál de estos objetos relincha" |
Ejemplo de Solicitud
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_API",
"task": {
"type": "TiktokCaptchaTask",
"image": "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...(10460 chars omitted)...V7Q4rk8i3IvOS/eZexY2wFyvTDXyzAWT5qNlUXkiKiAJVRdUYlkBFEQQRQEC2yAghRCyCWQSyBZAsgWQW1kCyCoCCoqIqoFkVCiCKXVC3ooCKKKxIRkhCxZw+Zj8FjMPpFmJjHRYdL69ad0OidK+5LIM1V6WM3fQBZRD5TbagWWbCZZKsVRiqqCIIindVil0UJQEQ5XRV5oiHZA3sgKBzRBFSyIHS6AgWRQa3RCyAgHZFUahA5ofAdkVLoKgnOyKE6KgoBQUDVGSE2CBYWUVjyRU5qMtgAKCAAqKoGqErZVFCrHYAqjIBRAKoiAqj//Z",
"subType": 2
}
}Respuesta
En caso de éxito, el servidor devolverá errorId = 0 y taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Muestras de Imágenes para Enviar al Servidor de Resolución de Captcha
En navegador:
Campo image = base64_imagen_externa|base64_imagen_interna


En emulador, teléfono:
El campo image es base64 de 1 imagen, recortada para contener solo la porción del captcha de rotación (con ambos círculos, puede tener espacio en blanco extra en los márgenes, la longitud del margen es flexible)

2. Obtener Resultado
Solicitud
POST https://api.achicaptcha.com/getTaskResult
Parámetros
| Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API del sitio web |
taskId | string | sí | TaskId del paso (1) |
Ejemplo de Solicitud
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "Tu CLAVE_API",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Respuesta
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2"
}Significado de la Respuesta
errorId = 0ystatus = ready: Resuelto exitosamente, lee el resultado ensolutionerrorId = 1ystatus = processing: El captcha se está resolviendo, espera 1-2 segundos e intenta de nuevoerrorId distinto de 0 y 1: Error del sistema, se proporciona código de error y descripciónsolution:- Para captcha de rotación en navegador: devuelve la longitud de la distancia de arrastre del deslizador
- Para captcha de rotación en emulador, teléfono: devuelve el ángulo de rotación, el usuario calcula la distancia de arrastre usando la fórmula: Distancia de arrastre = (L / 180) * solution (donde L es la distancia desde la posición inicial hasta la final del deslizador, medida desde el centro del deslizador)
- Para captcha deslizante: devuelve la coordenada del eje x para arrastrar
- Para captcha de selección de 2 objetos similares: devuelve par de coordenadas para hacer clic en la imagen "x1,y1,x2,y2"
- Para captcha de selección de múltiples objetos que satisfacen la pregunta: devuelve coordenadas para hacer clic en la imagen "x1,y1,x2,y2,x3,y3,..."
Ejemplos de Integración
import requests
import time
import base64
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='TU_CLAVE_API'):
# Paso 1: Crear tarea
task = {
'type': 'TiktokCaptchaTask',
'image': image_base64,
'subType': sub_type
}
# Si subType = 5, agregar campo other (pregunta)
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', 'Error desconocido'))
task_id = result['taskId']
# Paso 2: Obtener resultado
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Esperar 2 segundos
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':
# Continuar esperando
continue
# Otros errores
raise Exception(result.get('errorDescription', 'Error desconocido'))
# Uso - Ejemplo con captcha de selección de 2 objetos (subType = 2)
with open('captcha_image.png', 'rb') as f:
image_base64 = base64.b64encode(f.read()).decode('utf-8')
sub_type = 2 # 0: Rotación navegador, 1: Deslizante, 2: Seleccionar 2 objetos, 3: Rotación teléfono, 5: Seleccionar por pregunta
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='TU_CLAVE_API')
print('Solución del captcha de TikTok:', solution) # "x1,y1,x2,y2"Códigos de Error Comunes
Códigos de Error al Crear Tarea
| Código de Error | Descripción | Notas |
|---|---|---|
| 0 | éxito | Tarea creada exitosamente |
| 2 | faltan campos requeridos | Faltan campos requeridos, verifica los parámetros (image, subType) |
| 3 | tarea no compatible | Tipo de tarea no compatible |
| 4 | creación de tarea fallida | Creación de tarea fallida, intenta de nuevo más tarde |
| 5 | la clave del cliente no existe | La clave API no existe, verifica tu clave API |
| 6 | saldo de cuenta insuficiente | Saldo de cuenta insuficiente, agrega más créditos |
Códigos de Error al Obtener Resultado
| Código de Error | Descripción | Notas |
|---|---|---|
| 0 | éxito | Éxito, lee el resultado en el campo solution |
| 1 | procesando | Procesando, espera 1-2 segundos y envía la solicitud nuevamente |
| 5 | la clave del cliente no existe | La clave API no existe, verifica tu clave API |
| 7 | tarea fallida, por favor crea una nueva tarea | Tarea fallida, por favor crea una nueva tarea |
| 8 | el ID de tarea no existe | El ID de tarea no existe o ha expirado |
Mejores Prácticas
Para lograr los mejores resultados al usar la API de Achicaptcha, sigue estos principios:
1. Identificar el Tipo de Captcha y subType Correcto
- TikTok utiliza varios tipos de captcha
- Detecta con precisión el tipo de captcha que se está mostrando
- Envía el
subTypecorrecto en la solicitud:0: Captcha de rotación en navegador1: Captcha deslizante2: Seleccionar 2 objetos similares3: Captcha de rotación en teléfono, emulador5: Seleccionar objetos que satisfagan la pregunta (requiere campoother)
2. Formatear las Imágenes Correctamente
- Captcha de rotación en navegador: Enviar
base64_imagen_externa|base64_imagen_interna - Captcha de rotación en teléfono/emulador: Enviar base64 de 1 imagen (conteniendo solo la porción del captcha de rotación)
- Otros tipos: Enviar base64 de la imagen correspondiente
- Asegúrate de que las imágenes estén codificadas en formato base64 adecuado
3. Manejar los Resultados Correctamente
- Para captcha de rotación en emulador/teléfono: Calcula la distancia del arrastre usando la fórmula: Distancia de arrastre = (L / 180) * solution
Mide L como se muestra arriba: es la longitud para el cálculo del arrastre - Para captcha de selección de objetos: Analiza la cadena de coordenadas "x1,y1,x2,y2" para obtener los puntos de clic
- Para captcha deslizante: Usa la coordenada x devuelta para mover el deslizador
4. Intervalo de Sondeo
- Espera al menos 1-2 segundos entre verificaciones de resultado
- No envíes spam a la API con demasiadas solicitudes consecutivas
- Ten un tiempo de espera para evitar bucles infinitos (recomendado 120 segundos)
5. Manejo de Errores
- Verifica
errorId = 1ystatus = processingpara continuar esperando - Maneja otros errores apropiadamente
- Implementa lógica de reintento para errores temporales
6. Seguridad de la Clave API
- No codifiques la clave API en el código
- Usa variables de entorno
- No expongas la clave API en el lado del cliente
Enlaces Útiles: