TikTok Search API reference
Public TikTok videos matching a keyword, with a cursor. Takes a keyword, returns a cursor page, 1 credit a call.
This named API keeps TikTok fields in TikTok's own vocabulary. For a higher-level product page, see TikTok Search API.
Endpoint
GET /v1/tiktok/search
Authorization: Bearer sv_live_... `POST` is also accepted with the same parameters in the request body. Send the key in the `Authorization` header, never in the query string.
Parameters
| Name | Type | Required | Notes |
|---|---|---|---|
q | string | yes | Search term or hashtag, up to 100 characters. Trimmed and lowercased before the lookup. |
cursor | string | no | Cursor returned by the previous page. |
limit | integer | no | Maximum items to return, up to 50. |
Sample Request
This is a copyable request shape. Replace the sample values with the public TikTok target or parameters your workflow uses.
curl -G 'https://api.sourcevine.io/v1/tiktok/search' \
-H 'Authorization: Bearer sv_live_...' \
--data-urlencode 'q=latte art' \
--data-urlencode 'limit=20' Sample Response
A response this API returned, against the target above. Your values depend on the resource you ask about and when you ask.
{
"data": {
"items": [
{
"url": "https://www.tiktok.com/@tannercolson/video/7669054888969555230",
"likes": 59778,
"views": 513204,
"cached": false,
"shares": 3657,
"videoId": "7669054888969555230",
"collects": 19674,
"comments": 296,
"fetchedAt": "2026-09-02T06:48:38Z",
"channelLink": "https://www.tiktok.com/@tannercolson",
"channelName": "tannercolson",
"contentType": "video",
"description": "How to Pour Latte Art - Milk Steaming + Pouring",
"publishedAt": "2026-08-01T13:30:19Z",
"cacheAgeSeconds": null,
"sourceTimestamp": null
},
{
"url": "https://www.tiktok.com/@coffee24.studio/video/7670687886089473294",
"likes": 23963,
"views": 436682,
"cached": false,
"shares": 1981,
"videoId": "7670687886089473294",
"collects": 9724,
"comments": 61,
"fetchedAt": "2026-09-02T06:48:38Z",
"channelLink": "https://www.tiktok.com/@coffee24.studio",
"channelName": "coffee24.studio",
"contentType": "video",
"description": "Learn Latte Art: A Beginner’s Guide",
"publishedAt": "2026-08-05T23:06:50Z",
"cacheAgeSeconds": null,
"sourceTimestamp": null
},
{
"url": "https://www.tiktok.com/@baristaswag/video/7636439059925044501",
"likes": 24353,
"views": 585251,
"cached": false,
"shares": 1433,
"videoId": "7636439059925044501",
"collects": 9972,
"comments": 72,
"fetchedAt": "2026-09-02T06:48:38Z",
"channelLink": "https://www.tiktok.com/@baristaswag",
"channelName": "baristaswag",
"contentType": "video",
"description": "If your big tulips don’t fit, you're missing the second step👇 It all comes down to two phases: Phase 1: The Push (First 2-3 Hearts) Your goal is to create a wide base. Push each new heart into the previous one to make the design stretch and wrap. Phase 2: The Stack (Final 2-3 Hearts) Your goal is to build height. Use very small, gentle forward movements to stack layers on top of the base you just created. Save this for your next practice session! What design is giv…",
"publishedAt": "2026-05-05T16:03:45Z",
"cacheAgeSeconds": null,
"sourceTimestamp": null
}
],
"cached": false,
"fetchedAt": null,
"nextCursor": null,
"cacheAgeSeconds": null
},
"success": true,
"available": true
} Fields
| Field | Type | Notes |
|---|---|---|
items | array | A page of public TikTok posts or videos. |
nextCursor | string | null | Pass as cursor to request the next page. |
items[].views | integer | null | Present only where the platform reports it. |
items[].likes | integer | null | Per-item public like count. |
items[].cached | boolean | Matches the page provenance on cached reads. |
fetchedAt | ISO datetime | When Sourcevine read the public page. |
sourceTimestamp | ISO datetime | null | The platform timestamp when it is available. |
cached | boolean | True when this answer repeats an identical request made moments earlier. |
cacheAgeSeconds | integer | Seconds since the reading was taken. |
Availability States
| Status | Charged | Client behavior |
|---|---|---|
available | yes for live reads | Use data. |
not_found | yes | Store the state and stop polling. |
private | yes | Store the state and stop polling. |
unsupported | no | Fix the URL or call the matching API. |
upstream_unavailable | no | Retry later with backoff. |
Unavailable resources return `success: true`, `available: false`, `availability`, and `data: null`. API or authentication failures return `success: false` with an `error` object.
Billing
A call costs 1 credit. A deleted, private or empty resource is charged like any lookup and says so. An unsupported URL or a read we could not complete is not charged. The `X-Credits-Charged` response header is the source of truth for what happened on that request.
Successful responses include `fetchedAt`, the time we read the platform.
What This API Does Not Return
- No contact or bio fields: Bios, email addresses, phone numbers, postal addresses and messenger handles are outside the response contract.
- No private data: Private accounts, restricted content and unavailable resources return typed availability instead of guessed data.
- No comments or downloads: List APIs return recent public post metadata and metrics. They do not return comment bodies, media files or hidden analytics.
Related
- TikTok API hub
- TikTok Search API product page
- Quickstart
- Credits and billing
- TikTok Video Stats API reference
- TikTok Profile API reference
- TikTok Channel Videos API reference
- TikTok Hashtag API reference
Last updated 1 September 2026