# 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/workflows/tiktok
- Handle: `@tiktok`
- Category: [Social](https://fous.com/workflows/category/social)
- Source website: https://tiktok.com
- Last verified: Sep 29, 2026
- Fous is not affiliated with TikTok.

## Methods

### Get profile

Operation `get_profile`, version 1. 1 credit per call.

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 call.

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 call.

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

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_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.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

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=120) 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.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_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);
```

Or describe the data in plain language: send `{"api":"@tiktok","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## 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

### Is Fous affiliated with TikTok?

No. Fous is not affiliated with TikTok. This workflow reads the public tiktok.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. 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; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check 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/workflows/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/workflows/youtube.md): YouTube returns public video, caption, comment, channel and upload details, plus the latest weekly Top Songs chart; inferred dates and some counts may be approximate.
- [Instagram API](https://fous.com/workflows/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/workflows/vimeo.md): Watch and share videos on Vimeo.
- [Threads API](https://fous.com/workflows/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/workflows/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/workflows/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/workflows/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 workflows](https://fous.com/workflows/category/social)
