/v1/call/tiktok.product_searchPreviewTikTok Shop product search API
Only on TikTok.
The TikTok Shop product search API searches the products of TikTok Shop in the United States by terms: title, current and original price, rating, units sold, shop. One call costs 2 credits ($0.004 to $0.0067 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.
Last updated:
Request and response
curl https://api.socialtoai.com/v1/call/tiktok.product_search \ -H "Authorization: Bearer $SOCIALTOAI_KEY" \ -H "Content-Type: application/json" \ -d '{ "query": "yoga mat" }'import osimport requestsresponse = requests.post( "https://api.socialtoai.com/v1/call/tiktok.product_search", headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"}, json={ "query": "yoga mat", },)print(response.json())# Connected over MCP? Ask in plain words.Use the TikTok Shop product search interface (tiktok.product_search) with query: yoga mat.# Your AI calls the call tool with:{ "query": "yoga mat"}{ "op": "tiktok.product_search", "platform": "tiktok", "status": "ok", "items": [ { "platform": "tiktok", "id": "…", "ref": "…", "approx": [], "type": "entry", "entry_type": "product", "title": "…", "url": "https://example.com/…", "rank": null, "heat": null, "fields": { "description": null, "price": "18.99", "original_price": "19.99", "currency": "…", "images": ["https://example.com/…"], "rating": 4.6, "sold": 1232, "reviews_count": null, "shop": { "id": "…", "name": "…" } } } ], "unavailable": ["fields.description", "fields.reviews_count"], "page": { "has_more": false }, "cost_credits": 2}- entry_type
- product
- description
null- price
- 18.99
- original_price
- 19.99
- currency
- …
- rating
- 4.6
- sold
- 1232
Names and text were removed from the sample; the numbers are as recorded.
1 parameter.
All required.
Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| query | string | Required | — | Search terms |
The fields of each item.
What TikTok cannot give is marked.
| Field | Type | Meaning |
|---|---|---|
| items[].title | string | The entry's title or name. |
| items[].url | string | A link that opens it; null where the platform's list has none. |
| items[].rank | integer | Position on a board, from 1. |
| items[].heat | integer | The platform's heat score. |
| items[].fields.description | stringalways null | The product description. |
| items[].fields.price | string | The current price, as a decimal string in fields.currency. |
| items[].fields.original_price | string | The price before discount. |
| items[].fields.currency | string | The currency of the prices. |
| items[].fields.images | string[] | Image addresses. |
| items[].fields.rating | number | The rating. |
| items[].fields.sold | integer | Units sold. |
| items[].fields.reviews_count | integeralways null | How many reviews it has. |
| items[].fields.shop.id | string | The shop's ID. |
| items[].fields.shop.name | string | The shop's name. |
nullFields TikTok cannot giveRead null as “TikTok did not give this”, not as zero. These are always null on this call:
fields.descriptionThe product description.fields.reviews_countHow many reviews it has.
Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format
What to expect.
1 call per second per key, 5 after a purchase; going over is not charged. Rate limits
A failed call costs 0 credits and is never retried on its own. Error codes
Once connected over MCP, these questions use it.
Search the products of TikTok Shop in the United States by terms: yoga mat.
2 creditscall {"op":"tiktok.product_search","query":"yoga mat"}
The interface of the same name on other platforms.
All platforms and prices/v1/call/tiktok.product_search{ "query": "yoga mat" }2 creditsper call