API do TikTok
A API do TikTok permite consultar perfis de usuários, listar vídeos, ler comentários e respostas, pesquisar vídeos e usuários, explorar hashtags e percorrer o grafo social (seguidores / seguindo). Onze endpoints, todos a 1 crédito por requisição.
Endpoints
| Endpoint | Descrição |
|---|---|
POST /api/v1/tiktok/profile | Obter perfil de usuário por nome de usuário ou sec_user_id |
POST /api/v1/tiktok/user/posts | Listar vídeos de um usuário (paginado, ordenável) |
POST /api/v1/tiktok/video | Obter detalhes completos de um único vídeo |
POST /api/v1/tiktok/video/comments | Listar comentários em um vídeo |
POST /api/v1/tiktok/video/comments/replies | Listar respostas a um comentário específico |
POST /api/v1/tiktok/search/videos | Pesquisar vídeos do TikTok por palavra-chave |
POST /api/v1/tiktok/search/users | Pesquisar usuários do TikTok por palavra-chave |
POST /api/v1/tiktok/hashtag | Obter detalhes e estatísticas da hashtag |
POST /api/v1/tiktok/hashtag/videos | Listar vídeos de uma hashtag |
POST /api/v1/tiktok/user/followers | Listar seguidores de um usuário |
POST /api/v1/tiktok/user/followings | Listar contas que um usuário segue |
Autenticação
| Cabeçalho | Valor | Obrigatório |
|---|---|---|
Authorization | Bearer SUA_CHAVE_API | Sim |
Content-Type | application/json | Sim |
Toda resposta bem-sucedida inclui campos de rastreamento de crédito: credits_used, credits_remaining e response_time (ms).
Obtendo um sec_user_id
A maioria dos endpoints requer um sec_user_id em vez de um nome de usuário. Chame primeiro o endpoint Perfil com um nome de usuário e, em seguida, use data.user.sec_uid para requisições subsequentes.
Perfil do Usuário
POST https://api.scavio.dev/api/v1/tiktok/profileObter perfil de usuário do TikTok. Informe ou username ou sec_user_id.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
username | string | -- | Nome de usuário do TikTok (sem @). É necessário informar username ou sec_user_id. |
sec_user_id | string | -- | ID de usuário seguro. É necessário informar username ou sec_user_id. |
Exemplo
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/profile' \
-H 'Authorization: Bearer SUA_CHAVE_API' \
-H 'Content-Type: application/json' \
-d '{"username": "tiktok"}'Campos da Resposta (data.user)
| Campo | Tipo | Descrição |
|---|---|---|
unique_id | string | Nome de usuário (handle) |
nickname | string | Nome de exibição |
sec_uid | string | ID de usuário seguro (use para outros endpoints) |
uid | string | ID numérico do usuário |
signature | string | Texto da bio |
bio_url | string | Link na bio |
follower_count | number | Seguidores |
following_count | number | Seguindo |
aweme_count | number | Total de vídeos postados |
total_favorited | number | Total de curtidas recebidas |
avatar_larger | object | Imagem do avatar (.url_list[0] para URL) |
Exemplo de Resposta
{
"data": {
"user": {
"unique_id": "tiktok",
"nickname": "TikTok",
"sec_uid": "MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM",
"uid": "107955",
"signature": "One TikTok can make a big impact",
"bio_url": "linktr.ee/tiktok",
"follower_count": 94015018,
"following_count": 1,
"aweme_count": 1510,
"total_favorited": 457945663
}
},
"response_time": 1245,
"credits_used": 1,
"credits_remaining": 11753
}Posts do Usuário
POST https://api.scavio.dev/api/v1/tiktok/user/postsListar os vídeos de um usuário. Requer sec_user_id (obtenha-o do endpoint de perfil).
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
sec_user_id | string | -- | Obrigatório. ID de usuário seguro do endpoint de perfil. |
cursor | string | "0" | Cursor de paginação. Use data.max_cursor da resposta anterior. |
count | number | 20 | Resultados por página (1-30). |
sort_type | string | "0" | "0" = mais recentes, "1" = populares. |
Paginação
Use data.max_cursor como cursor na próxima requisição. Pare quando data.has_more for 0.
Campos do Vídeo (data.aweme_list[])
| Campo | Tipo | Descrição |
|---|---|---|
aweme_id | string | ID do vídeo |
desc | string | Legenda do vídeo |
create_time | number | Timestamp Unix (segundos) |
statistics.digg_count | number | Curtidas |
statistics.comment_count | number | Comentários |
statistics.play_count | number | Visualizações |
statistics.share_count | number | Compartilhamentos |
statistics.collect_count | number | Salvos |
author | object | Informações do autor (subconjunto do perfil) |
music | object | Som usado |
video | object | URLs do vídeo, dimensões, duração |
Detalhes do Vídeo
POST https://api.scavio.dev/api/v1/tiktok/videoObter detalhes completos de um único vídeo.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
video_id | string | -- | Obrigatório. ID do vídeo do TikTok. |
Exemplo
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/video' \
-H 'Authorization: Bearer SUA_CHAVE_API' \
-H 'Content-Type: application/json' \
-d '{"video_id": "7350810998023949599"}'Campos Adicionais (data.aweme_detail)
Inclui todos os campos de vídeo listados acima, além de:
| Campo | Tipo | Descrição |
|---|---|---|
video.play_addr | object | URL de reprodução do vídeo (.url_list[0]) |
video.download_addr | object | URL de download (sem marca d'água) |
video.cover | object | Imagem de capa |
video.duration | number | Duração em ms |
cha_list | array | Hashtags usadas |
text_extra | array | Menções e hashtags na legenda |
Exemplo de Resposta
{
"data": {
"aweme_detail": {
"aweme_id": "7350810998023949599",
"desc": "im so sick of being tired im so tired of being sick",
"create_time": 1711494099,
"statistics": {
"digg_count": 2002382,
"comment_count": 8119,
"play_count": 12171757,
"share_count": 274978,
"collect_count": 211332
}
}
},
"response_time": 1605,
"credits_used": 1,
"credits_remaining": 11752
}Comentários do Vídeo
POST https://api.scavio.dev/api/v1/tiktok/video/commentsObter comentários em um vídeo.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
video_id | string | -- | Obrigatório. ID do vídeo. |
cursor | string | "0" | Cursor de paginação. |
count | number | 20 | Resultados por página (1-50). |
Paginação
Use data.cursor como próximo cursor. Pare quando data.has_more for 0.
Campos do Comentário (data.comments[])
| Campo | Tipo | Descrição |
|---|---|---|
cid | string | ID do comentário (use para o endpoint de respostas) |
text | string | Texto do comentário |
create_time | number | Timestamp Unix (segundos) |
digg_count | number | Curtidas neste comentário |
reply_comment_total | number | Número de respostas |
user | object | Informações do comentador (nickname, avatar, etc.) |
is_author_digged | number | 1 se o autor do vídeo curtiu este comentário |
Respostas a Comentários
POST https://api.scavio.dev/api/v1/tiktok/video/comments/repliesObter respostas a um comentário específico.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
video_id | string | -- | Obrigatório. ID do vídeo. |
comment_id | string | -- | Obrigatório. ID do comentário (cid do endpoint de comentários). |
cursor | string | "0" | Cursor de paginação. |
count | number | 20 | Resultados por página (1-50). |
Paginação
Igual aos comentários: use data.cursor, pare quando data.has_more for 0. Cada resposta tem os mesmos campos que um objeto de comentário.
Pesquisar Vídeos
POST https://api.scavio.dev/api/v1/tiktok/search/videosPesquisar vídeos do TikTok por palavra-chave.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
keyword | string | -- | Obrigatório. Consulta de pesquisa (1-500 caracteres). |
cursor | string | "0" | Deslocamento de paginação. |
count | number | 20 | Resultados por página (1-30). |
sort_type | string | "0" | "0" = relevância, "1" = mais curtidas. |
publish_time | string | "0" | "0" = todo o tempo, "1" = último dia, "7" = semana, "30" = mês, "90" = 3 meses, "180" = 6 meses. |
Exemplo
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/search/videos' \
-H 'Authorization: Bearer SUA_CHAVE_API' \
-H 'Content-Type: application/json' \
-d '{"keyword": "receita de cozinha", "count": 10, "publish_time": "7"}'Paginação
Use data.cursor como próximo cursor. Pare quando data.has_more for 0. Cada item em data.aweme_list tem a mesma estrutura que um detalhe de vídeo.
Pesquisar Usuários
POST https://api.scavio.dev/api/v1/tiktok/search/usersPesquisar usuários do TikTok por palavra-chave.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
keyword | string | -- | Obrigatório. Consulta de pesquisa (1-500 caracteres). |
cursor | string | "0" | Deslocamento de paginação. |
count | number | 20 | Resultados por página (1-30). |
Campos da Resposta (data.user_list[].user_info)
| Campo | Tipo | Descrição |
|---|---|---|
uid | string | ID do usuário |
unique_id | string | Nome de usuário |
nickname | string | Nome de exibição |
sec_uid | string | ID de usuário seguro |
follower_count | number | Seguidores |
signature | string | Bio |
Informações da Hashtag
POST https://api.scavio.dev/api/v1/tiktok/hashtagObter detalhes e estatísticas da hashtag. Informe ou hashtag_name ou hashtag_id.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
hashtag_name | string | -- | Texto da hashtag (sem #). É necessário informar hashtag_name ou hashtag_id. |
hashtag_id | string | -- | ID numérico da hashtag. É necessário informar hashtag_name ou hashtag_id. |
Campos da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
data.challengeInfo.challenge.id | string | ID da hashtag (use para vídeos de hashtag) |
data.challengeInfo.challenge.title | string | Nome da hashtag |
data.challengeInfo.challenge.desc | string | Descrição |
data.challengeInfo.stats.videoCount | number | Número de vídeos |
data.challengeInfo.stats.viewCount | number | Total de visualizações |
Exemplo de Resposta
{
"data": {
"challengeInfo": {
"challenge": {
"id": "229207",
"title": "fyp",
"desc": "",
"stats": {
"videoCount": 0,
"viewCount": 118798000000000
}
}
}
},
"response_time": 892,
"credits_used": 1,
"credits_remaining": 11751
}Vídeos da Hashtag
POST https://api.scavio.dev/api/v1/tiktok/hashtag/videosListar vídeos de uma hashtag. Requer hashtag_id (obtenha-o do endpoint de informações da hashtag).
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
hashtag_id | string | -- | Obrigatório. Do endpoint de informações da hashtag. |
cursor | string | "0" | Cursor de paginação. |
count | number | 20 | Resultados por página (1-30). |
Paginação
Use data.cursor como próximo cursor. Pare quando data.has_more for 0. A resposta contém data.aweme_list[] com a mesma estrutura de vídeo da pesquisa e dos posts do usuário.
Seguidores do Usuário
POST https://api.scavio.dev/api/v1/tiktok/user/followersObter a lista de seguidores de um usuário.
Corpo da Requisição
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
sec_user_id | string | -- | Obrigatório. Do endpoint de perfil. |
count | number | 20 | Resultados por página (1-20). |
page_token | string | -- | Da resposta anterior data.next_page_token. |
min_time | number | -- | Da resposta anterior data.min_time. |
Paginação
Informe ambos page_token e min_time da resposta anterior. Pare quando data.has_more for false.
Campos do Seguidor (data.followers[])
| Campo | Tipo | Descrição |
|---|---|---|
unique_id | string | Nome de usuário |
nickname | string | Nome de exibição |
sec_uid | string | ID de usuário seguro |
uid | string | ID do usuário |
follower_count | number | Contagem de seguidores deles |
aweme_count | number | Contagem de vídeos deles |
signature | string | Bio deles |
avatar_thumb | object | Avatar (.url_list[0]) |
Seguindo do Usuário
POST https://api.scavio.dev/api/v1/tiktok/user/followingsObter contas que um usuário segue. Mesma estrutura de requisição e parâmetros que seguidores. A resposta usa data.followings[] em vez de data.followers[].
Referência de Paginação
| Estilo | Endpoints | Próxima página | Condição de parada |
|---|---|---|---|
| Cursor (string) | user/posts | cursor = data.max_cursor | data.has_more === 0 |
| Deslocamento (número) | search/*, hashtag/videos, video/comments, video/comments/replies | cursor = data.cursor | data.has_more === 0 |
| Token + tempo | user/followers, user/followings | page_token + min_time | data.has_more === false |
Notas
- Todos os campos
create_timesão timestamps Unix em segundos. Multiplique por 1000 para obter um objetoDateno JavaScript. - Campos de avatar e imagem retornam um objeto com um array
url_list. Use.url_list[0]para obter a URL. - Consulte Erros para saber como lidar com
401,429e502.