> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/tiktok/profiles-handle-videos>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/tiktok/profiles-handle-videos.mdx>

---

# TikTok profile videos API

List public uploads for a TikTok handle as structured video rows — captions, stats, media URLs, and cursor pagination in the shared Social Fetch envelope.

`GET /v1/tiktok/profiles/{handle}/videos` takes a TikTok handle (with or without a leading `@`) and returns `data.videos` plus `data.page` (`hasMore`, `nextCursor`). Each row carries id, caption, createdAt, url, thumbnailUrl, durationMs, pinned, isAd, engagement stats, and download-related media URLs. Optional query params: `sortBy` (`latest` or `popular`), `cursor`, `userId` (when you already have the numeric id), `region`, `trim` for a smaller payload, `includePinned=false` to leave out pinned videos, and `hostMedia` for SocialFetch-hosted copies.

`thumbnailUrl` and `media.download*` URLs are source-platform CDN links when TikTok exposes them. They can expire or fail outside the original retrieval context and are not SocialFetch-hosted assets. For SocialFetch-hosted copies on this list page, pass `hostMedia=true` (up to 24 assets / 90-day retention; +2 credits per successfully stored asset; prefers watermark-free video when present).

`data.lookupStatus` says what was found: `found`, `private` or `not_found`. Private and missing accounts always come back with no videos; `found` with an empty `data.videos` array means no uploads on this page (for example none in the selected sort window). Bill from `meta.creditsCharged`.

## Request

- **Endpoint:** `GET /v1/tiktok/profiles/{handle}/videos`
- **Credits:** 1 credit
+2 credits per hosted file (hostMedia), max 24 files
Max 49 credits
Failed requests are free
- **Input:** by handle
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/tiktok/profiles/handle/videos/get)
- **Platform page:** [/platforms/tiktok](https://www.socialfetch.dev/platforms/tiktok)

## FAQ

### How do I list TikTok videos for a profile via API?

Call `GET /v1/tiktok/profiles/{handle}/videos` with your Social Fetch API key (`x-api-key`). Pass the TikTok username as the path parameter, with or without a leading `@`. Read `data.videos` and `data.page` in the JSON response.

### How much does the TikTok profile videos API cost?

1 credit per successful list page by default. With `hostMedia`, +2 credits per hosted asset (up to 24 assets, 49 credits max). Always bill from `meta.creditsCharged` on the response.

### What does each TikTok profile video row include?

id, caption, createdAt, url, thumbnailUrl, durationMs, pinned, isAd, stats (views, likes, comments, shares, saves), and media download URLs. Optional `details` may carry extra TikTok-native fields that are not duplicated at the top level.

### How does pagination work on TikTok profile videos?

When `data.page.hasMore` is true, pass `data.page.nextCursor` as the `cursor` query param on the next request. Keep the same handle and filters across pages.

### Can I sort TikTok profile videos by latest or popular?

Yes. Pass optional `sortBy=latest` or `sortBy=popular`. When you omit `sortBy`, the feed uses the default ordering for that request.

### Why is data.videos empty when the TikTok handle looks valid?

Check `data.lookupStatus`. `private` means the account is private, so TikTok shows no videos; `not_found` means there is no such account. With `found`, an empty array means the account has no videos on this page, for example none in the selected sort window.

### Do I need TikTok OAuth to list a profile's videos?

No. You authenticate to Social Fetch with an API key. The route reads public profile feed data; it does not act on behalf of a logged-in TikTok user.

### How is this different from GET /v1/tiktok/videos (single video)?

This route pages a creator's feed by handle. Single-video detail is `GET /v1/tiktok/videos` with a video URL. Use the list route to discover ids, then the single-video or transcript routes when you need one clip in depth.
