TikTok video data API

Look up TikTok creators by username or open individual videos. Each profile or video comes back as one record with its counts and metadata.

Record types
video profile
Fields
54
From
$3.30 per 1,000 records

What you can request

Set mode in the request body to choose what comes back; without it the request runs as profile. Each mode reads the inputs listed next to it.

ModeWhat comes backInputsBilled as
profileA creator's profile: bio, follower, following, like and video counts.usernames profileUrlsprofile
videoThe detail of each video URL: caption, counts, music and author.videoUrlsvideo-detail

Every request also takes maxItems (records for the whole request) and maxItemsPerInput (records per search, URL or name).

Datasets

These TikTok record types have their own page, with their own example record, fields, options and prices.

DatasetOne record isFieldsFrom, per 1,000
ProfilesOne record describes a single TikTok account.23$3.30

Example request and record

The request below is the one this example record answers. The names, usernames, photos and contact details of people in it are fictional. Long values in the record are shortened.

curl

curl -X POST https://api.urakimon.com/records/tiktok \
  -H "x-api-key: $URAKIMON_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "mode": "video",
    "videoUrls": [
      "https://www.tiktok.com/@example_user_1/video/7683649763480309022",
      "https://www.tiktok.com/@example_user_1/video/7683332577364643103"
    ]
  }'

Python

import os
import requests

res = requests.post(
    "https://api.urakimon.com/records/tiktok",
    headers={"x-api-key": os.environ["URAKIMON_API_KEY"]},
    json={
        "mode": "video",
        "videoUrls": [
            "https://www.tiktok.com/@example_user_1/video/7683649763480309022",
            "https://www.tiktok.com/@example_user_1/video/7683332577364643103"
        ]
    },
)
res.raise_for_status()
records = res.json()["records"]

Node

const res = await fetch("https://api.urakimon.com/records/tiktok", {
  method: "POST",
  headers: {
    "x-api-key": process.env.URAKIMON_API_KEY,
    "content-type": "application/json",
  },
  body: JSON.stringify({
    "mode": "video",
    "videoUrls": [
      "https://www.tiktok.com/@example_user_1/video/7683649763480309022",
      "https://www.tiktok.com/@example_user_1/video/7683332577364643103"
    ]
  }),
});
const { records } = await res.json();
Example TikTok recordDownload
{  "source": "tiktok",  "type": "video",  "id": "7683332577364643103",  "url": "https://www.tiktok.com/@example_user_1/video/7683332577364643103",  "description": "Replying to @Casey Example I’ve never seen a class so eager to read ",  "createdAt": "2026-09-09T00:54:39.000Z",  "createdTimestamp": 1788915279,  "playCount": 7200000,  "likeCount": 705800,  "commentCount": 29500,  "shareCount": 15800,  "collectCount": 33438,  "repostCount": 0,  "durationSeconds": 27,  "ratio": "540p",  "definition": "540p",  "format": "mp4",  "width": 576,  "height": 1024,  "cover": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oY9fXVN5MQVKsBZqAJWEq1jjAC8eVzIQQYAeIQ~tplv-tiktokx-origin.image?dr=9636&…",  "coverDynamic": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oogPtBaIWbiFiDofCAzgPq1lrqIkUAd8iIvABG~tplv-tiktokx-origin.image?dr=9636&…",  "subtitles": [    {      "language": "eng-US",      "languageId": "2",      "downloadLink": "https://v16m-webapp.tiktokcdn-us.com/f568da9f2aa3c4dfb3d233544c14dc74/6ab2daca/video/tos/useast8/tos-useast8-v-0068-tx2/67b8e5f7817a47d08…",      "format": "webvtt",      "source": "ASR",      "sourceUnabbreviated": "automatic speech recognition",      "version": "1:big_caption",      "size": 683,      "expiresAt": "2026-09-22T19:45:14.000Z"    }  ],  "textLanguage": "en",  "categories": [],  "locationCreated": "CA",  "isAd": false,  "isPinned": false,  "isAigc": false,  "author": {    "username": "example_user_1",    "userId": "9000000000000000001",    "nickname": "Jordan Example",    "isVerified": true,    "avatar": "https://example.com/avatars/1.jpg",    "signature": "Checkout My New Book!👇",    "followerCount": 141400000,    "followingCount": 355,    "heartCount": 1500000000,    "videoCount": 475,    "diggCount": 1550,    "friendCount": 0  },  "music": {    "id": "7683444018113465119",    "title": "original sound",    "authorName": "Jordan Example",    "isOriginal": true,    "duration": 27,    "url": "https://v16m.tiktokcdn-us.com/6114debe7b9b6803213743beee92174a/6ab08c2a/video/tos/useast8/tos-useast8-v-27dcd7-tx2/o8AAFiId1iAMEcR9BBAcCr…",    "cover": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr…"  },  "hashtags": [],  "mentions": [    {      "userId": "9000000000000000002",      "username": "example_user_2",      "nickname": "Casey Example",      "secUid": "MS4wLjABAAAAexample300000000000000000000000000000000000000000000000000000000",      "profileUrl": "https://example.com/people/2"    }  ],  "isSlideshow": false,  "imageCount": null,  "images": [],  "isSponsored": false,  "event": "video-detail",  "collectedAt": "2026-09-20T19:44:47.733Z"}

Fields

Every record starts with the same envelope: source, type, event, id, url, collectedAt. What the envelope means. The tables below list the fields after it, read from real TikTok records. Where a field does not apply to an item it is null or an empty list, not left out. "Present on" names the billed events a field comes with when it is not on every record of that type.

video records

One record describes a single TikTok video (or photo slideshow) post. Billed as video-detail.

32 fields on video records, besides the envelope
FieldTypeWhat it holdsPresent on
descriptionstringVideo's caption text; empty string when the video has no caption.All
createdAtstringISO 8601 timestamp the video was posted.All
createdTimestampintegerUnix timestamp, in seconds, the video was posted; null when createdAt is unknown.All
playCountintegerExact number of views.All
likeCountintegerExact number of likes.All
commentCountintegerExact number of comments.All
shareCountintegerExact number of shares.All
collectCountintegerExact number of times the video was saved.All
repostCountintegerExact number of reposts.All
durationSecondsintegerVideo duration, in seconds.All
ratiostringVideo's resolution label as TikTok reports it, for example 540p.All
definitionstringVideo quality label TikTok served for this record, for example 540p.All
formatstringVideo container format, for example mp4.All
widthintegerVideo width, in pixels.All
heightintegerVideo height, in pixels.All
coverstringURL of the video's static cover image, or null.All
coverDynamicstringURL of the video's animated (looping) cover image, or null.All
subtitlesarrayCaption tracks: objects with language, languageId, downloadLink, format, source, sourceUnabbreviated, version, size, expiresAt.All
textLanguagestringLanguage code TikTok detected for the caption text, or null.All
categoriesarrayContent category labels TikTok assigns to the video; empty array when none are assigned.All
locationCreatedstringTwo-letter region code the video was created in, or null.All
isAdbooleanWhether the video is a paid advertisement.All
isPinnedbooleanWhether the video is pinned to the author's profile.All
isAigcbooleanWhether TikTok labels the video as AI-generated content.All
authorobjectVideo author account snapshot: same fields as the profile type, minus secUid, region, language, nicknameModifiedAt, openFavorite.All
musicobjectSound used in the video: an object with id, title, authorName, isOriginal, duration (seconds), url, and cover.All
hashtagsarrayHashtag names used in the caption, without the # symbol; empty array when none.All
mentionsarrayAccounts mentioned in the caption: an array of objects with userId, username, nickname, secUid, and profileUrl.All
isSlideshowbooleanWhether the post is a photo slideshow rather than a video.All
imageCountnullNumber of images in a slideshow post, or null for a video.All
imagesarrayImage URLs for a slideshow post; empty array for a video.All
isSponsoredbooleanWhether the video is labeled as branded or paid-partnership content.All

profile records

One record describes a single TikTok account. Billed as profile. 23 fields. TikTok profiles: every field, an example record and the options

TikTok data pricing

You pay once for each record you receive, at the price of the event it carries. A request that returns nothing costs nothing.

EventPer 1,000 recordsPer record
profile$3.30$0.00330
video-detail$3.30$0.00330

Freshness and limits

  • Records are collected when you send the request. Each one carries collectedAt, the UTC time it was read.
  • POST /records/tiktok returns up to 500 records in one response. Ask for more and it answers 413; send the same body to POST /jobs/tiktok instead.
  • A request without maxItems returns up to 100 records.
  • Your key's rate limit and quotas apply to every source.

Next steps