PeekPanda docs
Search organic content
Search the copied public organic corpus with bounded filters.
Download Markdown ↓GET/v1/organicAuth
Bearer API credential or OAuth access tokenScope context:readMCP search_organic_contentRequest
Send filters as query parameters. This read serves stored corpus rows and does not scrape TikTok.
curl --get 'https://api.peekpanda.com/v1/organic' \
--header "Authorization: Bearer $PEEKPANDA_TOKEN" \
--header 'x-genviral-tenancy: personal' \
--data-urlencode 'q=meal planner' \
--data-urlencode 'platform=tiktok' \
--data-urlencode 'limit=12'Response
posts is a page of organic corpus rows. product_app is null when no catalogue app was matched; product_app.matchedBy = product_name means a conservative inferred association, not verified ownership. slide_texts is null on list results. relevance is always null. next_offset is null on the last page or when the offset cap is reached.
{
"posts": [
{
"id": "organic-post-example",
"platform": "tiktok",
"content_type": "slideshow",
"link": "https://www.tiktok.com/@example/video/1",
"category": "Food & Cooking",
"business_type": "app",
"product_name": "Example Meal Planner",
"product_website": "https://example.com",
"product_app": {
"platform": "ios",
"storeId": "6480417616",
"appName": "Example Meal Planner",
"iconUrl": "https://is1-ssl.mzstatic.com/example-meal-planner.jpg",
"matchedBy": "product_name"
},
"account": "example",
"caption": "five dinners in ten minutes",
"hashtags": [
"#cooking",
"#mealprep"
],
"date_published": "2026-04-02",
"metrics": {
"views": 412000,
"likes": 31000,
"comments": 480,
"shares": 210,
"bookmarks": 9400
},
"slide_count": 7,
"preview_image_url": "https://cdn.example.com/preview.jpg",
"image_urls": [
"https://cdn.example.com/preview.jpg"
],
"video_url": null,
"hook_text": "I stopped meal planning and did this instead",
"hook_analysis": {
"content_class": "listicle_hook",
"format_template": "I stopped X and did Y",
"psychology_tags": [
"curiosity",
"relief"
]
},
"search_summary": "A slideshow about weeknight cooking for a meal-planning app.",
"niche": "meal planning",
"topics": [
"cooking",
"meal prep"
],
"search_keywords": [
"dinner ideas",
"meal planner app"
],
"slide_texts": null,
"relevance": null
}
],
"total": 1,
"has_more": false,
"next_offset": null
}
Parameters
NameInTypeRequiredDescription
qquerystring, 1–200NoFree-text search.categoryqueryHealth & Wellness | Personal Development | Relationships & Lifestyle | Arts, Hobbies & Entertainment | Education & Knowledge | Fashion & Beauty | Spirituality & Beliefs | Business & Finance | Travel | Food & Cooking | Home & Design | Fitness | Technology | Gaming & Esports | Productivity & OrganizationNoExact organic corpus category.business_typequeryapp | ecommerce | saas | service | affiliate | other | creator | game | book | unclassifiedNoExact business-type filter.platformquerytiktok | instagram | threadsNoOrganic platform filter.content_typequeryslideshow | video | mixedNoContent-type filter.accountquerystring, 1–200NoCreator account filter.productquerystring, 1–200NoProduct-name filter.max_slidesqueryinteger, 1–100NoMaximum slide count.published_sincequerydate, YYYY-MM-DDNoInclusive calendar start date.published_untilquerydate, YYYY-MM-DDNoInclusive calendar end date; must be at or after published_since.sortqueryrelevance | newest | latest_posted | most_views | most_likes | most_comments | most_slidesNoDefaults to relevance when q is set and newest otherwise.limitqueryinteger, 1–40NoPage size; defaults to 12. offset + limit cannot exceed 1000.offsetqueryinteger, 0–960NoResult offset; defaults to 0.Known errors
400invalid_request for an invalid filter, identity or limit.401authentication_required for a missing or invalid credential.402subscription_required when access is not entitled.403authorization_required for a missing scope or unavailable preview access.404not_found when the record is outside the accessible catalogue.429rate_limited; honor Retry-After when present.Source
Copied public organic corpus with original source IDs. Not a live TikTok scrape on GET.
Refresh
The corpus copy is a separate import. This GET is a stored read.