A fully managed hassle-free TikTok API solution with OAuth capabilities. You can get started instantly, all you need is an API Key.
Get one at https://tikapi.io
Note: Spam/Abuse/Follower selling services are strictly not allowed.
npm i tikapi
const api = require("tikapi")("myApiKey");
await api.public.user({
username: 'lilyachty'
});SDK And Documentation made with https://github.com/elis-k/wrape
Public endpoints do not require an user authorization
Get user profile information
api.public.user({
username: "lilyachty", //required
//secUid: "<any>", //optional | Validate: ^(.*?){30,}$
})Request
GET /public/check
| Parameter | Location | Required | Description |
|---|---|---|---|
| username | query | true | The TikTok account username |
| secUid | query | false | The TikTok user secUid |
Response
{
"status": "success",
"message": "string",
"statusCode": 0,
"userInfo": {
"user": {
"id": 684574219000000000,
"uniqueId": "lilyachty",
"nickname": "lilyachty",
"avatarThumb": "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=pw%2BueamaONA9LQMd7h0Pyyb0%2FAY%3D",
"avatarMedium": "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=8FzlgFpqsP8ZPLJhxDKmqHyJ0N0%3D",
"avatarLarger": "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=SYNT1mnTj7VipZCFrh8FrmVsRJU%3D",
"signature": null,
"verified": true,
"secUid": "MS4wLjABAAAA77...........",
"secret": true,
"ftc": true,
"relation": 0,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": true
},
"stats": {
"followingCount": 0,
"followerCount": 0,
"heartCount": 0,
"videoCount": 0,
"diggCount": 0,
"heart": 0
},
"shareMeta": {
"title": "lilyachty on TikTok",
"desc": "@lilyachty 0 Followers 0 Following 0 Likes - Watch awesome short videos created by lilyachty"
}
}
}Get recommended posts
api.public.explore({
//count: 5, //optional | Validate: ^[0-9]{1,2}$
})Request
GET /public/explore
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false |
Get posts of an user
api.public.posts({
secUid: "MS4wLjABAAAAsHntXC3s0AvxcecggxsoVa4eAiT8OVafVZ4OQXxy-9htpnUi0sOYSr0kGGD1Loud", //required | Validate: ^(.*?){30,}$
//count: 5, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /public/posts
| Parameter | Location | Required | Description |
|---|---|---|---|
| secUid | query | true | The user secUid |
| count | query | false | |
| cursor | query | false |
Response
{
"status": "success",
"message": "string",
"statusCode": 0,
"itemList": [
{
"id": 6932268218690145000,
"desc": "The way he dives into the ball pit 😂😂😂 TYSM to Sarah and Rock Dodd from NY! 🥰",
"createTime": 1614044487,
"video": {
"id": 6932268218690145000,
"height": 1024,
"width": 576,
"duration": 58,
"ratio": "720p",
"cover": "https://p16-sign-sg.tiktokcdn.com/tos-maliva-p-0068/7a9f49ac001748bc8c807b74805696a0~tplv-dmt-logom:tos-maliva-p-0000/147eca0bbe4a4320adf3a754500753b6.image?x-expires=1614106800&x-signature=TwoCAwb61y6S5WgzE6qLvqSZ9UI%3D",
"originCover": "https://p16-sign-sg.tiktokcdn.com/obj/tos-maliva-p-0068/e66f4a91f7344027a1d810669e9ae36e_1614044489?x-expires=1614106800&x-signature=dcw8cAWMrxpkRQ3VK%2FuQfcpP1f8%3D",
"dynamicCover": "https://p16-sign-sg.tiktokcdn.com/obj/tos-maliva-p-0068/50a86c1ff6244894b5d7a7e524265b52_1614044493?x-expires=1614106800&x-signature=WIxlVRaftMgyJgJB8UBKo6r1yOI%3D",
"playAddr": "https://v16-web.tiktok.com/video/tos/useast2a/tos-useast2a-pve-0068/5bf7260ddb454770a69af5504005ca8c/?a=1988&br=4138&bt=2069&cd=0%7C0%7C1&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&expire=1614107310&l=202102231307320101902092161F0FE04F&lr=tiktok_m&mime_type=video_mp4&pl=0&policy=2&qs=0&rc=M3g3d3E1Ozk4MzMzOjczM0ApOGY6Mzg8OWU5Nzo3ZDs4M2dsa29kc24ybm5gLS1iMTZzc2BfLzUzYjA2L18uMzEtMTE6Yw%3D%3D&signature=7db7b85f595129f501618fc50d7408fe&tk=tt_webid_v2&vl=&vr=",
"downloadAddr": "https://v16-web.tiktok.com/video/tos/useast2a/tos-useast2a-pve-0068/5bf7260ddb454770a69af5504005ca8c/?a=1988&br=4138&bt=2069&cd=0%7C0%7C1&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&expire=1614107310&l=202102231307320101902092161F0FE04F&lr=tiktok_m&mime_type=video_mp4&pl=0&policy=2&qs=0&rc=M3g3d3E1Ozk4MzMzOjczM0ApOGY6Mzg8OWU5Nzo3ZDs4M2dsa29kc24ybm5gLS1iMTZzc2BfLzUzYjA2L18uMzEtMTE6Yw%3D%3D&signature=7db7b85f595129f501618fc50d7408fe&tk=tt_webid_v2&vl=&vr=",
"shareCover": [
null
],
"reflowCover": "https://p16-sign-sg.tiktokcdn.com/obj/tos-maliva-p-0068/9e209ac43d03422555230402d3f4cf07?x-expires=1614106800&x-signature=GC3FZC2q01W6gzUCx2SgLNkOGA0%3D"
},
"author": {
"id": 6658113054100652000,
"uniqueId": "heresyourmonkeycontent",
"nickname": "Georgie Boy",
"avatarThumb": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_100x100.jpeg?x-expires=1614171600&x-signature=ykouyuQyhAgJhAO%2FkNEIH1AcS50%3D",
"avatarMedium": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_720x720.jpeg?x-expires=1614171600&x-signature=Oo9ewQlRjJUH%2BVOPmKyDPAZvIeo%3D",
"avatarLarger": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_1080x1080.jpeg?x-expires=1614171600&x-signature=CXugf2YWO%2BJUEtUADeAE2Kj9zmI%3D",
"signature": "👆YOUTUBE AND INSTA",
"verified": true,
"secUid": "MS4wLjABAAAA7CyNvLiT5-wfMyn7_KhW2jJM-QZZMgvDH9UjKnlgd2pCWpyI0PUewJn-f_hLOuMD",
"secret": true,
"ftc": true,
"relation": 1,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": true
},
"music": {
"id": 6932268233760509000,
"title": "original sound",
"playUrl": "https://sf16-ies-music-va.tiktokcdn.com/obj/musically-maliva-obj/6932268236901731077.mp3",
"coverThumb": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_100x100.jpeg?x-expires=1614171600&x-signature=ykouyuQyhAgJhAO%2FkNEIH1AcS50%3D",
"coverMedium": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_720x720.jpeg?x-expires=1614171600&x-signature=Oo9ewQlRjJUH%2BVOPmKyDPAZvIeo%3D",
"coverLarge": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/1663367077635077~c5_1080x1080.jpeg?x-expires=1614171600&x-signature=CXugf2YWO%2BJUEtUADeAE2Kj9zmI%3D",
"authorName": "Georgie Boy",
"original": true,
"duration": 58,
"album": null
},
"challenges": [
{
"id": 22453,
"title": "monkey",
"desc": null,
"profileThumb": null,
"profileMedium": null,
"profileLarger": null,
"coverThumb": null,
"coverMedium": null,
"coverLarger": null,
"isCommerce": true
}
],
"stats": {
"diggCount": 16000,
"shareCount": 612,
"commentCount": 393,
"playCount": 80200
},
"duetInfo": {
"duetFromId": 0
},
"originalItem": true,
"officalItem": true,
"textExtra": [
{
"awemeId": null,
"start": 82,
"end": 89,
"hashtagName": "monkey",
"hashtagId": null,
"type": 1,
"userId": null,
"isCommerce": true,
"userUniqueId": null,
"secUid": null
}
],
"secret": true,
"forFriend": true,
"digged": true,
"itemCommentStatus": 0,
"showNotPass": true,
"vl1": true,
"itemMute": true,
"authorStats": {
"followingCount": 282,
"followerCount": 12900000,
"heartCount": 142600000,
"videoCount": 455,
"diggCount": 1443,
"heart": 142600000
},
"privateItem": true,
"duetEnabled": true,
"stitchEnabled": true,
"shareEnabled": true,
"stickersOnItem": [
{
"stickerType": 0
}
],
"isAd": true
}
],
"cursor": 1611774375000,
"hasMore": true
}Get a video information/ Download a video
api.public.video({
id: "6950501241915018501", //required | Validate: ^[0-9]+$
//username: "lilyachty", //optional
//download: "<any>", //optional | Allowed: 0, 1
})Request
GET /public/video
| Parameter | Location | Required | Description |
|---|---|---|---|
| id | query | true | The video ID |
| username | query | false | The author username |
| download | query | false | Set this to 1 to get a mp4 file |
Search users, music, hashtags
api.public.discover.users({
//keyword: "<any>", //optional
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /public/discover/users
| Parameter | Location | Required | Description |
|---|---|---|---|
| keyword | query | false | |
| count | query | false | |
| cursor | query | false |
api.public.discover.music({
//keyword: "lilyachty", //optional
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /public/discover/music
| Parameter | Location | Required | Description |
|---|---|---|---|
| keyword | query | false | |
| count | query | false | |
| cursor | query | false |
Response
{
"status": "success",
"message": null,
"musicInfoList": [
{
"music": {
"album": "Hey Julie! (feat. Lil Yachty)",
"authorName": "KYLE",
"coverLarge": "https://p16-sg.tiktokcdn.com/aweme/720x720/tos-alisg-i-0000/d03864babe5c4c1ea2106db77909807e.jpeg",
"coverMedium": "https://p16-sg.tiktokcdn.com/aweme/200x200/tos-alisg-i-0000/d03864babe5c4c1ea2106db77909807e.jpeg",
"coverThumb": "https://p16-sg.tiktokcdn.com/aweme/100x100/tos-alisg-i-0000/d03864babe5c4c1ea2106db77909807e.jpeg",
"duration": 33,
"id": 6659459073378995000,
"original": true,
"playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/obj/tiktok-obj/030aee3fc6cf3eecf1b97b08c344d392.mp3",
"title": "Hey Julie! (feat. Lil Yachty)"
},
"stats": {
"videoCount": 5600000
}
}
],
"offset": 10,
"statusCode": 0
}api.public.discover.hashtags({
//keyword: "lilyachty", //optional
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /public/discover/hashtag
| Parameter | Location | Required | Description |
|---|---|---|---|
| keyword | query | false | |
| count | query | false | |
| cursor | query | false |
Response
{}Get posts by hashtag ID (You can find it using Discover endpoint)
api.public.hashtag({
id: "<any>", //required | Validate: ^[0-9]+$
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /public/hashtag
| Parameter | Location | Required | Description |
|---|---|---|---|
| id | query | true | The hashtag ID |
| count | query | false | |
| cursor | query | false | The starting point of items list |
Response
{
"status": "success",
"message": "string",
"itemStruct": {
"cursor": 60,
"hasMore": true,
"itemList": [
{
"author": {
"avatarLarger": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_1080x1080.jpeg?x-expires=1618480800&x-signature=tKuHC7eXYB343bslQKrw41UN%2FIo%3D",
"avatarMedium": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_720x720.jpeg?x-expires=1618480800&x-signature=OjnTsyKRskBVTj%2Fi2spU%2F%2FEEgvA%3D",
"avatarThumb": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_100x100.jpeg?x-expires=1618480800&x-signature=Bq6J1aq3O248fvPcZZXyj5uI6JI%3D",
"commentSetting": 0,
"duetSetting": 0,
"ftc": true,
"id": "6743547525321xxxxx",
"nickname": "RAP",
"openFavorite": true,
"privateAccount": true,
"relation": 0,
"secUid": "MS4wLjABAAAAyZX6.",
"secret": true,
"signature": "Link in bio",
"stitchSetting": 0,
"uniqueId": "rap",
"verified": true
},
"authorStats": {
"diggCount": 5795,
"followerCount": 5400000,
"followingCount": 434,
"heart": 200100000,
"heartCount": 200100000,
"videoCount": 2405
},
"challenges": [
{
"coverLarger": null,
"coverMedium": null,
"coverThumb": null,
"desc": null,
"id": 656,
"isCommerce": true,
"profileLarger": null,
"profileMedium": null,
"profileThumb": null,
"title": "bobbyshmurda"
}
],
"createTime": 1615085843,
"desc": null,
"digged": true,
"duetEnabled": true,
"duetInfo": {
"duetFromId": 0
},
"forFriend": true,
"id": 6936740859383680000,
"isAd": true,
"itemCommentStatus": 0,
"itemMute": true,
"music": {
"album": null,
"authorName": "RAP",
"coverLarge": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_1080x1080.jpeg?x-expires=1618480800&x-signature=tKuHC7eXYB343bslQKrw41UN%2FIo%3D",
"coverMedium": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_720x720.jpeg?x-expires=1618480800&x-signature=OjnTsyKRskBVTj%2Fi2spU%2F%2FEEgvA%3D",
"coverThumb": "https://p16-sign-va.tiktokcdn.com/musically-maliva-obj/ed46bcdd5e318d4670f26aec440e2052~c5_100x100.jpeg?x-expires=1618480800&x-signature=Bq6J1aq3O248fvPcZZXyj5uI6JI%3D",
"duration": 15,
"id": 6936740754928717000,
"original": true,
"playUrl": "https://sf16-ies-music-va.tiktokcdn.com/obj/musically-maliva-obj/6936740824692558597.mp3",
"title": "original sound"
},
"officalItem": true,
"originalItem": true,
"privateItem": true,
"secret": true,
"shareEnabled": true,
"showNotPass": true,
"stats": {
"commentCount": 5270,
"diggCount": 232700,
"playCount": 2100000,
"shareCount": 2957
},
"stickersOnItem": [
{
"stickerText": [
"Bobby Shmurda pulling up to All Star weekend🔥"
],
"stickerType": 4
}
],
"stitchEnabled": true,
"textExtra": [
{
"awemeId": null,
"end": 13,
"hashtagId": 656,
"hashtagName": "bobbyshmurda",
"isCommerce": true,
"secUid": null,
"start": 0,
"type": 1,
"userId": null,
"userUniqueId": null
}
],
"video": {
"cover": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/43bdcd4b086446f68ece8ec7289845fc?x-expires=1618416000&x-signature=rMQAUzfMneoP%2B8bHXKGSfwIfxTU%3D",
"downloadAddr": "https://v16-web.tiktok.com/video/tos/useast2a/tos-useast2a-ve-0068c003/3f83725baa75439ea8ba764a2ab6dd75/?a=1988&br=3120&bt=1560&cd=0%7C0%7C1&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&expire=1618419556&l=202104141059010101890531331400A966&lr=tiktok_m&mime_type=video_mp4&net=0&pl=0&policy=2&qs=0&rc=anc4Zjw4aDY3NDMzOTczM0ApOTNlOmQ0Nzw7NzZoZjY2ZWdrLTJgcTYxLy9gLS1iMTZzczQuYl8uMGE2MTYvMmEzM2I6Yw%3D%3D&signature=5c842ee10fd13d7947cc6f52a0c04d82&tk=tt_webid_v2&vl=&vr=",
"duration": 15,
"dynamicCover": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/def4c536e245468ba0404da490337aeb_1615085845?x-expires=1618416000&x-signature=NTiyZa3N5mddjNvoFtDyznzRH6A%3D",
"height": 1024,
"id": 6936740859383680000,
"originCover": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/28baaa197b1440fdb0aa9795106b8825_1615085845?x-expires=1618416000&x-signature=veEGB6CU9nZIDTFaEwOOU0gHbjY%3D",
"playAddr": "https://v16-web.tiktok.com/video/tos/useast2a/tos-useast2a-ve-0068c003/3f83725baa75439ea8ba764a2ab6dd75/?a=1988&br=3120&bt=1560&cd=0%7C0%7C1&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&expire=1618419556&l=202104141059010101890531331400A966&lr=tiktok_m&mime_type=video_mp4&net=0&pl=0&policy=2&qs=0&rc=anc4Zjw4aDY3NDMzOTczM0ApOTNlOmQ0Nzw7NzZoZjY2ZWdrLTJgcTYxLy9gLS1iMTZzczQuYl8uMGE2MTYvMmEzM2I6Yw%3D%3D&signature=5c842ee10fd13d7947cc6f52a0c04d82&tk=tt_webid_v2&vl=&vr=",
"ratio": "720p",
"reflowCover": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/43bdcd4b086446f68ece8ec7289845fc?x-expires=1618416000&x-signature=rMQAUzfMneoP%2B8bHXKGSfwIfxTU%3D",
"shareCover": [
null
],
"width": 576
},
"vl1": true
}
],
"message": null,
"status": "success",
"statusCode": 0
}
}The user endpoints require an accountKey
const user = new api.user.set({
accountKey: "myAccountKey", //required | Validate: ^[a-zA-Z0-9]{10,}$
})Get current user profile information
user.profile.info({
})Request
GET /user/info
| Parameter | Location | Required | Description |
|---|
Response
{
"status": "success",
"message": "string",
"statusCode": 0,
"userInfo": {
"user": {
"id": 684574219000000000,
"uniqueId": "lilyachty",
"nickname": "lilyachty",
"avatarThumb": "https://p16-sign-sg.tiktokcdn.com/aweme/100x100/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=pw%2BueamaONA9LQMd7h0Pyyb0%2FAY%3D",
"avatarMedium": "https://p16-sign-sg.tiktokcdn.com/aweme/720x720/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=8FzlgFpqsP8ZPLJhxDKmqHyJ0N0%3D",
"avatarLarger": "https://p16-sign-sg.tiktokcdn.com/aweme/1080x1080/tiktok-obj/db20c99f44182ab54cca90de85f673bf.jpeg?x-expires=1606165200&x-signature=SYNT1mnTj7VipZCFrh8FrmVsRJU%3D",
"signature": null,
"verified": true,
"secUid": "MS4wLjABAAAA77...........",
"secret": true,
"ftc": true,
"relation": 0,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": true
},
"stats": {
"followingCount": 0,
"followerCount": 0,
"heartCount": 0,
"videoCount": 0,
"diggCount": 0,
"heart": 0
},
"shareMeta": {
"title": "lilyachty on TikTok",
"desc": "@lilyachty 0 Followers 0 Following 0 Likes - Watch awesome short videos created by lilyachty"
}
}
}Edit the user profile
user.profile.edit({
//nickname: "<any>", //optional
//username: "<any>", //optional
//bio: "My new bio", //optional
//privacy: "<any>", //optional | Validate: ^[0-1]$
})Request
POST /user/edit
| Parameter | Location | Required | Description |
|---|---|---|---|
| nickname | body | false | |
| username | body | false | |
| bio | body | false | |
| privacy | body | false |
Response
{
"status": "success",
"message": null,
"extra": {
"fatal_item_ids": [],
"logid": "202104141323300101901...",
"now": 1618406620418
},
"log_pb": {
"impr_id": "202104141323300101..."
},
"status_code": 0,
"user": {
"apple_account": 0,
"avatar_larger": {
"uri": "tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg.tiktokcdn.com..."
]
},
"avatar_medium": {
"uri": "tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg.tiktokcdn.com..."
]
},
"avatar_thumb": {
"uri": "tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg.tiktokcdn.com..."
]
},
"google_account": null,
"ins_id": null,
"nickname": "demoapi",
"secret": 0,
"self_visible_avatar_larger": {
"uri": "1080x1080/tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg.tiktokcdn.com..."
]
},
"self_visible_avatar_medium": {
"uri": "720x720/tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg.tiktokcdn..."
]
},
"self_visible_avatar_thumb": {
"uri": "100x100/tiktok-obj/db20c99f44182ab54cca90de85f673bf",
"url_list": [
"https://p16-sign-sg..."
]
},
"share_qrcode_uri": null,
"short_id": 0,
"signature": "My new bio!",
"twitter_id": null,
"twitter_name": null,
"uid": "6845742198232xxxxxx",
"unique_id": "demoapi",
"verification_type": 0,
"video_icon": {
"uri": null,
"url_list": []
},
"youtube_channel_id": null,
"youtube_channel_title": null
}
}Get user notifications
user.notifications({
//filter: "all", //optional | Allowed: all, likes, comments, mentions, followers
//count: 20, //optional | Max: 20 | Validate: ^[0-9]{1,2}$
//maxTime: "<any>", //optional | Validate: ^[0-9]+$
//minTime: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /user/notifications
| Parameter | Location | Required | Description |
|---|---|---|---|
| filter | query | false | |
| count | query | false | |
| max_time | query | false | |
| min_time | query | false |
Get followers list
user.followers({
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//maxTime: "<any>", //optional | Validate: ^[0-9]+$
//minTime: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /user/followers
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false | |
| max_time | query | false | |
| min_time | query | false |
Get following list
user.following({
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /user/following
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false | |
| cursor | query | false |
Follow an user
user.follow({
username: "lilyachty", //required
userId: "6569595380449902597", //required
})Request
POST /user/follow
| Parameter | Location | Required | Description |
|---|---|---|---|
| username | body | true | |
| user_id | body | true |
Response
{
"status": "success",
"message": "string"
}Unfollows an user
user.unfollow({
username: "lilyachty", //required
userId: "6569595380449902597", //required
})Request
POST /user/follow
| Parameter | Location | Required | Description |
|---|---|---|---|
| username | body | true | |
| user_id | body | true | The user ID |
Response
{
"status": "success",
"message": "string"
}Get user feed posts
user.feed({
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
//secUid: "<any>", //optional | Validate: ^(.*?){30,}$
})Request
GET /user/feed
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false | |
| cursor | query | false | |
| secUid | query | false |
Get user liked posts
user.likes({
//count: 30, //optional | Validate: ^[0-9]{1,2}$
//id: "<any>", //optional | Validate: ^[0-9]+$
//secUid: "<any>", //optional | Validate: ^(.*?){30,}$
//maxTime: "<any>", //optional | Validate: ^[0-9]+$
//minTime: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /user/likes
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false | |
| id | query | false | |
| secUid | query | false | |
| max_time | query | false | |
| min_time | query | false |
Get recommended posts
user.explore({
//count: 30, //optional | Validate: ^[0-9]{1,2}$
})Request
GET /user/explore
| Parameter | Location | Required | Description |
|---|---|---|---|
| count | query | false |
Get video information/Download video
user.posts.info({
id: "6950501241915018501", //required | Validate: ^[0-9]+$
//download: "<any>", //optional | Allowed: 0, 1
})Request
GET /public/video
| Parameter | Location | Required | Description |
|---|---|---|---|
| id | query | true | The video ID |
| download | query | false |
Like a video
user.posts.like({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
})Request
POST /user/like
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | body | true | The video ID |
Response
{
"status": "success",
"message": "string"
}Unlike a video
user.posts.unlike({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
})Request
POST /user/like
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | body | true | The video ID |
Response
{
"status": "success",
"message": "string"
}Get a video comments list
user.posts.comments.list({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
//count: 20, //optional | Min: 20 | Validate: ^[0-9]{1,2}$
//cursor: "<any>", //optional | Validate: ^[0-9]+$
//authorId: "<any>", //optional
//authorUsername: "<any>", //optional
})Request
GET /comment/list
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | query | true | The video ID |
| count | query | false | |
| cursor | query | false | |
| author_id | query | false | |
| author_username | query | false |
Get a comment reply list
user.posts.comments.replies({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
commentId: "6950502632121548805", //required | Validate: ^[0-9]+$
//count: 20, //optional | Validate: ^[0-9]{1,2}$
})Request
GET /comment/reply/list
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | query | true | The video ID |
| comment_id | query | true | The comment ID |
| count | query | false |
Post a new comment
user.posts.comments.make({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
text: "That's cool", //required
//commentId: "<any>", //optional | Validate: ^[0-9]+$
//has_tags: "<any>", //optional
//authorId: "<any>", //optional
//authorUsername: "<any>", //optional
})Request
POST /user/comment
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | body | true | The video ID |
| text | body | true | |
| reply_comment_id | body | false | You can reply to a comment by including a comment ID |
| has_tags | body | false | |
| author_id | body | false | |
| author_username | body | false |
Response
{
"status": "success",
"message": "string",
"comment": {
"text": "Thats cool",
"aweme_id": 69095729000000000,
"digg_count": 0,
"user": {},
"reply_id": 0,
"text_extra": [],
"reply_to_reply_id": 0,
"cid": 69102083240000000,
"status": 7,
"user_digged": 0,
"reply_comment": [],
"label_list": "string",
"create_time": 16089000000
},
"label_info": null,
"extra": {},
"log_pb": {},
"status_code": 0,
"status_msg": "Comment sent successfully"
}Like a comment
user.posts.comments.like({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
commentId: "6950502632121548805", //required | Validate: ^[0-9]+$
//authorId: "<any>", //optional
//authorUsername: "<any>", //optional
})Request
POST /user/comment/like
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | body | true | The video ID |
| comment_id | body | true | The comment ID |
| author_id | body | false | |
| author_username | body | false |
Response
{
"status": "success",
"message": "string"
}Unlike a comment
user.posts.comments.unlike({
mediaId: "6950501241915018501", //required | Validate: ^[0-9]+$
commentId: "6950502632121548805", //required | Validate: ^[0-9]+$
//authorId: "<any>", //optional
//authorUsername: "<any>", //optional
})Request
POST /user/comment/unlike
| Parameter | Location | Required | Description |
|---|---|---|---|
| media_id | body | true | The video ID |
| comment_id | body | true | The comment ID |
| author_id | body | false | |
| author_username | body | false |
Response
{
"status": "success",
"message": "string"
}Get user conversations
user.conversations({
//cursor: "<any>", //optional | Validate: ^[0-9]+$
})Request
GET /user/conversations
| Parameter | Location | Required | Description |
|---|---|---|---|
| cursor | query | false |
Response
{
"hasMore": false,
"nextCursor": "1",
"perUserCursor": "161830000000000",
"conversations": [
{
"conversationType": 1,
"favorite": 0,
"id": "0:1:684574219823xxxxxxx:694024352038xxxxxxx",
"inboxType": 0,
"isParticipant": true,
"messages": [
{
"content": {
"aweType": 0
},
"createTime": "1618000000000",
"senderSecUid": "MS4wLjABAAAA77.....",
"senderUid": "684574219xxxxxxxxx",
"status": 0,
"text": "Hello!",
"version": "0"
},
{
"content": {
"aweType": 700,
"isDefault": false,
"is_card": false,
"mSendStartTime": 1618260000000,
"msgHint": "",
"type": 0
},
"createTime": "16182628000000",
"senderSecUid": "MS4wLjABAAAA77.......",
"senderUid": "684574219xxxxxxxx",
"status": 0,
"text": "hi, whatsup",
"version": "0"
}
],
"mute": 0,
"notice": "",
"ownerSecUid": "MS4wLjABAAAAg.......",
"ownerUid": "694024352xxxxxx",
"participantsCount": 2,
"participantsUid": [
"684574219xxxxxxxx",
"694024352xxxxxxxx"
],
"short_id": "694024514xxxxxxx",
"ticket": "z5fP0jzMCTIoG......"
}
],
"error_desc": "OK",
"inbox_type": 0,
"log_id": "202104171926xxxxxxxxx",
"message": "",
"sequence_id": "0",
"status": "success",
"status_code": 0
}Get user messages
user.messages({
conversationId: "<any>", //required
conversationShortId: "<any>", //required
//cursor: "<any>", //optional | Validate: ^[0-9]+$
//limit: "<any>", //optional | Validate: ^[0-9]{1,2}$
})Request
GET /user/messages
| Parameter | Location | Required | Description |
|---|---|---|---|
| conversationId | query | true | |
| conversationShortId | query | true | |
| cursor | query | false | |
| limit | query | false |
Response
{
"hasMore": true,
"nextCursor": 161590272500000,
"messages": [
{
"text": "heeey",
"createTime": 1615900000000,
"isStranger": true,
"senderSecUid": "MS4wLjABAAA...",
"senderUid": "69402435......",
"status": 0,
"type": 7,
"clientMessageId": "8046dd57...",
"content": {
"aweType": 700,
"isDefault": true,
"is_card": true,
"mSendStartTime": 1615900000000,
"msgHint": null,
"type": 0
}
}
],
"status": "success",
"message": null,
"error_desc": "OK",
"inbox_type": 0,
"log_id": "20210414132....",
"sequence_id": 10005,
"status_code": 0
}Start a live video
user.live.start({
title: "Check out my live!", //required
})Request
POST /user/live/start
| Parameter | Location | Required | Description |
|---|---|---|---|
| title | body | true |
Response
{
"status": "success",
"message": null,
"room": {
"cover": {
"avg_color": null,
"height": 0,
"image_type": 0,
"is_animated": true,
"open_web_url": null,
"uri": "tiktok-obj/db20c99f44182xxxxxxxxxxxxxx",
"url_list": [
"https://p16-webcast.tiktokcdn.com/img/alisg/tiktok-obj/db20c99f44182ab54cca90de8xxxxxx~tplv-obj.image"
],
"width": 0
},
"create_time": 1618500000000,
"id": "6951455042083xxxxxx",
"share_url": "https://m.tiktok.com/share/live/6951455042083xxxxx/?language=en&u_code=dd8i6568e8a8e8",
"status": 1
},
"stream": {
"id": "29909202465xxxxx",
"pull": {
"default_resolution": "FULL_HD1",
"flv": {
"FULL_HD1": "https://pull-f5-va01.tiktokcdn.com/game/stream-29909202465xxxxx_uhd.flv",
"HD1": "https://pull-f5-va01.tiktokcdn.com/game/stream-29909202465647xxxx_hd.flv",
"SD1": "https://pull-f5-va01.tiktokcdn.com/game/stream-29909202465647xxxxxx_ld.flv",
"SD2": "https://pull-f5-va01.tiktokcdn.com/game/stream-29909202465647xxxxxxx_sd.flv"
},
"hls": "https://pull-hls-f16-va01.tiktokcdn.com/game/stream-2990920246564xxxxxxx/index.m3u8",
"rtmp": "https://pull-f5-va01.tiktokcdn.com/game/stream-2990920246564xxxxxxx.flv"
},
"push": {
"key": "stream-299092024xxxxxxx?expire=1619116601&sign=3c61ba05715befe6xxxxxxxxxxxxxx",
"server": "rtmp://push-rtmp-f5-va01.tiktokcdn.com/game",
"url": "rtmp://push-rtmp-f5-va01.tiktokcdn.com/game/stream-299092024656xxxxxxx?expire=1619116601&sign=3c61ba05715befe6xxxxxxxxxxxxxx"
}
}
}Stop a live video
user.live.stop({
})Request
POST /user/live/stop
| Parameter | Location | Required | Description |
|---|
Response
{
"status": "success",
"message": ""
}Get a live video information
user.live.info({
roomId: "<any>", //required
})Request
GET /user/live/check
| Parameter | Location | Required | Description |
|---|---|---|---|
| room_id | query | true |
Response
{...}Get recommended live videos based on a live video
user.live.recommend({
roomId: "<any>", //required
})Request
GET /user/live/recommend
| Parameter | Location | Required | Description |
|---|---|---|---|
| room_id | query | true |
Response
{...}Get a ended live video statistics
user.live.stats({
roomId: "<any>", //required
})Request
GET /user/live/stats
| Parameter | Location | Required | Description |
|---|---|---|---|
| room_id | query | true |
Response
{
"status": "success",
"message": null,
"data": {
"period_stats": {
"decimal_num": 2,
"stats_type": 0,
"value": 4493
},
"room_stats": {
"live_comment_ucnt": 0,
"live_consume_ucnt": 0,
"live_end_time": "2021-04-17T19:30:44.386Z",
"live_like_cnt": 0,
"live_new_fans_ucnt": 0,
"live_pause_duration": 0,
"live_start_time": "2021-04-17T19:30:44.386Z",
"live_watch_ucnt": 4,
"room_id": "695140311xxxxxxxxx",
"total_score": 0
}
},
"extra": {
"now": 161850000000000
},
"status_code": 0
}user.live.enter({
roomId: "<any>", //required
})Request
GET /user/live/enter
| Parameter | Location | Required | Description |
|---|---|---|---|
| room_id | query | true |
Response
{...}Search for users
user.search({
query: "lilyachty", //required
})Request
GET /user/search
| Parameter | Location | Required | Description |
|---|---|---|---|
| query | query | true |
Get analytics for creator accounts
user.analytics.overview({
//days: 7, //optional | Validate: ^[0-9]+$
})Request
GET /creator/analytics/overview
| Parameter | Location | Required | Description |
|---|---|---|---|
| days | query | false |
Response
{...}user.analytics.videos({
//days: 7, //optional | Validate: ^[0-9]+$
})Request
GET /creator/analytics/videos
| Parameter | Location | Required | Description |
|---|---|---|---|
| days | query | false |
Response
{...}user.analytics.followers({
//days: 7, //optional | Validate: ^[0-9]+$
})Request
GET /creator/analytics/followers
| Parameter | Location | Required | Description |
|---|---|---|---|
| days | query | false |
Response
{...}user.analytics.live({
//days: 7, //optional | Validate: ^[0-9]+$
})Request
GET /creator/analytics/live
| Parameter | Location | Required | Description |
|---|---|---|---|
| days | query | false |
Response
{...}This code is in no way affiliated with, authorized, maintained, sponsored or endorsed by TikTok or any of its affiliates or subsidiaries. This is an independent and unofficial API. Use at your own risk.