TikTok API
TikTok API를 사용하면 사용자 프로필을 조회하고, 비디오 목록을 확인하고, 댓글과 답글을 읽고, 비디오와 사용자를 검색하고, 해시태그를 탐색하며, 소셜 그래프(팔로워/팔로잉)를 탐색할 수 있습니다. 11개의 엔드포인트가 있으며, 모든 요청은 1크레딧입니다.
엔드포인트
| 엔드포인트 | 설명 |
|---|---|
POST /api/v1/tiktok/profile | 사용자 이름 또는 sec_user_id로 사용자 프로필 가져오기 |
POST /api/v1/tiktok/user/posts | 사용자의 비디오 목록 (페이징, 정렬 가능) |
POST /api/v1/tiktok/video | 단일 비디오의 전체 세부 정보 가져오기 |
POST /api/v1/tiktok/video/comments | 비디오의 댓글 목록 |
POST /api/v1/tiktok/video/comments/replies | 특정 댓글에 대한 답글 목록 |
POST /api/v1/tiktok/search/videos | 키워드로 TikTok 비디오 검색 |
POST /api/v1/tiktok/search/users | 키워드로 TikTok 사용자 검색 |
POST /api/v1/tiktok/hashtag | 해시태그 세부 정보 및 통계 가져오기 |
POST /api/v1/tiktok/hashtag/videos | 해시태그의 비디오 목록 |
POST /api/v1/tiktok/user/followers | 사용자의 팔로워 목록 |
POST /api/v1/tiktok/user/followings | 사용자가 팔로우하는 계정 목록 |
인증
| 헤더 | 값 | 필수 |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | 예 |
Content-Type | application/json | 예 |
모든 성공적인 응답에는 크레딧 추적 필드인 credits_used, credits_remaining 및 response_time (ms)이 포함됩니다.
sec_user_id 가져오기
대부분의 엔드포인트는 사용자 이름 대신 sec_user_id가 필요합니다. 먼저 프로필 엔드포인트를 사용자 이름으로 호출한 후, 이후 요청에data.user.sec_uid를 사용하세요.
사용자 프로필
POST https://api.scavio.dev/api/v1/tiktok/profileTikTok 사용자 프로필을 가져옵니다. 또는 username 또는 sec_user_id를 전달하세요.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
username | string | -- | TikTok 핸들 (@ 없음). username 또는 sec_user_id 중 하나가 필요합니다. |
sec_user_id | string | -- | 보안 사용자 ID. username 또는 sec_user_id 중 하나가 필요합니다. |
예시
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/profile' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"username": "tiktok"}'응답 필드 (data.user)
| 필드 | 타입 | 설명 |
|---|---|---|
unique_id | string | 사용자 이름 (핸들) |
nickname | string | 표시 이름 |
sec_uid | string | 보안 사용자 ID (다른 엔드포인트에 사용) |
uid | string | 숫자 사용자 ID |
signature | string | 소개 텍스트 |
bio_url | string | 소개 링크 |
follower_count | number | 팔로워 수 |
following_count | number | 팔로잉 수 |
aweme_count | number | 게시된 총 비디오 수 |
total_favorited | number | 받은 총 좋아요 수 |
avatar_larger | object | 아바타 이미지 (.url_list[0] for URL) |
응답 예시
{
"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
}사용자 게시물
POST https://api.scavio.dev/api/v1/tiktok/user/posts사용자의 비디오를 목록화합니다. sec_user_id 필요 (프로필 엔드포인트에서 가져옴).
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
sec_user_id | string | -- | 필수. 프로필 엔드포인트의 보안 사용자 ID. |
cursor | string | "0" | 페이지네이션 커서. 이전 응답의 data.max_cursor 사용. |
count | number | 20 | 페이지당 결과 수 (1-30). |
sort_type | string | "0" | "0" = 최신순, "1" = 인기순. |
페이지네이션
다음 요청에 data.max_cursor를 cursor로 사용하세요.data.has_more가 0이면 중지합니다.
비디오 필드 (data.aweme_list[])
| 필드 | 타입 | 설명 |
|---|---|---|
aweme_id | string | 비디오 ID |
desc | string | 비디오 설명 |
create_time | number | Unix 타임스탬프 (초) |
statistics.digg_count | number | 좋아요 수 |
statistics.comment_count | number | 댓글 수 |
statistics.play_count | number | 조회 수 |
statistics.share_count | number | 공유 수 |
statistics.collect_count | number | 북마크 수 |
author | object | 작성자 정보 (프로필의 하위 집합) |
music | object | 사용된 사운드 |
video | object | 비디오 URL, 크기, 길이 |
비디오 상세
POST https://api.scavio.dev/api/v1/tiktok/video단일 비디오의 전체 세부 정보를 가져옵니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
video_id | string | -- | 필수. TikTok 비디오 ID. |
예시
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/video' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"video_id": "7350810998023949599"}'추가 필드 (data.aweme_detail)
위에 나열된 모든 비디오 필드와 다음을 포함합니다:
| 필드 | 타입 | 설명 |
|---|---|---|
video.play_addr | object | 비디오 재생 URL (.url_list[0]) |
video.download_addr | object | 다운로드 URL (워터마크 없음) |
video.cover | object | 커버 이미지 |
video.duration | number | 밀리초 단위 길이 |
cha_list | array | 사용된 해시태그 |
text_extra | array | 설명의 멘션 및 해시태그 |
응답 예시
{
"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
}비디오 댓글
POST https://api.scavio.dev/api/v1/tiktok/video/comments비디오의 댓글을 가져옵니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
video_id | string | -- | 필수. 비디오 ID. |
cursor | string | "0" | 페이지네이션 커서. |
count | number | 20 | 페이지당 결과 수 (1-50). |
페이지네이션
data.cursor를 다음 커서로 사용하세요.data.has_more가 0이면 중지합니다.
댓글 필드 (data.comments[])
| 필드 | 타입 | 설명 |
|---|---|---|
cid | string | 댓글 ID (답글 엔드포인트에 사용) |
text | string | 댓글 텍스트 |
create_time | number | Unix 타임스탬프 (초) |
digg_count | number | 이 댓글의 좋아요 수 |
reply_comment_total | number | 답글 수 |
user | object | 댓글 작성자 정보 (닉네임, 아바타 등) |
is_author_digged | number | 비디오 작성자가 이 댓글을 좋아하면 1 |
댓글 답글
POST https://api.scavio.dev/api/v1/tiktok/video/comments/replies특정 댓글에 대한 답글을 가져옵니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
video_id | string | -- | 필수. 비디오 ID. |
comment_id | string | -- | 필수. 댓글 ID (cid from comments endpoint). |
cursor | string | "0" | 페이지네이션 커서. |
count | number | 20 | 페이지당 결과 수 (1-50). |
페이지네이션
댓글과 동일: data.cursor 사용, data.has_more가 0이면 중지. 각 답글은 댓글 객체와 동일한 필드를 가집니다.
비디오 검색
POST https://api.scavio.dev/api/v1/tiktok/search/videos키워드로 TikTok 비디오를 검색합니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
keyword | string | -- | 필수. 검색어 (1-500자). |
cursor | string | "0" | 페이지네이션 오프셋. |
count | number | 20 | 페이지당 결과 수 (1-30). |
sort_type | string | "0" | "0" = 관련성, "1" = 좋아요순. |
publish_time | string | "0" | "0" = 전체 기간, "1" = 지난 하루, "7" = 일주일, "30" = 한 달, "90" = 3개월, "180" = 6개월. |
예시
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/search/videos' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"keyword": "cooking recipe", "count": 10, "publish_time": "7"}'페이지네이션
data.cursor를 다음 cursor로 사용하세요.data.has_more가 0이면 중지합니다.data.aweme_list의 각 항목은 비디오 상세와 동일한 구조입니다.
사용자 검색
POST https://api.scavio.dev/api/v1/tiktok/search/users키워드로 TikTok 사용자를 검색합니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
keyword | string | -- | 필수. 검색어 (1-500자). |
cursor | string | "0" | 페이지네이션 오프셋. |
count | number | 20 | 페이지당 결과 수 (1-30). |
응답 필드 (data.user_list[].user_info)
| 필드 | 타입 | 설명 |
|---|---|---|
uid | string | 사용자 ID |
unique_id | string | 사용자 이름 |
nickname | string | 표시 이름 |
sec_uid | string | 보안 사용자 ID |
follower_count | number | 팔로워 수 |
signature | string | 소개 |
해시태그 정보
POST https://api.scavio.dev/api/v1/tiktok/hashtag해시태그 세부 정보 및 통계를 가져옵니다. 또는 hashtag_name 또는 hashtag_id를 전달하세요.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
hashtag_name | string | -- | 해시태그 텍스트 (# 없음). hashtag_name 또는 hashtag_id 중 하나가 필요합니다. |
hashtag_id | string | -- | 숫자 해시태그 ID. hashtag_name 또는 hashtag_id 중 하나가 필요합니다. |
응답 필드
| 필드 | 타입 | 설명 |
|---|---|---|
data.challengeInfo.challenge.id | string | 해시태그 ID (해시태그 비디오에 사용) |
data.challengeInfo.challenge.title | string | 해시태그 이름 |
data.challengeInfo.challenge.desc | string | 설명 |
data.challengeInfo.stats.videoCount | number | 비디오 수 |
data.challengeInfo.stats.viewCount | number | 총 조회 수 |
응답 예시
{
"data": {
"challengeInfo": {
"challenge": {
"id": "229207",
"title": "fyp",
"desc": "",
"stats": {
"videoCount": 0,
"viewCount": 118798000000000
}
}
}
},
"response_time": 892,
"credits_used": 1,
"credits_remaining": 11751
}해시태그 비디오
POST https://api.scavio.dev/api/v1/tiktok/hashtag/videos해시태그의 비디오를 목록화합니다. hashtag_id 필요 (해시태그 정보 엔드포인트에서 가져옴).
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
hashtag_id | string | -- | 필수. 해시태그 정보 엔드포인트에서 가져온 ID. |
cursor | string | "0" | 페이지네이션 커서. |
count | number | 20 | 페이지당 결과 수 (1-30). |
페이지네이션
data.cursor를 다음 커서로 사용하세요. data.has_more가 0이면 중지합니다. 응답에는 검색 및 사용자 게시물과 동일한 비디오 구조의 data.aweme_list[]가 포함됩니다.
사용자 팔로워
POST https://api.scavio.dev/api/v1/tiktok/user/followers사용자의 팔로워 목록을 가져옵니다.
요청 본문
| 매개변수 | 타입 | 기본값 | 설명 |
|---|---|---|---|
sec_user_id | string | -- | 필수. 프로필 엔드포인트에서 가져옴. |
count | number | 20 | 페이지당 결과 수 (1-20). |
page_token | string | -- | 이전 응답의 data.next_page_token에서 가져옴. |
min_time | number | -- | 이전 응답의 data.min_time에서 가져옴. |
페이지네이션
이전 응답의 page_token과 min_time을 모두 전달하세요.data.has_more가 false이면 중지합니다.
팔로워 필드 (data.followers[])
| 필드 | 타입 | 설명 |
|---|---|---|
unique_id | string | 사용자 이름 |
nickname | string | 표시 이름 |
sec_uid | string | 보안 사용자 ID |
uid | string | 사용자 ID |
follower_count | number | 해당 사용자의 팔로워 수 |
aweme_count | number | 해당 사용자의 비디오 수 |
signature | string | 해당 사용자의 소개 |
avatar_thumb | object | 아바타 (.url_list[0]) |
사용자 팔로잉
POST https://api.scavio.dev/api/v1/tiktok/user/followings사용자가 팔로우하는 계정을 가져옵니다. 요청 형태와 매개변수는 팔로워와 동일합니다. 응답은 data.followers[] 대신 data.followings[]를 사용합니다.
페이지네이션 참조
| 스타일 | 엔드포인트 | 다음 페이지 | 중단 조건 |
|---|---|---|---|
| 커서 (string) | user/posts | cursor = data.max_cursor | data.has_more === 0 |
| 오프셋 (number) | search/*, hashtag/videos, video/comments, video/comments/replies | cursor = data.cursor | data.has_more === 0 |
| 토큰 + 시간 | user/followers, user/followings | page_token + min_time | data.has_more === false |
참고 사항
- 모든
create_time필드는 초 단위 Unix 타임스탬프입니다. JavaScriptDate로 사용하려면 1000을 곱하세요. - 아바타 및 이미지 필드는
url_list배열이 있는 객체를 반환합니다. URL은.url_list[0]를 사용하세요. 401,429및502처리에 대해서는 오류를 참조하세요.