TikTok Search photos API
Search TikTok for photo-mode (slideshow) posts by keyword, with every image in each post plus view, like and comment counts. tiktok.search_keyword returns videos and drops these.
Try it
Make your first request
{
"data": {
"nextCursor": "example",
"posts": [
{
"author": "Alex Rivera",
"authorFollowers": 12500,
"authorName": "Alex Rivera",
"authorSecUid": "Alex Rivera",
"authorVerified": true,
"caption": "A short example description of this item.",
"comments": 12500,
"createdUtc": 12.5,
"hashtags": [
"a1b2c3d4"
],
"id": "a1b2c3d4",
"images": [
{
"height": 42,
"image": "https://example.com/image.jpg",
"width": 1024
}
],
"likes": 12500,
"saves": 42,
"shares": 13,
"soundAuthor": "Alex Rivera",
"soundClipId": "a1b2c3d4",
"soundTitle": "Example title",
"title": "Example title",
"views": 12500
}
]
},
"found": true
}interface TiktokSearchPhotosResponse {
data: {
nextCursor: string | null;
posts: {
author: string;
authorFollowers?: number;
authorName?: string;
authorSecUid?: string;
authorVerified?: boolean;
caption: string;
comments: number;
createdUtc: number;
hashtags?: string[];
id: string;
images?: {
height?: number;
image: string;
width?: number;
}[];
likes: number;
saves?: number;
shares: number;
soundAuthor?: string;
soundClipId?: string;
soundTitle?: string;
title?: string;
views: number;
}[];
} | null;
found: boolean;
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
Request, response, and price
Last verified 2026-09-16 · uptime and latency measured over 30dcurl -X POST https://api.getanyapi.com/v1/run/tiktok.search_photos \
-H "Authorization: Bearer $ANYAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"latte art"}'| Field | Type | Example value |
|---|---|---|
| Request body | ||
| query | string | "latte art"Search keyword. |
| cursor | string | Pagination cursor from a previous response's nextCursor. |
| limit | integer | Maximum items to return in one page. |
| Response | ||
| data | object | |
| data.nextCursor | string | Opaque cursor for the next page, or null when there are no more. Pass it back as cursor to continue. |
| data.posts | object[] | Photo-mode posts matching the keyword. |
| data.posts[].author | string | Handle of the account that posted the video, without the leading @. Populated whenever the provider has data for the entity. |
| data.posts[].authorFollowers | integer | The author's follower count at the time of the request. TikTok rounds this for large accounts. |
| data.posts[].authorName | string | The author's display name, which is not the handle and can contain any characters. |
| data.posts[].authorSecUid | string | The author's TikTok sec_uid. Pass it straight to tiktok.profile_reposts or tiktok.profile_playlists to pivot to that creator without a tiktok.profile lookup. |
| data.posts[].authorVerified | boolean | |
| data.posts[].caption | string | Populated whenever the provider has data for the entity. |
| data.posts[].comments | integer | |
| data.posts[].createdUtc | number | UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. Populated whenever the provider has data for the entity. |
| data.posts[].hashtags | string[] | Hashtags carried in the caption, without the leading #. Empty when the post uses none; @-mentions are excluded. |
| data.posts[].id | string | TikTok video id. Pass it to tiktok.video as id for the full record. Populated whenever the provider has data for the entity. |
| data.posts[].images | object[] | The slideshow's images in order. |
| data.posts[].images[].height | integer | |
| data.posts[].images[].image | string | Image URL. A signed, short-lived TikTok CDN URL - the query params are load-bearing, so keep the URL intact. Populated whenever the provider has data for the entity. |
| data.posts[].images[].width | integer | |
| data.posts[].likes | integer | |
| data.posts[].saves | integer | |
| data.posts[].shares | integer | |
| data.posts[].soundAuthor | string | Credited author of the sound. |
| data.posts[].soundClipId | string | Id of the sound the post uses. Pass it to tiktok.song or tiktok.song_videos as clipId. |
| data.posts[].soundTitle | string | Name of the sound. "original sound" means the creator's own audio rather than a licensed track. |
| data.posts[].title | string | The slideshow's own title, which TikTok stores separately from the caption. Absent when the creator set none. |
| data.posts[].views | integer | |
| found | boolean | |
| Price | ||
| Price per request | USD | $0.0012 |
| Price /1k req | USD | $1.20 |
FAQ
About the TikTok Search photos API
The AnyAPI TikTok Search photos API returns TikTok search photos data as normalized JSON from one POST call to /v1/run/tiktok.search_photos. Search TikTok for photo-mode (slideshow) posts by keyword, with every image in each post plus view, like and comment counts. tiktok.search_keyword returns videos and drops these. AnyAPI returns one normalized schema whichever source serves it. It costs from $1.20 per 1,000 requests, in US dollars with no subscription and no monthly minimum.