# TikTok API

> TikTok returns creator profiles, public videos, and video engagement data as a workflow and API.

TikTok returns public creator profiles and account totals from a username or profile link. It lists recent public videos from a username or profile link, optionally with a maximum result count. It returns details and engagement statistics for one public video from its link.

- Page: https://fous.com/tools/tiktok
- Handle: `@tiktok`
- Category: [Social](https://fous.com/tools/category/social)
- Source website: https://tiktok.com
- Last verified: Sep 29, 2026

## Methods

### Get profile

Operation `get_profile`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a TikTok creator’s public profile and totals from their username or profile link. Profiles unavailable to public visitors cannot be returned.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `username` | string | yes | `"nasa"` | Creator username with or without @, or a TikTok profile link; for example, nasa. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "username"
  ],
  "properties": {
    "username": {
      "type": "string",
      "description": "Creator username with or without @, or a TikTok profile link; for example, nasa.",
      "examples": [
        "nasa",
        "@tiktok",
        "https://www.tiktok.com/@duolingo"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "username": "nasa"
    },
    {
      "username": "@tiktok"
    },
    {
      "username": "https://www.tiktok.com/@duolingo"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `bio` | string | `"Making the seemingly impossible, possible.✨"` | The creator’s biography. |
| `videos` | integer | `49` | Number of videos. |
| `private` | boolean | `false` | Whether this account is private. |
| `user_id` | string | `"7664638705177150477"` | TikTok’s internal user ID. |
| `bio_link` | string or null | `"https://Duolingo.com"` | The link listed in the profile biography, if any. |
| `username` | string | `"nasa"` | The creator’s TikTok username. |
| `verified` | boolean | `true` | Whether TikTok marks this account verified. |
| `followers` | integer | `1860845` | Number of followers. |
| `following` | integer | `23` | Number of accounts followed. |
| `total_likes` | integer | `9749576` | Total likes received. |
| `display_name` | string | `"NASA"` | The creator’s display name. |
| `profile_link` | string | `"https://www.tiktok.com/@nasa"` | Link to the TikTok profile. |
| `profile_picture_link` | string or null | `"https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212a59c09a008bf50f487d54d1f~tplv-tiktokx-cropcent` | Link to the profile picture, if present. |

**Example input**

```json
{
  "username": "nasa"
}
```

**Example output**

```json
{
  "bio": "Making the seemingly impossible, possible.✨",
  "videos": 49,
  "private": false,
  "user_id": "7664638705177150477",
  "bio_link": null,
  "username": "nasa",
  "verified": true,
  "followers": 1860845,
  "following": 23,
  "total_likes": 9749576,
  "display_name": "NASA",
  "profile_link": "https://www.tiktok.com/@nasa",
  "profile_picture_link": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212a59c09a008bf50f487d54d1f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=31dcf456&x-expires=1790809200&x-signature…"
}
```

### Get video

Operation `get_video`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get details and engagement statistics for one public TikTok video from its link, including short links. Private, removed, or unavailable videos cannot be returned; saves are not shown on public embeds and are returned as null.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `video` | string | yes | `"https://www.tiktok.com/@scout2015/video/6718335390845095173"` | Link to a public TikTok video, including a vm.tiktok.com short link. Example: https://www.tiktok.com/@scout2015/video/6718335390845095173 |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "video"
  ],
  "properties": {
    "video": {
      "type": "string",
      "description": "Link to a public TikTok video, including a vm.tiktok.com short link. Example: https://www.tiktok.com/@scout2015/video/6718335390845095173",
      "examples": [
        "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "https://vm.tiktok.com/ZMkyTWLpV/"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "video": "https://www.tiktok.com/@scout2015/video/6718335390845095173"
    },
    {
      "video": "https://vm.tiktok.com/ZMkyTWLpV/"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `likes` | integer | `35200` | Number of likes. |
| `saves` | integer or null |  | Number of saves, when publicly available; otherwise null. |
| `views` | integer | `159400` | Number of views. |
| `length` | string | `"0:10"` | Video length as minutes and seconds, for example 1:02. |
| `shares` | integer | `1494` | Number of shares. |
| `caption` | string | `"Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic"` | Caption of the video. |
| `comments` | integer | `5717` | Number of comments. |
| `hashtags` | array |  | Hashtags without the # symbol. |
| `video_id` | string | `"6718335390845095173"` | TikTok video ID. |
| `sound_name` | string or null | `"original sound"` | Name of the sound. |
| `video_link` | string | `"https://www.tiktok.com/@scout2015/video/6718335390845095173"` | Link to the video page. |
| `sound_artist` | string or null | `"tiff"` | Artist or creator of the sound. |
| `length_seconds` | integer | `10` | Video length in seconds. |
| `cover_image_link` | string or null | `"https://p16-common-sign.tiktokcdn-us.com/tos-maliva-p-0068/2367c7d45cf54a1397abd0e72bf22eac~tplv-tiktokx-origin.image?d` | Link to the video cover image. |
| `creator_username` | string | `"scout2015"` | TikTok username of the creator. |
| `posted_date_time` | string | `"2019-07-27T13:32:38+00:00"` | Video posting time in ISO 8601 with a UTC offset. |
| `creator_display_name` | string or null | `"Scout, Suki & Stella"` | Display name of the creator. |

**Example input**

```json
{
  "video": "https://www.tiktok.com/@scout2015/video/6718335390845095173"
}
```

**Example output**

```json
{
  "likes": 35200,
  "saves": null,
  "views": 159400,
  "length": "0:10",
  "shares": 1494,
  "caption": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
  "comments": 5717,
  "hashtags": [
    "foryoupage",
    "petsoftiktok",
    "aesthetic"
  ],
  "video_id": "6718335390845095173",
  "sound_name": "original sound",
  "video_link": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
  "sound_artist": "tiff",
  "length_seconds": 10,
  "cover_image_link": "https://p16-common-sign.tiktokcdn-us.com/tos-maliva-p-0068/2367c7d45cf54a1397abd0e72bf22eac~tplv-tiktokx-origin.image?dr=9636&x-expires=1790816400&x-signature=qYd%2FRjR92vjF%2B8DGtbIujlMsAao%3D&t=4d5b…",
  "creator_username": "scout2015",
  "posted_date_time": "2019-07-27T13:32:38+00:00",
  "creator_display_name": "Scout, Suki & Stella"
}
```

### List creator videos

Operation `list_creator_videos`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

List a creator’s recent public TikTok videos, pinned first. Private or empty accounts return an empty list; a temporarily unavailable feed may return fewer videos than requested.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `username` | string | yes | `"@tiktok"` | Creator name with or without @, or a profile link. Example: nasa. |
| `max_results` | integer | no | `5` | Maximum number of videos to return. Example: 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "username"
  ],
  "properties": {
    "username": {
      "type": "string",
      "description": "Creator name with or without @, or a profile link. Example: nasa.",
      "examples": [
        "@tiktok",
        "https://www.tiktok.com/@nasa",
        "tiktok"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum number of videos to return. Example: 20.",
      "x-fous-developer": true,
      "examples": [
        5,
        2,
        20
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "username": "@tiktok",
      "max_results": 5
    },
    {
      "username": "https://www.tiktok.com/@nasa",
      "max_results": 2
    },
    {
      "username": "tiktok",
      "max_results": 20
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `videos` | array |  | Public videos, pinned first and then newest first. |
| `videos[].likes` | integer or null | `11800` | Number of likes. |
| `videos[].views` | integer or null | `295200` | Number of views. |
| `videos[].length` | string or null | `"1:07"` | Length as minutes and seconds. |
| `videos[].shares` | integer or null | `1392` | Number of shares. |
| `videos[].caption` | string | `"You showed us what it means to be a Pop Girl this summer 🎶 #SongsofTheSummer2026 "` | Video caption. |
| `videos[].comments` | integer or null | `1371` | Number of comments. |
| `videos[].video_id` | string | `"7681309378095353118"` | TikTok video ID. |
| `videos[].is_pinned` | boolean | `true` | Whether the creator pinned this video. |
| `videos[].posted_at` | string or null | `"2026-09-03T14:03:39+00:00"` | Video posting time in ISO 8601 with offset. |
| `videos[].video_url` | string | `"https://www.tiktok.com/@tiktok/video/7681309378095353118"` | Video page link. |
| `videos[].length_seconds` | integer or null | `67` | Video length in seconds. |
| `videos[].cover_image_url` | string or null | `"https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/ocj1xbAwQIPdTfAIvfVIlGHEMgzBqrAeAAwLJj~tplv-tiktokx-ori` | Cover image link. |

**Example input**

```json
{
  "username": "@tiktok",
  "max_results": 5
}
```

**Example output**

```json
{
  "videos": [
    {
      "likes": 11800,
      "views": 295200,
      "length": "1:07",
      "shares": 1392,
      "caption": "You showed us what it means to be a Pop Girl this summer 🎶 #SongsofTheSummer2026 ",
      "comments": 1371,
      "video_id": "7681309378095353118",
      "is_pinned": true,
      "posted_at": "2026-09-03T14:03:39+00:00",
      "video_url": "https://www.tiktok.com/@tiktok/video/7681309378095353118",
      "length_seconds": 67,
      "cover_image_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/ocj1xbAwQIPdTfAIvfVIlGHEMgzBqrAeAAwLJj~tplv-tiktokx-origin.image?dr=9636&x-expires=1790816400&x-signature=JoYouoUr4okJNGyPq7I76ac8KoA%3D…"
    },
    {
      "likes": 60600,
      "views": 541200,
      "length": "0:59",
      "shares": 4424,
      "caption": "You made this the summer of K-Pop on TikTok 🫰 #SongsofTheSummer2026",
      "comments": 3885,
      "video_id": "7680996287877008670",
      "is_pinned": true,
      "posted_at": "2026-09-02T17:48:58+00:00",
      "video_url": "https://www.tiktok.com/@tiktok/video/7680996287877008670",
      "length_seconds": 59,
      "cover_image_url": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/osUEAGqIYsRDcCiYAIVYGfEkFEARCAmljcePAE~tplv-tiktokx-origin.image?dr=9636&x-expires=1790816400&x-signature=Hz%2FTmNh3afiufpe74O2kpTCBxR8%…"
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@tiktok",
  "visibility": "public",
  "operation": "get_profile",
  "version": 1,
  "input": {
    "username": "nasa"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@tiktok\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_profile\",\n  \"version\": 1,\n  \"input\": {\n    \"username\": \"nasa\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@tiktok",
  "visibility": "public",
  "operation": "get_profile",
  "version": 1,
  "input": {
    "username": "nasa"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/tiktok`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_profile`: Get profile. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_video`: Get video. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `list_creator_videos`: List creator videos. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-tiktok https://api.fous.com/mcp/tools/tiktok --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Review creator profiles and follower totals.
- Compare public video views, likes, comments, and shares.
- Track recent videos from selected creators.
- Check a public video's caption, hashtags, and sound details.
- Identify pinned videos in a creator's recent posts.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this TikTok tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a TikTok account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from tiktok.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What are a creator's profile details and follower totals?

Get profile returns public profile details, including follower and following counts, video totals, total likes, and verification status.

### Which recent public videos has a creator posted?

List creator videos returns recent public videos, with pinned videos first and then newest first.

### How many views, likes, and comments does a video have?

Get video returns public video details and engagement statistics, including views, likes, comments, and shares.

## Related

- [Social Blade API](https://fous.com/tools/social-blade.md): Social Blade provides public creator totals and grades, YouTube 30-day growth and 14-day history, TikTok 30-day changes and up to 14-day history, and Instagram totals without public daily history or 30-day follower change.
- [YouTube API](https://fous.com/tools/youtube.md): YouTube returns public video, caption, comment and channel details, company channels, and the latest weekly Top Songs chart; inferred dates and some counts may be approximate.
- [Instagram API](https://fous.com/tools/instagram.md): Instagram provides public photos, videos, profiles, exact headline counts, bio links, and profile pictures, plus recent public posts and reels; some profiles or posts require login, and view counts may be unavailable.
- [Vimeo API](https://fous.com/tools/vimeo.md): Watch and share videos on Vimeo.
- [Threads API](https://fous.com/tools/threads.md): Threads provides public profiles and posts, including recent posts, engagement and replies; private or login-only content is excluded, and replies may be limited to 10.
- [Pinterest API](https://fous.com/tools/pinterest.md): Pinterest helps people discover and save visual ideas, returning public search results from the first page and visible profile boards, with monthly views only when shown.
- [X API](https://fous.com/tools/x.md): X returns public profile details and public posts with author, media, and engagement; deleted, protected, or unavailable posts cannot be retrieved.
- [Mastodon API](https://fous.com/tools/mastodon.md): Mastodon provides public profiles and recent public posts, including hashtag posts, but excludes private and unlisted posts and may limit visibility to accounts known to mastodon.social or a selected server.
- [All Social tools](https://fous.com/tools/category/social)
