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.
$1.20/1k req, pay per request, no subscription.
{"id": "7483155938467123902","caption": "swipe to see the rosetta pour fail, still drank it #latteart","author": "brewwithnina","createdUtc": 1758844800,"views": 612000,"likes": 84200,"comments": 1340,"shares": 5620,... 15 more fields}
Pricing
TikTok Search photos API pricing
Try it
Get TikTok search photos in one request
This sample shows 26 of 31 fields. See every field
{
"found": true,
"data": {
"nextCursor": "MTc1ODkzNDgwMA",
"posts": [
{
"id": "7483155938467123902",
"caption": "swipe to see the rosetta pour fail, still drank it #latteart",
"author": "brewwithnina",
"createdUtc": 1758844800,
"views": 612000,
"likes": 84200,
"comments": 1340,
"shares": 5620,
"saves": 22800,
"images": [
{
"image": "https://p16-sign-va.tiktokcdn.com/tos-maliva-p-0068/latte-photo1-clean~tplv-obj.jpeg?x-signature=Aq1wE2r",
"width": 1080,
"height": 1440
},
{
"image": "https://p16-sign-va.tiktokcdn.com/tos-maliva-p-0068/latte-photo2-clean~tplv-obj.jpeg?x-signature=Bs2xF3t",
"width": 1080,
"height": 1440
}
],
"authorName": "Nina Brewer",
"authorSecUid": "MS4wLjABAAAAuz4NsAfW0bZyQ5rT7sUvV8wX9yZ0aB1cD2eF3gH4iJ5kL6mN7oP8q",
"authorVerified": false,
"authorFollowers": 214000,
"soundClipId": "7483150000000000021",
"soundTitle": "coffee shop jazz",
"soundAuthor": "Milo Fenwick",
"title": "rosetta attempt number 12",
"hashtags": [
"latteart",
"coffee"
]
},
{
"id": "7482940213904456783",
"caption": "three pours, three different results",
"author": "steamandfoam",
"createdUtc": 1758758400,
"views": 298000,
"likes": 31200,
"comments": 610,
"shares": 1820,
"saves": 8900,
"images": [
{
"image": "https://p16-sign-va.tiktokcdn.com/tos-maliva-p-0068/latte-photo3-clean~tplv-obj.jpeg?x-signature=Ct3yG4u",
"width": 1080,
"height": 1350
}
],
"authorName": "Owen Castellano",
"authorVerified": true,
"authorFollowers": 76500,
"hashtags": [
"barista",
"latteart"
]
},
{
"id": "7482811122938467893",
"caption": "my first tulip pattern that actually looked like a tulip",
"author": "pourover.pip",
"createdUtc": 1758672000,
"views": 145000,
"likes": 16800,
"comments": 290,
"shares": 740,
"saves": 3100,
"images": [
{
"image": "https://p16-sign-va.tiktokcdn.com/tos-maliva-p-0068/latte-photo4-clean~tplv-obj.jpeg?x-signature=Du4zH5v",
"width": 1080,
"height": 1440
}
],
"authorName": "Pip Ostrander",
"authorVerified": false,
"authorFollowers": 19200
}
]
}
}Full parameter and response reference - every field, type, and example for this endpoint.
Reference
One request, one response shape.
Every field you send and every field you get back, each with a real example.
Last verified 2026-10-31 · uptime and latency measured over 30d
Request body
JSON, posted to this endpoint.
- querystring
latte art
Search keyword.
- cursorstring
Pagination cursor from a previous response's nextCursor.
- limitinteger
3
Maximum items to return in one page.
Response
JSON, one example value per field.
- nextCursorstring
MTc1ODkzNDgwMA
Opaque cursor for the next page, or null when there are no more. Pass it back as cursor to continue.
Photo-mode posts matching the keyword.
- authorstring
brewwithnina
Handle of the account that posted the video, without the leading @. Populated whenever the provider has data for the entity.
- authorFollowersinteger
214000
The author's follower count at the time of the request. TikTok rounds this for large accounts.
- authorImagestring
Author's avatar image URL. Signed and short-lived, so the query string is load-bearing and kept intact. Populated whenever the provider has data for the entity.
- authorNamestring
Nina Brewer
The author's display name, which is not the handle and can contain any characters.
- authorSecUidstring
MS4wLjABAAAAuz4NsAfW0bZyQ5rT7sUvV8wX9yZ0aB1cD2eF3gH4iJ5kL6mN7oP8q
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.
- authorUserIdstring
Author's numeric TikTok user id. Populated whenever the provider has data for the entity.
- authorVerifiedboolean
false
- captionstring
swipe to see the rosetta pour fail, still drank it #latteart
Populated whenever the provider has data for the entity.
- commentsinteger
1340
- createdUtcnumber
1758844800
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.
- hashtagsstring[]
Hashtags carried in the caption, without the leading #. Empty when the post uses none; @-mentions are excluded.
- idstring
7483155938467123902
TikTok video id. Pass it to tiktok.video as id for the full record. Populated whenever the provider has data for the entity.
- likesinteger
84200
- locationNamestring
Name of the place the post is tagged at, or null when it has no location tag.
- savesinteger
22800
- sharesinteger
5620
- soundAuthorstring
Milo Fenwick
Credited author of the sound.
- soundClipIdstring
7483150000000000021
Id of the sound the post uses. Pass it to tiktok.song or tiktok.song_videos as clipId.
- soundTitlestring
coffee shop jazz
Name of the sound. "original sound" means the creator's own audio rather than a licensed track.
- titlestring
rosetta attempt number 12
The slideshow's own title, which TikTok stores separately from the caption. Absent when the creator set none.
- urlstring
Canonical TikTok URL of the photo post. Populated whenever the provider has data for the entity.
- viewsinteger
612000
The slideshow's images in order.
- heightinteger
1440
- imagestring
https://p16-sign-va.tiktokcdn.com/tos-maliva-p-0068/latte-photo1-clean~tplv-obj.jpeg?x-signature=Aq1wE2r
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.
- widthinteger
1080
- foundboolean
true
- reason"not_found"
Present only when `found` is false, and says why there is no result. `not_found`: the source states the target does not exist, or returned nothing for it. A `found: false` answer is a successful call, not an error, and `costUsd` is what it actually cost.
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. Over the last 30 days, 86.2% of TikTok search photos calls through AnyAPI succeeded, with a median response time of 1.3 seconds across 311 measured calls.