TikTok Captcha
Visão Geral
TikTok Captcha é um sistema de verificação usado pelo TikTok para proteger a plataforma contra bots e spam. Este captcha geralmente aparece ao registrar uma nova conta, fazer login ou quando atividade incomum é detectada.
Atualmente, extensões estão disponíveis para todos os 4 tipos de captcha em navegadores. Por favor, envie mensagem ao administrador para receber a extensão. Fornece todos os tipos de captcha para navegadores, emuladores e telefones.

1. Criar Tarefa
Requisição
POST https://api.achicaptcha.com/createTask
Parâmetros
| Parâmetro | Tipo de Dado | Obrigatório? | Descrição |
|---|---|---|---|
clientKey | string | sim | Chave API |
task.type | string | sim | TiktokCaptchaTask |
task.image | string | sim | Base64 da imagem |
task.subType | int | sim | Tipo de captcha: 0 (Captcha de rotação no navegador), 1 (Captcha deslizante), 2 (Selecionar 2 objetos similares), 3 (Captcha de rotação no telefone, emulador), 5 (Selecionar objetos que satisfazem a pergunta) |
task.other | string | não | Para subType 5, este campo é obrigatório. A pergunta do captcha, por exemplo: "Qual destes objetos relincha" |
Exemplo de Requisição
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
Em caso de sucesso, o servidor retornará errorId = 0 e taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Exemplos de Imagens para Enviar ao Servidor de Resolução de Captcha
No navegador:
Field image = base64_outer_image|base64_inner_image


No emulador, telefone:
Campo image é base64 de 1 imagem, recortada para conter apenas a porção do captcha de rotação (com ambos os círculos, pode ter espaço em branco extra nas margens, comprimento da margem é flexível)

2. Obter Resultado
Requisição
POST https://api.achicaptcha.com/getTaskResult
Parâmetros
| Parâmetro | Tipo de Dado | Obrigatório? | Descrição |
|---|---|---|---|
clientKey | string | sim | Chave API do site |
taskId | string | sim | TaskId do passo (1) |
Exemplo de Requisição
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "Your API_KEY",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Response
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2"
}Significado da Resposta
errorId = 0estatus = ready: Resolvido com sucesso, leia o resultado emsolutionerrorId = 1estatus = processing: Captcha está sendo resolvido, aguarde 1-2 segundos e tente novamenteerrorId diferente de 0 e 1: Erro do sistema, código de erro e descrição fornecidossolution:- Para captcha de rotação no navegador: retorna o comprimento da distância de arrasto do controle deslizante
- Para captcha de rotação no emulador, telefone: retorna o ângulo de rotação, o usuário calcula a distância de arrasto usando a fórmula: Distância de arrasto = (L / 180) * solution (onde L é a distância da posição inicial até a posição final do controle deslizante, medida a partir do centro do controle deslizante)
- Para captcha deslizante: retorna a coordenada do eixo x para arrastar
- Para captcha de selecionar 2 objetos similares: retorna par de coordenadas para clicar na imagem "x1,y1,x2,y2"
- Para captcha de selecionar múltiplos objetos que satisfazem a pergunta: retorna coordenadas para clicar na imagem "x1,y1,x2,y2,x3,y3,..."
Exemplos de Integração
import requests
import time
import base64
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='SUA_CHAVE_API'):
# Passo 1: Criar tarefa
task = {
'type': 'TiktokCaptchaTask',
'image': image_base64,
'subType': sub_type
}
# Se subType = 5, adicionar campo other (pergunta)
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']
# Passo 2: Obter resultado
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Aguardar 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 aguardando
continue
# Outros erros
raise Exception(result.get('errorDescription', 'Erro desconhecido'))
# Uso - Exemplo com captcha de selecionar 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: Rotação navegador, 1: Deslizante, 2: Selecionar 2 objetos, 3: Rotação telefone, 5: Selecionar por pergunta
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='SUA_CHAVE_API')
print('Solução do captcha TikTok:', solution) # "x1,y1,x2,y2"Códigos de Erro Comuns
Códigos de Erro ao Criar Tarefa
| Código de Erro | Descrição | Observações |
|---|---|---|
| 0 | sucesso | Tarefa criada com sucesso |
| 2 | campos obrigatórios ausentes | Campos obrigatórios ausentes, verifique os parâmetros (image, subType) |
| 3 | tarefa não suportada | Tipo de tarefa não suportado |
| 4 | falha na criação da tarefa | Falha na criação da tarefa, tente novamente mais tarde |
| 5 | chave do cliente não existe | Chave API não existe, verifique sua chave API |
| 6 | saldo da conta insuficiente | Saldo da conta insuficiente, adicione mais créditos |
Códigos de Erro ao Obter Resultado
| Código de Erro | Descrição | Observações |
|---|---|---|
| 0 | sucesso | Sucesso, leia o resultado no campo solution |
| 1 | processando | Processando, aguarde 1-2 segundos e envie a requisição novamente |
| 5 | chave do cliente não existe | Chave API não existe, verifique sua chave API |
| 7 | tarefa falhou, por favor crie uma nova tarefa | Tarefa falhou, por favor crie uma nova tarefa |
| 8 | ID da tarefa não existe | ID da tarefa não existe ou expirou |
Melhores Práticas
Para obter os melhores resultados ao usar a API Achicaptcha, siga estes princípios:
1. Identificar o Tipo de Captcha e subType Correto
- TikTok usa vários tipos de captcha
- Detecte com precisão o tipo de captcha sendo exibido
- Envie o
subTypecorreto na requisição:0: Captcha de rotação no navegador1: Captcha deslizante2: Selecionar 2 objetos similares3: Captcha de rotação no telefone, emulador5: Selecionar objetos que satisfazem a pergunta (requer campoother)
2. Formatar Imagens Corretamente
- Captcha de rotação no navegador: Envie
base64_outer_image|base64_inner_image - Captcha de rotação no telefone/emulador: Envie base64 de 1 imagem (contendo apenas a porção do captcha de rotação)
- Outros tipos: Envie base64 da imagem correspondente
- Certifique-se de que as imagens estão codificadas no formato base64 adequado
3. Manipular Resultados Adequadamente
- Para captcha de rotação no emulador/telefone: Calcule a distância de arrasto usando a fórmula: Distância de arrasto = (L / 180) * solution
Meça L conforme mostrado acima: o comprimento para o cálculo do arrasto - Para captcha de selecionar objetos: Analise a string de coordenadas "x1,y1,x2,y2" para obter os pontos de clique
- Para captcha deslizante: Use a coordenada x retornada para arrastar o controle deslizante
4. Intervalo de Polling
- Aguarde pelo menos 1-2 segundos entre as verificações de resultado
- Não sobrecarregue a API com muitas requisições consecutivas
- Tenha um timeout para evitar loops infinitos (recomendado 120 segundos)
5. Tratamento de Erros
- Verifique
errorId = 1estatus = processingpara continuar aguardando - Trate outros erros adequadamente
- Implemente lógica de nova tentativa para erros temporários
6. Segurança da Chave API
- Não codifique a chave API diretamente no código
- Use variáveis de ambiente
- Não exponha a chave API no lado do cliente
Links Úteis: