# SocialCrawl API: prism endpoints # Base URL: https://www.socialcrawl.dev # Auth: x-api-key header # Full docs: https://www.socialcrawl.dev/docs/prism ## GET /v1/prism/lookup Universal post/product URL dispatcher: any post, video, product or repo link → the right detail endpoint's unified response. Credit cost: the resolved endpoint's own price, with no routing surcharge: 1 credit for most social lookups and 5 for the advanced ones (Amazon, LinkedIn). The `resolved.endpoint` field in the response names the endpoint that was charged Parameters: - url (required): Absolute http(s) URL of a single post, video, product or repo. Profile, channel and storefront URLs are NOT accepted: use that platform's own `/profile` endpoint for those. - include (optional, string): CSV of optional flags to forward verbatim to the resolved endpoint (e.g. `trim`). Each member must be an optional param of that endpoint. curl -G "https://www.socialcrawl.dev/v1/prism/lookup" \ --data-urlencode "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/comments Every comment on a post, replies nested, server-paginated to completion. Credit cost: 2-200 (metered): 1 credit per comment page scanned plus 1 per replies call that returned replies. An Instagram post URL is a flat 5 credits whatever `max` you pass, plus 1 per replies call only when you send `replies=true` Parameters: - url (required): Absolute http(s) URL of the post whose comments to harvest. - max (optional, integer): Stop after roughly this many top-level comments (1-5000, default 1000). Whole pages are returned, so the actual count can slightly exceed this. Drives billing and, for `sort=top`, the depth of the ranking scan. - replies (optional, boolean): Nest every reply under the comments that have them (`engagement.replies` above zero), walking each comment's replies pages to the end: up to 100 comments and 10 replies pages per comment per call, 1 credit per replies call that returned replies. Default true on TikTok, YouTube and Facebook. On Instagram it is off unless you send `replies=true`, which adds 1 credit per replies call to the flat 5. A comment a limit or the time budget stopped short is marked `replies_truncated: true` and the response says `completed: false`. Reddit and Hacker News always return their whole nested thread and ignore it. Pair with `replies=false` when you only want the top comments. - cursor (optional, string): Opaque composite cursor from a prior response's `next_cursor` to resume harvesting. - sort (optional, enum: top | recent): `recent` (default: natural order) or `top` (most-liked first, ranked by each comment's like count). With `top`, the response adds `sorted_by: "likes_desc"`. On Instagram, `top` returns the platform's own ranked head (`sorted_by: "popular"`) rather than a re-sort, and that head is finite: use the default `recent` to harvest a whole Instagram thread. - limit (optional, integer): Cap on how many top-level comments to return after sorting/scanning (1-5000, defaults to `max`). Truncates only the returned set, never what was scanned or billed. The response reports `returned`. curl -G "https://www.socialcrawl.dev/v1/prism/comments" \ --data-urlencode "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/profile/comments New comments on a profile's recent posts, in one list, newest first. Credit cost: 2-2428 (metered): each page actually read, at that endpoint's own price: the post list page (1 credit) plus the comment pages of each post that returned a new comment (5 credits a page on Instagram, 1 on Facebook, YouTube, TikTok and X). A post whose comments are all older than `since` costs nothing, so a call that finds no new comment costs only the post list page. With `replies=true`, plus 1 credit per replies call that returned replies. The call holds the most that `posts` and `per_post` can take (251 credits for Instagram's defaults, plus up to 100 replies pages, 300 on Instagram, with `replies=true`) and refunds the rest Parameters: - url (optional, string): The profile, page or channel URL: instagram.com/, facebook.com/, youtube.com/@ or youtube.com/channel/UC..., tiktok.com/@, or x.com/. The platform is read from the URL. A link to one post is refused: use that platform's own comment endpoint for one post. One of `url` or `handle` is required. - platform (optional, enum: instagram | facebook | youtube | tiktok | twitter | x): With `handle`: instagram, facebook, youtube, tiktok or twitter (x is accepted for twitter). Not needed with `url`. - handle (optional, string): The account's handle, with or without @, together with `platform`. On YouTube a channel id (UC...) works too. A pasted profile URL is read like `url`. - posts (optional, integer): How many of the profile's most recent posts to scan (1-25, default 10). A post whose comment count is 0 is skipped and costs nothing. - per_post (optional, integer): The most comments read on each post (1-200, default 50), newest first on Instagram and YouTube. Sets the hold; you pay only for the pages read. - since (optional, string): Only comments published at or after this time: an ISO 8601 timestamp or YYYY-MM-DD (midnight UTC). On Instagram and YouTube each post's walk stops at the first older comment; on Facebook and TikTok the comments are filtered. In a Monitor, `now-3h` (or `now-1d`) is resolved to a timestamp at every run. - replies (optional, boolean): `true` adds each returned comment's replies to the list on Instagram, Facebook, YouTube and TikTok, as rows with `comment.parent_id`, at 1 credit per replies call that returned replies (up to 100 comments and 10 replies pages each per call). Default `false`. - Constraint: one of url, handle (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/profile/comments" \ --data-urlencode "url=https://www.instagram.com/nasa/" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/brand-mentions Brand mention volume time-series, sentiment split, top sources, and recent mentions for one keyword. Credit cost: 50 (override; tier advanced) Parameters: - keyword (required): The brand or term to track. Wrap in quotes for exact-phrase semantics. - date_from (required): Window start (YYYY-MM-DD). Required by the trend leg. - date_to (optional, string): Window end (YYYY-MM-DD). Defaults to the latest crawl. - date_group (optional, enum: day | week | month): Trend bucket size: day (default), week, or month. - page_type (optional, enum: ecommerce | news | blogs | message-boards | organization): Optional surface filter: ecommerce, news, blogs, message-boards, or organization. - include (optional, string): Set `digest` to add an LLM narrative summary leg. - brand_description (optional, string): Optional one-line description of the brand, used to tell it apart from other things with the same name. curl -G "https://www.socialcrawl.dev/v1/prism/brand-mentions" \ --data-urlencode "keyword=socialcrawl" \ --data-urlencode "date_from=2026-06-01" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/demand-signals Consumer-demand nowcast: app-review velocity, web mention slope, Reddit velocity, and commerce review levels, fused into a published demand index. Credit cost: 30 (override; tier advanced) Parameters: - keyword (required): The brand or product to nowcast. Drives the mention, Reddit, and Amazon legs. - google_play_id (optional, string): Google Play package name (e.g. com.spotify.music) for the app-review velocity axis. - app_store_id (optional, string): Apple App Store numeric id for the app-review velocity axis. - signals (optional, string): CSV subset of app_reviews,mentions,reddit,commerce (default all). app_reviews is dropped when no app id is supplied. - amazon_query (optional, string): Override the Amazon product-search term if it differs from the brand. - country (optional, string): Location for the app-review legs (default United States); a 2-letter code is also applied to the Amazon leg. - date_from (optional, string): Window start (YYYY-MM-DD) for the mention-slope leg. Defaults to 30 days ago. - date_to (optional, string): Window end (YYYY-MM-DD). Defaults to today. - depth (optional, integer): Reviews per store for the velocity computation (1-600, default 150). curl -G "https://www.socialcrawl.dev/v1/prism/demand-signals" \ --data-urlencode "keyword=spotify" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/campaign Campaign tracker: pre/during/post volume lift, cross-platform engagement, and ranked top amplifiers for a hashtag or phrase. Credit cost: 35 (override; tier advanced) Parameters: - hashtag (optional, string): The campaign hashtag (with or without #). One of hashtag or phrase is required. - phrase (optional, string): A campaign slogan/phrase instead of a hashtag. One of hashtag or phrase is required. - window_start (optional, string): Campaign launch date (YYYY-MM-DD): the pre/during boundary. Optional; defaults to 30 days ago. - window_end (optional, string): Campaign end date (YYYY-MM-DD): the during/post boundary. Defaults to today. - pre_days (optional, integer): Baseline days before window_start for lift measurement (1-90, default 14). - post_days (optional, integer): Days after window_end for the post window (0-90, default 14; 0 = no post window). - include (optional, string): Set amplifier_dates to date YouTube amplifiers via direct youtube/video calls (undated in fusion). - brand (optional, string): Optional brand the amplifier posts are judged against. Defaults to the hashtag or phrase. - brand_description (optional, string): Optional one-line description of the brand or campaign, used to tell it apart from other things with the same name. - Constraint: one of hashtag, phrase (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/campaign" \ --data-urlencode "hashtag=summergiveaway" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/ai-visibility AI Share-of-Voice / GEO monitoring: prompt set x reruns to per-brand appearance-% per AI engine plus a cited-domain ranking. Credit cost: 2-1605 (metered): 2 credits per probe, where a probe is one prompt run once on one engine, so the charge is `2 x prompts x runs x engines`. On the defaults (both engines, 8 runs) a 5-prompt audit is 160 credits. `include=web_baseline` adds a flat 5. The 1,605 ceiling is the 20-prompt, 20-run, two-engine worst case with the baseline on - `preset=quick` holds far less, and the hold settles down to the probes that actually completed Parameters: - brand (required): The brand whose appearance-% is measured (required). Matched against each answer plus its aliases. - prompts (optional, string): The category prompts to probe, as a JSON array or a pipe-delimited list (1-20). One of prompts or topic is required. - topic (optional, string): A topic probed as a single prompt in v1 (one of prompts or topic is required). - competitors (optional, string): CSV of up to 5 competitors also measured for appearance-% from the same answers. - engines (optional, string): CSV subset of perplexity,grok (default both): the grounded-answer engines probed. - runs (optional, integer): Reruns per (prompt, engine) to measure variance (1-20, default 8). - preset (optional, enum: quick | standard | deep): quick|standard|deep: sets runs and caps prompts for a flat probe budget. - include (optional, string): Set web_baseline to cross-join AI-cited domains against your web top domains. - brand_domains (optional, string): CSV of your own domains so the citation ranking can flag the ones you already rank on. - Constraint: one of topic, prompts (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/ai-visibility" \ --data-urlencode "brand=socialcrawl" \ --data-urlencode "topic=social media data api" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/crisis-postmortem Crisis post-mortem: a who-said-what-first timeline across web, Reddit, Hacker News, and social, with an origin, peak, propagation sequence, and a grounded narrative. Credit cost: 35 (override; tier advanced) Parameters: - brand (required): The brand or entity the crisis is about (required). - window_start (optional, string): Start of the crisis window (YYYY-MM-DD): the earliest point on the timeline. Optional; defaults to 30 days ago. - window_end (optional, string): End of the crisis window (YYYY-MM-DD). Defaults to today. - crisis_terms (optional, string): Optional CSV of up to 5 terms (e.g. recall,defect) that scope the legs to the actual incident. - include (optional, string): narrative (default on) adds the grounded LLM propagation narrative; pass an empty value for the raw timeline only. curl -G "https://www.socialcrawl.dev/v1/prism/crisis-postmortem" \ --data-urlencode "brand=acme" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/crisis-radar Stateless crisis breach check: a z-score on daily mention volume and negative share, with on-breach confirmation and a severity grade. Credit cost: 15-45 (metered): 15 credits for the baseline breach check. `confirm=true` escalates to the full 45-credit investigation. Run the baseline first and escalate only when it reports a breach: that is the whole point of the two-step shape Parameters: - brand (required): The brand to watch. - sensitivity (optional, string): Z-score breach threshold (0.5-6, default 2.0). z>=sensitivity on volume or negative-share fires a breach. - confirm (optional, boolean): true -> on a breach, run the escalation legs and grade severity (+30 credits, charged only when a breach fires). - baseline_days (optional, integer): Rolling-mean window for the z-score (3-30, default 7). - date_to (optional, string): The day being evaluated (YYYY-MM-DD). Defaults to today. - brand_description (optional, string): Optional one-line description of the brand, used to tell it apart from other things with the same name. curl -G "https://www.socialcrawl.dev/v1/prism/crisis-radar" \ --data-urlencode "brand=socialcrawl" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/devtool-pulse Developer-brand health: a devtool's repo dossier + Hacker News reaction + Reddit chatter + dev-blog echo, in one call. Credit cost: 20 (override; tier advanced) Parameters: - query (required): The devtool name to sweep across Hacker News, Reddit, and the dev-blog index (e.g. Bun, Drizzle ORM, tRPC). - repo (optional, string): The repo to dossier: owner/repo or a github.com/{owner}/{repo} URL. Recommended for a precise dossier. - subreddit (optional, string): Optional scope for the Reddit leg (bare name, no r/): switches it to a subreddit search. - include (optional, string): CSV subset of dossier,hn,reddit,blogs (default all). Trims which legs run, not the flat price. - date_from (optional, string): Optional window start (YYYY-MM-DD) applied to the time-bounded legs. - date_to (optional, string): Optional window end (YYYY-MM-DD). curl -G "https://www.socialcrawl.dev/v1/prism/devtool-pulse" \ --data-urlencode "query=Bun" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/leads Ranked feed of public conversations where people seek alternatives to or are switching from a competitor. Credit cost: 50 (override; tier advanced) Parameters: - competitor (required): The competitor/product to mine alternative-seeking conversations for (≤80 chars). - product_category (optional, string): Optional disambiguator appended to the social queries to cut cross-domain noise (e.g. 'project management'). - freshness (optional, string): Recency floor. Nd/Nw/Nm (e.g. 30d) or an ISO date. Default 30d. - include (optional, string): Set `comments` to attach top-thread Reddit comments to the top leads. - limit (optional, integer): Max leads in the fused feed (1-100, default 50). - offer (optional, string): What you sell, in one or two plain sentences (max 300 chars). Used to judge whether each author would plausibly be helped by it (intent.fits_offer). Default: 'alternatives to {competitor}'. curl -G "https://www.socialcrawl.dev/v1/prism/leads" \ --data-urlencode "competitor=notion" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/comment-leads Buyer leads from the comments under the posts a keyword search returns, opening only the posts worth opening. Credit cost: 0-243 (metered): Pay for what is opened: 1 credit a search page, 1 credit a comment page fetched and 1 credit for every started 25 comments labelled. The default request holds 37 and refunds what did not run; judging which posts to open is free Parameters: - query (required): The keyword search to run (max 100 chars). - offer (optional, string): What you sell, in one or two plain sentences (max 300 chars). Used to judge which posts would draw your buyers and whether each commenter would be helped by it. Default: the `query` itself. - platform (optional, enum: tiktok): Platform to search. `tiktok` (default and, for now, only). - posts (optional, integer): How many posts to search (1-90, default 30; 30 posts a search page). - open (optional, integer): The most posts whose comments are fetched (1-20, default 12). - comments_per_post (optional, integer): The most comments read from each opened post (1-200, default 50; 50 comments a page). - include (optional, string): Set `askers` to also return comments that ask a question the offer would answer, marked `kind: 'asker'`. curl -G "https://www.socialcrawl.dev/v1/prism/comment-leads" \ --data-urlencode "query=standing desk setup" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/earned-media A brand's earned-media footprint: news + tech-press + fresh-web clips, deduped and ranked, with an outlet-coverage rollup. Credit cost: 25 (override; tier advanced) Parameters: - brand (required): The brand/company to map earned media for. - competitor (optional, string): Optional competitor for a share-of-coverage gap. - date_from (optional, string): Window start (YYYY-MM-DD). - date_to (optional, string): Window end (YYYY-MM-DD). - min_domain_rank (optional, integer): Drop clips from sites below this domain authority. - include (optional, string): Set `digest` to add an LLM narrative summary. - brand_description (optional, string): Optional one-line description of the brand, used to tell it apart from other things with the same name. curl -G "https://www.socialcrawl.dev/v1/prism/earned-media" \ --data-urlencode "brand=Vercel" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/truthsocial-pulse A Truth Social handle's pulse: profile, recent posts, per-post detail drill, and the news echo, in one call. Credit cost: 20 (override; tier advanced) Parameters: - handle (required): The Truth Social handle (no @). - drill (optional, integer): How many top posts to drill for full detail (0 to skip). - posts (optional, integer): How many recent posts to pull (window cap). - news_query (optional, string): Override the content_analysis news keyword (defaults to the handle/display name). - include (optional, string): CSV subset of posts,news to trim which legs run. - cursor (optional, string): Opaque pagination cursor for the posts leg. curl -G "https://www.socialcrawl.dev/v1/prism/truthsocial-pulse" \ --data-urlencode "handle=realDonaldTrump" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/launch-echo How a launch landed: the Hacker News reaction (top threads + comments), the dev-blog echo, and an optional repo dossier. Credit cost: 20 (override; tier advanced) Parameters: - query (required): The launch/product name to measure reception for. - repo (optional, string): Optional owner/repo or github URL to anchor the dossier. - threads (optional, integer): How many top HN threads to dig comments for. - date_from (optional, string): Window start (YYYY-MM-DD). - date_to (optional, string): Window end (YYYY-MM-DD). - include (optional, string): CSV subset toggling the comments/blogs/dossier legs. curl -G "https://www.socialcrawl.dev/v1/prism/launch-echo" \ --data-urlencode "query=Bun 1.2" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/audience-overlap How much two TikTok creators' commenter audiences overlap. Jaccard, shared-fan count, and a confidence label. Credit cost: 20 (override; tier advanced) Parameters: - handle_a (required): First TikTok creator handle. - handle_b (required): Second TikTok creator handle. - platform (optional, string): Platform (tiktok only in v1; default tiktok). - videos_per_creator (optional, integer): Recent videos sampled per creator (1-10, default 5): caps the commenter pull. - depth (optional, string): Set `deep` to widen the shared-fan enrichment sample. curl -G "https://www.socialcrawl.dev/v1/prism/audience-overlap" \ --data-urlencode "handle_a=mkbhd" \ --data-urlencode "handle_b=mrwhosetheboss" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/reputation A brand's cross-source reputation. Trustpilot + app stores + Google Business + web sentiment, blended into one weighted score with themed pros/cons. Credit cost: 30 (override; tier premium) Parameters: - brand (required): The brand/business/domain to assess. - sources (optional, string): CSV subset of trustpilot,google_play,app_store,google,tripadvisor,web (default the core set). - country (optional, string): Marketplace or locale, as a location name or numeric code (look one up with `GET /v1/content_analysis/locations`). Defaults to United States. - depth (optional, integer): Reviews per source (Trustpilot clamped ≤20). - place (optional, string): Set to enable the place-based legs (Google Business + TripAdvisor). - axis (optional, enum: company | product | both): Which reputation axis to headline: company, product, or both (default). - app_store_id (optional, string): App Store id to anchor that axis directly (skips resolver). - google_play_id (optional, string): Google Play id to anchor that axis directly (skips resolver). - include (optional, string): CSV subset of `themes`, `response_rate`, `languages` (default: all three). Naming a subset TRIMS the report to those blocks; an unknown member or an empty value is a 400. curl -G "https://www.socialcrawl.dev/v1/prism/reputation" \ --data-urlencode "brand=Notion" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/employer-brand A company's employer brand: what people say about working there across Reddit, the web, YouTube, Naver, and the company's own LinkedIn voice. Credit cost: 30 (override; tier premium) Parameters: - company (required): The employer/company name. - linkedin_url (optional, string): The company's LinkedIn URL: enables the LinkedIn voice axis + the posting-vs-reality gap. - surfaces (optional, string): CSV subset of the surfaces to include. - phrases (optional, string): Optional extra Reddit search phrases. - timeframe (optional, string): Reddit timeframe window. - date_from (optional, string): Window start (YYYY-MM-DD). - date_to (optional, string): Window end (YYYY-MM-DD). curl -G "https://www.socialcrawl.dev/v1/prism/employer-brand" \ --data-urlencode "company=Stripe" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/audience-questions The real questions a topic's audience asks: harvested from Reddit + YouTube threads (Naver KnowledgeiN for Korean topics) and clustered by intent (who/what/why/how/vs). Credit cost: 30 (override; tier premium) Parameters: - topic (required): The topic/keyword to mine audience questions for. - platforms (optional, string): CSV subset of reddit,youtube,web,naver. Default reddit,youtube; a topic written in Hangul defaults to naver,youtube (naver = Naver KnowledgeiN questions). - max_questions (optional, integer): Cap on questions returned. - threads_per_source (optional, integer): How many top threads to dig per source. - timeframe (optional, string): Recency window. - include (optional, string): Set `web` to add the universal-search leg. curl -G "https://www.socialcrawl.dev/v1/prism/audience-questions" \ --data-urlencode "topic=kubernetes operators" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/product-reviews A product's reviews across Amazon + Google Shopping + Trustpilot, folded into a cross-marketplace rating + themed pros/cons report. Credit cost: 30 (override; tier premium) Parameters: - query (optional, string): Product name to auto-resolve across marketplaces. - asin (optional, string): Amazon ASIN to anchor the Amazon axis directly. - gid (optional, string): Google product id (gid) to anchor the Google Shopping axis (NOT the catalogid). - sources (optional, string): CSV subset of amazon,google_shopping,trustpilot (default amazon,google_shopping; add trustpilot to include it). - country (optional, string): Marketplace country, as a location name or numeric code (look one up with `GET /v1/content_analysis/locations`). - depth (optional, integer): Reviews per source (Trustpilot clamped ≤20). - competitors (optional, string): Optional competitor products for a comparison (validated; deeper sweep is a fast-follow). - include (optional, string): CSV subset of `topics`, `timeline`, `sellers`, `retailer_matrix`, `social_echo` (default: all five). Naming a subset TRIMS which blocks are computed; an unknown member or an empty value is a 400. `sellers` also needs `amazon` to be in scope. - Constraint: one of query, asin, gid (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/product-reviews" \ --data-urlencode "query=AirPods Pro 3" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/apps-lookup One app across Google Play + the App Store: resolved, title-matched, and compared into a cross-store rating + listing report. Credit cost: 30 (override; tier premium) Parameters: - title (optional, string): The app title to resolve across both stores. - google_play_id (optional, string): Google Play app id to anchor that store directly. - app_store_id (optional, string): App Store app id to anchor that store directly. - stores (optional, string): CSV subset of google_play,app_store (default both). - country (optional, string): Store country. - language (optional, string): Store language. - match_threshold (optional, string): Title-similarity threshold for the cross-store match guard (0-1, default 0.6). - include (optional, string): CSV subset of `merged`, `similar`, `developer` (default: all three). Naming a subset TRIMS which blocks are computed; an unknown member or an empty value is a 400. - Constraint: one of title, google_play_id, app_store_id (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/apps-lookup" \ --data-urlencode "title=Notion" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/org-radar A GitHub org's footprint: its top repos each expanded into a full dossier (releases, issue load, top request/complaint), rolled up. Credit cost: 6-51 (metered): 1 credit for the org read plus 5 per repository expanded into a dossier. The default of 5 repos is 26 credits, a single repo is 6, and the 10-repo maximum is 51. Set `repos` to bound it before calling Parameters: - org (required): The GitHub org login or a github.com/{org} URL. - repos (optional, integer): How many top repos to dossier (1-10, default 5): drives the metered price. - sort (optional, enum: stars | updated | pushed): Repo ranking: stars (default), updated, or pushed. - include (optional, string): CSV subset of `dossiers`, `rollup` (default: both). Naming a subset TRIMS which blocks are computed; an unknown member or an empty value is a 400. Dropping `dossiers` also drops the per-repo credit (`1 + 5 x repos` becomes `1`). curl -G "https://www.socialcrawl.dev/v1/prism/org-radar" \ --data-urlencode "org=vercel" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/creator-vet Vet a creator before partnering: engagement quality, commenter authenticity, posting cadence, and controversy signals, optionally across platforms. Credit cost: 50-75 (metered): 50 credits for the standard vet. `include=cross_platform` raises it to 75 for the cross-platform identity check on top Parameters: - handle (required): The creator handle to vet. - platform (optional, string): Primary platform (tiktok/youtube/instagram). - depth (optional, string): Set `deep` to widen the post + commenter sample. - include (optional, string): Set `cross_platform` to add the universal cross-platform presence leg (+25cr). curl -G "https://www.socialcrawl.dev/v1/prism/creator-vet" \ --data-urlencode "handle=mkbhd" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/adverse-screen Screen a person's public social profiles for adverse posts, with every flag citing its post, for human review. Credit cost: 25-75 (metered): 25 credits for one profile, plus 10 for each further profile (4 profiles cost 55). Profiles that could not be screened are refunded their share, and a call that screened nothing keeps 5 Parameters: - linkedin (optional, string): LinkedIn profile URL (linkedin.com/in/...) or the profile slug. - twitter (optional, string): X (Twitter) handle or profile URL. - facebook (optional, string): Facebook profile or page URL, or its username. - instagram (optional, string): Instagram handle or profile URL. - threads (optional, string): Threads handle or profile URL. - tiktok (optional, string): TikTok handle or profile URL. - name (optional, string): The person's full name. When set, each profile is checked against it before screening. - employer (optional, string): Optional current employer, used only for the identity check. - city (optional, string): Optional city or country, used only for the identity check. - categories (optional, string): Comma-separated subset of fraud_or_financial_crime, violence_or_threats, hate_or_harassment, drugs, sanctions_or_terror_links, sexual_misconduct, reputational_other. Default: all. An unknown member is a 400. - since (optional, string): Only screen posts published on or after this date (YYYY-MM-DD). - limit (optional, integer): Most recent posts screened per profile, 1 to 100 (default 50). One timeline page is read per profile. - screen_unconfirmed (optional, string): Set true to also screen profiles whose identity is possible or could not be judged. Profiles judged to be someone else are never screened. - Constraint: one of linkedin, twitter, facebook, instagram, threads, tiktok (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/adverse-screen" \ --data-urlencode "twitter=elonmusk" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/find-accounts Turn a person's or a company's name into ranked candidate accounts on Instagram, TikTok, X and LinkedIn (Threads and YouTube on request), with a match level and a match confidence per platform, for human review. Credit cost: 2-29 (metered): The searches at their own prices (1 credit each for Instagram, TikTok and X, 10 for LinkedIn) plus 1 credit per platform judged: 6 credits for a person by default, 17 for a company (LinkedIn included). Threads or YouTube, when named, is 1 credit for its search plus 1 for its judging. With profile_check=true each profile lookup is added at its own price (1 credit on Instagram, TikTok and Threads, 5 for a company page on LinkedIn). For a company with `website`, a LinkedIn search that fails is answered by `linkedin/company/by-domain` at its 5 credits instead of the search's 10, and nothing when it fails too. A search that fails, a platform that could not be judged and a lookup that was not made or failed are refunded Parameters: - name (required): The person's or the company's name, 2 to 120 characters. - type (optional, enum: person | company): `person` (default) or `company`. Sets the default platforms and the LinkedIn search used. - platforms (optional, string): Comma-separated subset of linkedin, instagram, tiktok, twitter, threads, youtube. Default: instagram, tiktok, twitter for a person; linkedin, instagram, tiktok, twitter for a company. Threads and YouTube are searched only when named. An unknown member is a 400. - employer (optional, string): Optional current employer of the person, used only as context for the judgment (type=person only). - location (optional, string): Optional city or country, used only as context for the judgment. - website (optional, string): Optional official website or domain (e.g. ogilvy.com). A platform-verified account linking to it is taken as the match without judging. - candidates (optional, integer): Accounts judged per platform, 1 to 5 (default 5), taken from the top of each search. With `website`, an account whose own website is that domain is always included. - profile_check (optional, boolean): Optional, default false. When true, the leading candidate on Instagram, TikTok, Threads and (for a company) LinkedIn is looked up on its profile before the check, so the domain check reads its bio and website: 1 credit a lookup (5 for a LinkedIn company page), refunded when it fails. curl -G "https://www.socialcrawl.dev/v1/prism/find-accounts" \ --data-urlencode "name=Ogilvy" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/mentions Public posts and comments that mention a handle or contain a link, from the first page of each search that can find them. Credit cost: 1-9 (metered): 1 credit for each X or Reddit page, 5 for an Instagram tag page, 1 for a web page. A default call holds 3. A page with no verified row is refunded. Facebook, Threads and TikTok are not searched. Parameters: - handle (optional, string): Account handle, with or without @. Checked in code: an @handle (u/handle on Reddit) or a link to its profile or one of its posts. Not combined with name. - url (optional, string): A link or a link prefix, such as example.com/news. Checked in code. Not combined with name. - name (optional, string): A display name, 2 to 120 characters, passed on its own. Each row is judged. A failed judgment keeps the rows. - platforms (optional, string): Comma-separated subset of twitter, reddit, facebook, threads, instagram, tiktok, web. Default twitter, reddit, facebook. Instagram needs a handle. Web needs a url. Facebook, Threads and TikTok are accepted and not searched. - since (optional, string): Only keep rows published on or after this date, YYYY-MM-DD. On X it is also part of the search. - include_self (optional, boolean): When true, keep rows whose author is the handle. Default false. - Constraint: one of handle, url, name (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/mentions" \ --data-urlencode "handle=nasa" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/brief-check Check a creator post against a campaign brief: talking points, forbidden claims, and disclosure. Credit cost: 15 credits per post (provisional). Caption and transcript are pulled; each talking point is scored and quoted. A missing transcript is reported, never treated as a pass. Parameters: - url (required): Absolute http(s) URL of one creator post or video. - points (required): CSV of required talking points, for example 'Use the code SAVE20, Taste test on camera'. - forbidden (optional, string): CSV of claims the creator must not make, for example 'Cures disease'. - require_disclosure (optional, enum: 1): Set 1 when a paid-partnership disclosure such as #ad or 광고 is required to pass. - brand (optional, string): Optional brand name used when judging talking points about a product. curl -G "https://www.socialcrawl.dev/v1/prism/brief-check" \ --data-urlencode "url=https://www.tiktok.com/@creator/video/1" \ --data-urlencode "points=Use the code SAVE20, Show the app on camera" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/format-lift Which hook works for this creator, measured against their own posts. Credit cost: 4 credits (provisional). One page of the creator's recent posts is read, and each post is compared with that creator's own median. A bucket with fewer than eight posts lists the count and leaves the median empty. Parameters: - platform (required): youtube, tiktok, or instagram. - handle (required): The creator's handle, without @. curl -G "https://www.socialcrawl.dev/v1/prism/format-lift" \ --data-urlencode "platform=youtube" \ --data-urlencode "handle=joshuaweissman" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/earliness How early a term appeared on each platform, before Trends and before ads. Credit cost: 25 credits (provisional). One date-sorted page per platform, Google Trends over five years, and one page of the TikTok and Meta ad libraries. A lane that does not answer is listed and is not a first-seen date. Parameters: - term (required): The phrase, sound title, hashtag, or trend name to date. - region (optional, string): Optional country code passed to the lanes that accept one, such as US. Worth sending: - region=US: Results for one market. curl -G "https://www.socialcrawl.dev/v1/prism/earliness" \ --data-urlencode "term=swerve app" \ --data-urlencode "region=US" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/trend-board What is rising in one country today, with no keyword in: breakout TikTok posts, sounds, hashtags, and Google searches. Credit cost: 30 credits flat (provisional). One call reads TikTok's local feed, TikTok's hashtag board, Google Trending Now, up to 5 author pages and up to 3 sounds. A source that does not answer is listed under unavailable and its section is empty. Only a call where the feed, the hashtag board and Google Trending Now all fail is refunded. Parameters: - country_code (required): ISO 3166-1 alpha-2 country code, such as DE, US or KR. Any country Google Trends Trending Now covers. - period (optional, enum: 7 | 30): 7 (default) or 30. The window of TikTok's hashtag board. Google Trending Now is always read over its longest window, 7 days. - limit (optional, integer): Rows per section, 1 to 10. Default 10. curl -G "https://www.socialcrawl.dev/v1/prism/trend-board" \ --data-urlencode "country_code=DE" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/audience-language Language mix of the people commenting on a creator's recent posts, beside the follower sample on TikTok. Credit cost: 2-26 (metered): Floor 2 credits (one YouTube post: the channel list plus one comment page). Each further comment page is 1 credit, or 5 on Instagram, up to 5 posts. TikTok also opens the audience sample (5) and one follower page (1). Unopened pages are refunded. Five Instagram posts is 26 credits. Parameters: - platform (required): tiktok, instagram or youtube. - handle (required): Creator handle, with or without @. - posts (optional, integer): How many recent posts to open comments for. 1 to 5. Default 5. curl -G "https://www.socialcrawl.dev/v1/prism/audience-language" \ --data-urlencode "platform=tiktok" \ --data-urlencode "handle=charlidamelio" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/korea-gap What the world is talking about that Korea isn't (and vice versa): the global vs Korean (Naver) conversation gap for a brand/topic. Credit cost: 15-40 (metered): 15 credits for the web-only read. The default `include` carries the social leg, which makes the call 40; pass an `include` without `social` to stay at 15 Parameters: - query (required): The brand/topic to compare across the global and Korean conversations. - include (optional, string): CSV subset of `social` (the cross-platform everywhere leg) and `quotes` (the LLM translation pass), default both. An unknown member is a 400. Note the price runs the OTHER way from `video-intel` and `creator-vet`: DROPPING `social` moves the call from 40 credits to the 15-credit web-only variant. - date_from (optional, string): Window start (YYYY-MM-DD). - date_to (optional, string): Window end (YYYY-MM-DD). - display (optional, integer): Naver results per corpus. curl -G "https://www.socialcrawl.dev/v1/prism/korea-gap" \ --data-urlencode "query=Stanley cup" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/share-of-voice Engagement-weighted Share of Voice across 2-5 brands, with web+social split, emotion overlay, and ESOV. Credit cost: 20-200 (metered): 40 credits per brand with the social leg, which is the default, or 20 per brand for the web-only read. Up to 5 brands per call, so the 200-credit ceiling is 5 brands with social and dropping `social` from `include` halves it. Price the call as `brands x per-brand` before you send it - this is the most expensive composite on the API Parameters: - brands (required): 2-5 competitor brand names (CSV). - category_code (optional, string): Numeric category-taxonomy code for true-share-of-category (look one up with `GET /v1/content_analysis/categories`). - market_shares (optional, string): JSON map of real market share per brand (fraction or %), e.g. {"notion":0.4,"coda":0.25,"airtable":0.35}, to compute ESOV. - include (optional, string): CSV toggles (default `emotions,social`). Drop `social` for the cheaper web-only variant; drop `emotions` to skip the sentiment leg. The emotion overlay is third-party NLP passed through unmodified and is not scoped to your date window; `methodology.sentiment_provenance` states that on every response that carries it. - page_type (optional, enum: ecommerce | news | blogs | message-boards | organization): Optional surface filter forwarded to the content_analysis legs. - date_from (optional, string): Window start (YYYY-MM-DD). Defaults to 90 days ago. - date_to (optional, string): Window end (YYYY-MM-DD). Defaults to today. - brand_descriptions (optional, string): Optional JSON map of a one-line description per brand, e.g. {"notion":"the workspace app"}, used to tell a brand apart from its namesakes. curl -G "https://www.socialcrawl.dev/v1/prism/share-of-voice" \ --data-urlencode "brands=notion,coda,airtable" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/review-integrity Cross-source review integrity verdict (statistical, deterministic). Credit cost: 30 (override; tier premium) Parameters: - query (optional, string): Product or brand name to evaluate. - asin (optional, string): Amazon ASIN to anchor the Amazon axis directly (skips product-search). - gid (optional, string): Google product id (gid) to anchor the Google Shopping axis (NOT the catalogid product.id). - sources (optional, string): CSV subset of amazon,google_shopping,trustpilot,web,forums (default all). - country (optional, string): Marketplace country, as a location name or numeric code (look one up with `GET /v1/content_analysis/locations`). Defaults to United States. - Constraint: one of query, asin, gid (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/review-integrity" \ --data-urlencode "query=AirPods Pro 3" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/answers Multi-engine AI consensus: one question → Perplexity + Grok + Tavily answers verbatim, merged citations, and an agreement matrix. Credit cost: 15 (override; tier premium) Parameters: - query (required): The question, forwarded verbatim to every engine. - engines (optional, string): CSV subset of perplexity,grok,tavily (default all three). - include (optional, string): CSV of optional grounding legs: `polymarket` adds market probabilities (trimmed). curl -G "https://www.socialcrawl.dev/v1/prism/answers" \ --data-urlencode "query=will the fed cut rates in september" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/video-intel One video URL → detail + stats + transcript + top comments + commenter sample, across YouTube/TikTok/Rumble/Instagram. Credit cost: 5-15 (metered): 5 credits for the video detail, stats and comments. `include=transcript` adds 10, which is exactly what the standalone transcript endpoint charges, so the bundle never costs more than running the two calls yourself Parameters: - url (required): Absolute http(s) URL of a YouTube, TikTok, Rumble, or Instagram video. - comments (optional, string): How many top comments to fetch (0-50, default 20). `0` skips the comments leg. - include (optional, string): CSV of optional costed legs: `transcript` (adds the dedicated transcript leg, +10cr, refunded when null) and/or `commenter_profiles` (≤3 commenter mini-profiles, TikTok/Instagram in v1). - app_demand (optional, boolean): Optional. 1 reads the caption first, then the comments, and returns data.app_demand: late when the caption already names an app, otherwise the count of comments that want an app they do not have, the count that name one, and that ratio. The ratio is withheld unless the comments support it. A low-confidence comment is not counted. No extra credits. - claim (optional, string): Optional sentence. When set, data.sense_check says whether the comments support it, contradict it, or say nothing. A confidence under the cut, or one high-confidence contradiction, withholds the sentence. No extra credits. curl -G "https://www.socialcrawl.dev/v1/prism/video-intel" \ --data-urlencode "url=https://www.youtube.com/watch?v=dQw4w9WgXcQ" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/voice One person's public posts across X, Threads, Bluesky, and Truth Social, time-merged. Credit cost: 5 (override; tier advanced) Parameters: - handle (required): The handle to look up across all four microblogs (a single leading @ is stripped). - platforms (optional, string): CSV subset of twitter,threads,bluesky,truthsocial (default all four). - cursor (optional, string): Opaque composite cursor from a prior response's `next_cursor`. X/Twitter pages; Truth Social pages on `next_max_id`; a mangled token is a 400 at 0 credits. - include (optional, string): CSV subset of posts_by_platform,merged_timeline,computed to trim the payload (posts_by_platform is always returned). curl -G "https://www.socialcrawl.dev/v1/prism/voice" \ --data-urlencode "handle=nasa" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/app-reviews Cross-store app review intelligence (Google Play + App Store): translated, clustered, sentiment-scored. Credit cost: 10-15 (metered): 10 credits for one store, 15 for both. A bare `query` resolves both stores and costs 15; naming a single store in `stores`, or passing only one of `google_play_id` / `app_store_id`, costs 10 Parameters: - google_play_id (optional, string): Google Play package name (e.g. com.spotify.music). - app_store_id (optional, string): App Store numeric app id (e.g. 324684580). - query (optional, string): App name to auto-resolve the top hit on each requested store (when no id is given). - country (optional, string): Storefront country, as a location name or numeric code (look one up with `GET /v1/app_store/locations` or `GET /v1/google_play/locations`). Defaults to United States. - language (optional, string): Language code (e.g. en). - depth (optional, integer): Reviews per store (default 150 Google / 50 Apple, max 600). The App Store returns ~50 at depth 40. - stores (optional, string): CSV subset of google_play,app_store. Defaults to whichever ids/query resolve. - include (optional, string): CSV of topics,sentiment_timeline,feature_requests,responses (default all). Omitting topics+feature_requests skips the LLM step. - Constraint: one of google_play_id, app_store_id, query (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/app-reviews" \ --data-urlencode "query=spotify" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/creator-card One handle, unified author cards across TikTok, Instagram, YouTube, X (and more). Credit cost: 5-8 (metered): 5 credits covering any 4 platforms, plus 1 credit per platform beyond 4. The default selection is 4 platforms, so the 7-platform maximum is 8 credits Parameters: - handle (required): The handle to look up across every requested platform (a single leading @ is stripped). - platforms (optional, string): CSV subset of tiktok,instagram,youtube,twitter,threads,bluesky,truthsocial (default the first four). Unknown platforms are ignored. - include (optional, string): CSV subset of cards,totals to trim the payload (cards is always returned). - verify (optional, boolean): Send `true` to add an `identity` block that says whether each found profile is the same person or organisation as the anchor profile, not only that the handle exists there. Each platform gets a verdict with `level` (`same`, `possible`, `different`, or `uncertain` when the answer is not confident), a `score`, a `confidence` and the `evidence` behind it (`cross_link`, `bio_consistent`, `fan_or_parody`, `website_match`). A `null` verdict means that profile was not judged, not that it is different. `identity.verified_on` lists the anchor plus every `same` platform, and with it `totals.combined_followers` adds only those platforms while `totals.unverified_followers` holds the followers of the found profiles not judged `same`. Public profile text only, no image comparison. Same price; adds well under a second. - anchor (optional, enum: tiktok | instagram | youtube | twitter | threads | bluesky | truthsocial): With `verify=true`, the platform whose profile you already trust; every other found profile is compared against it. Omit it and the anchor is the platform-verified profile with the largest audience. If the chosen platform has no card in the response the anchor is picked automatically and `_warnings` says so. curl -G "https://www.socialcrawl.dev/v1/prism/creator-card" \ --data-urlencode "handle=mrbeast" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/handle-audit Should you pull this handle? One call scores a handle across platforms, ranks the best ones, and projects the data volume + credit cost to pull it. Contract overview: Decide whether to pull a handle before paying for a full collection. Score model 2.0.0 returns nullable top-level and per-platform scores, explicit evidence and component coverage, surface estimates, and `legs[]` diagnostics. Unknown numeric values are `null`, not zero. Output is deterministic only for the same (`score_version`, `evidence_fingerprint`) and returned evidence; a later live collection may produce different evidence and a different score. Stale-if-error evidence is eligible for at most 24 hours, and future-dated evidence more than 300 seconds ahead is rejected. 5 credits for any selection of up to 4 supported platforms; +1 credit per selected platform beyond 4. Every successful HTTP 200 receives the full request-shaped charge with no partial refund. A non-200 execution failure receives a full refund when every requested platform is a definitive miss or cannot return usable profile evidence. Scores are advisory estimates from public evidence, not calibrated probabilities. Credit cost: 5-8 (metered): 5 credits for any selection of up to 4 supported platforms; +1 credit per selected platform beyond 4 Cache: An exact normalized request is cached for 30 minutes; an exact cache hit costs 0 credits. Contract: Supported platforms are tiktok, instagram, youtube, twitter, threads, bluesky, truthsocial. Default platforms are tiktok, instagram, youtube, twitter. Optional platforms are threads, bluesky, truthsocial. Reddit is deferred and not supported. Contract: Any unknown platform rejects the whole request with HTTP 400 before billing. Contract: The identity may be a bare handle or canonical supported profile URL. A YouTube channel ID is YouTube-only: omit `platforms` to audit YouTube or set `platforms=youtube`; other canonical profile URLs do not narrow the default fanout. Contract: YouTube sampled-post collection sends includeExtras=true. Contract: Profile evidence states are live, stale, not_found, and unavailable. Posts evidence states are sampled, observed_empty, not_supported, not_found, and unavailable. Stale platforms are also listed in `stale_platforms`. Unknown numeric values are null, not zero, and decision-grade post evidence is required for scoring. Contract: When a platform's profile evidence is not_found, its `not_found_reason` says why: account_gone (removed, renamed, or never existed), account_private (the account exists but is not publicly readable), or handle_unresolved (no source stated a cause), the same vocabulary the profile endpoints publish as `error.details.reason`. `not_found_reason` is null on every platform whose profile was found or not observed. It is reported only and never changes the score or verdict. Contract: `observed_empty` is decision-grade evidence of an empty posting history; `days_since_last_post`, `media_fraction`, `avg_text_length`, and the `content_richness` score stay null because no posts were observed. Contract: Explicitly empty text is observed as length 0 and explicitly empty media is observed as false; unknown text or media stays null. Content-richness uses known-only inputs and re-normalizes across the known inputs instead of treating unknowns as zero. Contract: `legs[]` is emitted in stable plan order. A genuinely pending leg abandoned at the global deadline is synthesized as 504 / UPSTREAM_TIMEOUT / 0 credits; an early rejected dispatch is 502 / UPSTREAM_ERROR / 0 credits, including when compatible stale evidence recovers the response. A terminal profile failure emits no speculative posts leg. Contract: Scores are reproducible only when `score_version` and `evidence_fingerprint` are unchanged; score and evidence fields can be null when decision-grade evidence is unavailable. Contract: Collection has a 6.4-second default budget, a 6.5-second hard cap, and a 7-second public API target. These are configured targets, not measured v2 performance. Contract: Process-local monotonic last-known-good ordering prevents older writers within one process; global atomic CAS remains future work. Contract: With `relevant_to`, up to 25 of the posts already sampled (live evidence only, taken in turn across platforms) are judged against your subject by the same published relevance rule as `relevance=filter`. `domain_relevance.score` is the share kept, 0 to 100, with the posts judged listed in `judged_posts`. Contract: `score_with_domain_relevance` is 0.7 x `score` + 0.3 x `domain_relevance.score`, and `verdict_with_domain_relevance` applies the same thresholds to it. `score`, `verdict`, the five base components, their weights and `evidence_fingerprint` never read the subject. Contract: `domain_relevance` is null with a `_warnings` entry when fewer than 3 posts could be judged (`domain_relevance_insufficient_sample`) or the judging step did not answer (`domain_relevance_unavailable`). It is a judged estimate to review, not a measurement. Without `relevant_to` none of these fields is present. Parameters: - handle (required): The identity to audit. Accepts a bare handle, a leading @, a supported profile URL, or a YouTube channel ID. A YouTube channel ID is YouTube-only: omit `platforms` or set `platforms=youtube`. - platforms (optional, string): CSV subset of tiktok,instagram,youtube,twitter,threads,bluesky,truthsocial (default: tiktok,instagram,youtube,twitter). Names are case-insensitive and deduplicated. Unknown platforms are rejected. At most 8 CSV members before deduplication. - sample (optional, integer): Integer from 1 to 25: recent posts sampled per found platform for engagement and activity metrics (default 10). - relevant_to (optional, string): Optional. Your subject in up to 200 characters, for example relevant_to=video games. Name ONE subject: `A and B` is read as posts about both. Adds domain_relevance (the share of sampled posts about it) and score_with_domain_relevance next to the unchanged score. No extra charge. curl -G "https://www.socialcrawl.dev/v1/prism/handle-audit" \ --data-urlencode "handle=mrbeast" \ -H "x-api-key: YOUR_API_KEY" ## POST /v1/prism/post-stats Up to 100 mixed-platform post URLs → current engagement per URL, failed URLs refunded. Credit cost: 1-500 (metered): 1 credit per successful URL on most platforms, 2 on Instagram and 5 on LinkedIn, charged at each URL's own platform rate. Up to 100 URLs per call: the call holds the summed worst case up front (a 100-URL Instagram batch holds 200) and refunds every dead, errored and unsupported URL, so you pay for exactly the rows that returned counts Parameters: - urls (required): JSON array of 1-100 absolute http(s) post URLs (mixed platforms allowed). - include (optional, string): CSV subset of views,likes,comments,shares,saves,reposts to trim each row's engagement block. curl -X POST "https://www.socialcrawl.dev/v1/prism/post-stats" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"urls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}' ## POST /v1/prism/comment-lookup Re-check up to 25 known comments in one call: per-item results, failed items refunded. Credit cost: 2-100 (metered): 2 credits per found TikTok item and 5 per found Instagram item, raised by `deep_scan`. Up to 25 items per call: the whole batch holds at most 100 credits up front and refunds every not_found, errored and deferred item Parameters: - items (required): JSON array of 1-25 lookup items. Each item is `{ "comment_url": "…" }` or `{ "platform": "tiktok"|"instagram", "post_url": "…", "comment_id": "…" }`, optionally with `parent_comment_id`, `position_hint`, and `deep_scan`. curl -X POST "https://www.socialcrawl.dev/v1/prism/comment-lookup" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"items":[{"comment_url":"https://www.tiktok.com/@mrbeast/video/7654638524729216287?comment_id=7654640784985211670"},{"platform":"instagram","post_url":"https://www.instagram.com/p/CnpPou9hWqq/","comment_id":"18007013966365752"}]}' ## POST /v1/prism/profiles Up to 50 (platform, handle) pairs → one canonical Author per row, failed handles refunded. Credit cost: 1-126375 (metered): 1 credit per successful row on most platforms and 5 on LinkedIn, charged at each handle's own platform tier. Up to 50 items per call: the call holds the summed worst case up front and refunds every not_found, unsupported, errored and deferred row. With include: "posts" (up to 25 items) a row also costs its post list page, 1 credit (5 on LinkedIn), charged only when that page came back with posts. With posts_limit the call walks the list and charges each page that came back with posts; it holds the most pages the limit can take (10 at most per handle) and refunds the unused ones, and a dry run shows that hold. With include: "comments" each selected post's comments cost what that platform's comment endpoint charges per page (1 credit on most platforms, 5 on Instagram, LinkedIn and Reddit), charged only for pages that came back with comments; the call holds comments_top_posts times the pages comments_per_post can take and refunds the rest Parameters: - items (required): JSON array of 1-50 items (1-25 with include: "posts"). Each item is `{ "platform": "tiktok", "handle": "@scout2015", "custom_id"?: "…", "stop_at_id"?: "…" }`. `handle` accepts an @handle, a bare handle, or a pasted profile URL. `stop_at_id` (only with include: "posts") is the id or URL of the newest post you already hold for that handle: its page stops just before it. - include (optional, string): Optional. A comma-separated set of "posts" and "about". "posts" adds the handle's first page of posts to every ok row (`posts`), for the price of that page (1 credit), charged only when the page came back with posts. Caps the batch at 25 items. "about" reads an Instagram handle through its About panel (same price) and adds `country` to a row when the account declares one (an Instagram country, a Facebook page address, a TikTok account region, or a YouTube channel country), as an ISO code with its `source`; beside "posts" it also adds `activity` and `stats`, computed from the posts held. "comments" implies "posts" and reads the comments of each handle's top posts (see comments_top_posts), priced per page at that platform's comment endpoint price. - since (optional, string): Optional, with include: "posts". Only posts published on or after this date (YYYY-MM-DD or an ISO 8601 timestamp); each page stops at the first older post and `posts.stopped_at` is `since`. - posts_limit (optional, integer): Optional, with include: "posts". An integer from 1 to 100: walk each handle's post list until that many posts are held (each page that came back with posts is charged, up to 10 pages per handle). Without it, one page. - comments_top_posts (optional, integer): Optional, with include: "comments". An integer from 1 to 50 (default 3): how many of each handle's walked posts, those with the most comments, get their comments read. - comments_per_post (optional, integer): Optional, with include: "comments". An integer from 1 to 200 (default 20): the most comments read per selected post, walked page by page on that platform's comment endpoint. - comments_select_by (optional, enum: comments | views): Optional, with include: "comments". "comments" (default) picks the posts with the most comments, then posts without a comment count by views; "views" picks the most viewed posts. curl -X POST "https://www.socialcrawl.dev/v1/prism/profiles" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"items":[{"platform":"tiktok","handle":"@scout2015"},{"platform":"linkedin","handle":"williamhgates","custom_id":"vet-1"}]}' ## POST /v1/prism/post-comments Up to 25 post URLs across platforms → each post's comments in one call, priced per page like the comment endpoints. Credit cost: 1-2500 (metered): Each post costs what its own comment endpoint charges per page (1 credit on TikTok, YouTube, Facebook, X and Threads; 5 on Instagram, LinkedIn and Reddit), for the pages that came back with comments. The call holds every post at the pages per_post can take and refunds the rest; unsupported, not found, failed and deferred posts cost nothing. With since, a post with no new comment costs nothing Parameters: - items (required): JSON array of 1-25 post URLs. Each item is a URL string or `{ "url": "https://…", "custom_id"?: "…" }` (custom_id up to 128 characters, echoed on its row). `urls` is accepted as an alias. - per_post (optional, integer): Optional. An integer from 1 to 200 (default 20): the most comments read per post, walked page by page on that platform's comment endpoint. - since (optional, string): Optional. Only comments published on or after this date (YYYY-MM-DD, midnight UTC) or ISO 8601 timestamp. A post whose comments are all older costs nothing. curl -X POST "https://www.socialcrawl.dev/v1/prism/post-comments" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"items":["https://www.tiktok.com/@mrbeast/video/7654638524729216287","https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}' ## POST /v1/prism/discover/inputs Store a long author list or exclude list once and reuse it by id. Credit cost: Free. Parameters: - kind (required): "authors" or "exclude". - authors (optional, string): With kind authors: JSON array of 1 to 10,000 handles (each at most 100 characters): bare handles, @handles, profile URLs or platform:handle account keys. - exclude (optional, string): With kind exclude: JSON array of 1 to 50,000 evidence ids, post URLs or account keys (each at most 200 characters), in a body under 4,000,000 bytes. curl -X POST "https://www.socialcrawl.dev/v1/prism/discover/inputs" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"kind":"authors"}' ## POST /v1/prism/jobs Run a batch or any GET endpoint as a background job: up to 5,000 profiles or post URLs, or 1,000 calls to one GET. Credit cost: The same price per row as the batch endpoint the job runs: prism/profiles (1 credit per profile on most platforms, 5 on LinkedIn, plus its posts pages and comment pages as on prism/profiles) or prism/post-stats (its per-URL price). The call holds the whole job's worst case up front, answered in credits_used on the 202, and refunds every row that is not ok when the job completes. A job of a GET endpoint holds nothing (credits_used 0 on the 202, `billing: per_call`): each item is billed as that GET when it runs, a cached, failed or not-found item costs what the GET would, and `credits_max` on the 202 is the most the job can cost. Reading the job is free. Parameters: - endpoint (required): The batch endpoint each chunk runs, "prism/profiles" or "prism/post-stats", or the path of any GET endpoint, such as "youtube/channel/about" (a leading /v1/ is accepted). - items (required): JSON array of 1 to 5,000 items in that batch endpoint's item shape, or 1 to 1,000 objects of a GET endpoint's query parameters. Rows come back with `index`, their position in this array. - include (optional, string): Optional, prism/profiles only. A comma-separated set of "posts", "about" and "comments", as on prism/profiles: "posts" adds each handle's posts to its row and "comments" (it implies posts) the comments of its top posts. With posts or comments the chunks hold 25 items. - since (optional, string): Optional, prism/profiles with include: "posts" only. Only posts published on or after this date (YYYY-MM-DD or an ISO 8601 timestamp). - posts_limit (optional, integer): Optional, prism/profiles with include: "posts" only. An integer from 1 to 100: walk each handle's post list until that many posts are held, as on prism/profiles. - comments_top_posts (optional, integer): Optional, prism/profiles with include: "comments" only. An integer from 1 to 50 (default 3): how many of each handle's posts, those with the most comments, get their comments read. - comments_per_post (optional, integer): Optional, prism/profiles with include: "comments" only. An integer from 1 to 200 (default 20): the most comments read per selected post. - comments_select_by (optional, enum: comments | views): Optional, prism/profiles with include: "comments" only. "comments" (default) or "views": how the posts whose comments are read are picked. - webhook (optional, string): Optional. `{ "url": "https://…" }`, a public https URL, called once when the job completes. The signing secret is returned once, on the 202. curl -X POST "https://www.socialcrawl.dev/v1/prism/jobs" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"endpoint":"prism/profiles","items":[{"platform":"tiktok","handle":"@scout2015"},{"platform":"instagram","handle":"nasa"}]}' ## GET /v1/prism/jobs List the API key's background jobs, newest first. Credit cost: 0 (override; tier standard) Parameters: - cursor (optional, string): The previous response's next_cursor. curl "https://www.socialcrawl.dev/v1/prism/jobs" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/jobs/{job_id} Status and results of one background job. Credit cost: 0 (override; tier standard) Parameters: - job_id (required): The job id (bj_…) returned by POST /v1/prism/jobs as data.job_id. - cursor (optional, string): The previous response's next_cursor (a chunk position). curl "https://www.socialcrawl.dev/v1/prism/jobs/bj_3kP9x2LmQ7" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/investigate A bounded read-only walk over SocialCrawl endpoints that turns a research goal into a trail of searches, profiles and comments. Credit cost: Holds `budget` credits (default 40, max 200) up front and refunds what the walk does not spend. Each underlying page is charged at its own price. Deciding the next step is free. Parameters: - goal (required): What you want to find, in one or two sentences (max 500 chars). - budget (optional, integer): Credits held up front for the walk (1-200, default 40). Unused credits are refunded. - max_steps (optional, integer): Most steps the walk may take (1-12, default 8). curl -G "https://www.socialcrawl.dev/v1/prism/investigate" \ --data-urlencode "goal=Find Korean skincare creators on TikTok whose commenters ask where to buy" \ -H "x-api-key: YOUR_API_KEY" ## GET /v1/prism/discover Search many platforms for keywords or a description, keep a date window, judge every row and return the posts, in one call or as a background run. Credit cost: 0-10000000 (metered): Each platform search is billed at that platform's own search price, only when it returns rows; a search that fails, finds nothing or is served from cache costs 0. Judging against your keywords is free; judging against a different context costs 1 credit per started 15 rows, and each label costs 1 credit per started 25 rows. max_credits (default 50 on this call) caps the whole run, judging, joins and page bodies included, and a request expected to cost more is refused free before anything is spent. A search still running when the call answers bills when it finishes, after the answer: credits_used leaves it out and data.run.credits.pending shows the most it can add. Parameters: - keywords (optional, string): Comma-separated searches (up to 6 run in the call; more continue in the background). Each runs once on each platform. - query (optional, string): One search phrase, never split on commas. - context (optional, string): What kept rows must be about, 3 to 2,000 characters. A persona or a question goes here, never in keywords. - brands (optional, string): Comma-separated brands; each is its own group, searched by its name and labelled with the mention judgment. - brand (optional, string): One brand (an alias for a one-item brands). - platforms (optional, string): Comma-separated platforms, in order: tiktok, instagram, youtube, reddit, twitter, threads, facebook, linkedin, pinterest, bluesky, hackernews, forums, quora, github, news, web, telegram, naver, xiaohongshu, douyin, ebay, amazon, aliexpress, gumtree, tiktokshop, walmart. - preset (optional, string): A named platform set instead of platforms: consumer (default), b2b, travel, apps, news, commerce, creators, korea. - period (optional, string): Nd (1 to 365), yesterday, this_week, last_week, this_month, last_month, last_quarter, this_year or ytd. - since (optional, string): First day kept, YYYY-MM-DD (inclusive). Not combined with period. - until (optional, string): Last day kept, YYYY-MM-DD (inclusive). Not combined with period. - from (optional, string): Alias for since. - to (optional, string): Alias for until. - tz (optional, string): IANA time zone of the window's calendar (default UTC). - view (optional, string): posts (default), accounts, communities or items. - limit (optional, string): Kept rows returned per group (default 50, at most 100 in one call). - max_credits (optional, string): The most the run may spend (default 50 on this call). The run pauses at it and never overspends. - depth (optional, string): quick (at most 3 fast platforms, 15 s), standard (default) or deep (background). - dry_run (optional, string): true answers the plan of searches and the estimate of credits and seconds, free, and starts nothing. - country (optional, string): ISO 3166 codes: keep rows whose row or author country is one of these; also picks the news edition. - exclude_country (optional, string): ISO 3166 codes: drop rows from these countries. - unknown_country (optional, string): keep (default) or drop rows whose country is unknown, when country is sent. A geo.country guessed with confidence below 0.3 (from language or currency, say) counts as unknown, so a kept row can show such a guess for another country. - near (optional, string): The place the listings, places and web searches look in: a place name or lat,lng. It filters no other rows. - languages (optional, string): ISO 639 codes: keep rows in these languages and plan searches in them. Malay and Indonesian count as one language (ms keeps id rows and id keeps ms rows); rows with no detected language are kept. - min_views (optional, string): Drop rows with fewer views. - min_likes (optional, string): Drop rows with fewer likes. - min_comments (optional, string): Drop rows with fewer comments. - min_followers (optional, string): Drop rows whose author has fewer followers. - max_followers (optional, string): Drop rows whose author has more followers. - verified (optional, string): true keeps only rows by verified authors. - media_type (optional, string): Keep only rows showing these media: video, image, carousel or text. - active_within_days (optional, string): Keep authors who posted within this many days. - link_domains (optional, string): Keep only rows linking to these domains. - exclude_terms (optional, string): Drop rows containing any of these terms. - contains (optional, string): Comma-separated strings or URL prefixes a kept row must contain; without keywords they are searched. - undated (optional, string): keep (default; counted apart) or drop rows with no date. - estimated_dates (optional, string): keep (default), undated or drop rows whose date the platform did not publish and the lane estimated. - outside_window (optional, string): drop (default) or keep rows dated outside the window, marked in_window false. Needs a window. - min_text_length (optional, string): Drop rows whose text has fewer characters (0 to 200), before judging. - sites (optional, string): Domains searched on the web source, up to 20, or auto to find the sites that hold the topic; web is added when you send no platforms or preset, and an explicit platform set must include web. Named sites run next to web's own whole-web keyword search; send search_in.web=sites to search only inside them. - relevance (optional, string): filter (default: drop off-topic rows), score (keep every row with its score) or off. - relevance_threshold (optional, string): The relevance score a kept row needs, 0 to 1 (default 0.5); on the POST a group's own relevance_threshold sets it for that group's rows. - label (optional, string): Judgments to add to each row, each billed: mention (needs brands), intent, niche, sponsored_model, stance (judgments.stance { label, confidence } toward the group's brand, else its keywords, else its context; uncertain apart in summary.stance), or none. With view=accounts, fit, role and account_kind judge accounts (the default). - role (optional, string): Accounts only: keep accounts of these roles (seller, reseller, buyer, warner, reviewer, promoter, other); adds the role judgment. - intent (optional, string): Keep only rows with these intents: switching, complaint, recommendation, question, purchase_intent or selling (implies label=intent). - account_kind (optional, string): Accounts only: keep accounts of these kinds (individual_creator, brand_or_business, media_or_publisher, fan_or_repost_page, cannot_tell); adds the account_kind judgment. - targets_country (optional, string): Accounts only: keep accounts that target these countries (ISO 3166); adds its judgment. - sponsored (optional, string): keep (default), exclude or only rows flagged or disclosed as sponsored. - questions (optional, string): Up to 5 questions of your own, as JSON keyed by the answer's id, judged on every account (and every row with view=posts); a question about a sensitive trait of a person is a free 400. - limit_per_keyword (optional, string): Kept rows per keyword (counts in summary.by_keyword). - include (optional, string): Extra data: author_country, body (full text of the top kept articles, pages and threads), raw (each platform's own row), instagram_views, dropped (dropped rows in results.jsonl and state=dropped reads), commenters (with comments=inline), interest (data.interest: how much each keyword was searched over time, per group); with view=accounts, authors, contacts (opt-in) and audience (a TikTok creator's follower aggregates). - body_limit (optional, string): With include=body: rows whose full text is read (default 10; at most 50 on the GET and 5,000 on the POST). - comments (optional, string): off (default), inline (reads the comments under each group's top posts into a comments block on the row, billed in by_stage.comments) or bulk (data.comments_job lists those posts as ready prism/comments calls). - comments.top_posts (optional, string): With comments=inline: posts read per group, 1 to 50 (default 3), taken in turn from each platform and ranked by comment count. - comments.per_post (optional, string): With comments=inline: the most comments read from each post, 1 to 200 (default 20). - comments.select_by (optional, string): comments (default: rank posts by comment count, by views where a platform reports none) or views (rank every post by views). - comments.min_length (optional, string): With comments=inline: drop replies shorter than this many characters (fetched counts them, items holds the kept ones). - comments.labels (optional, string): With comments=inline on view=posts: comment labels (sentiment, spam, question, purchase_intent, complaint, toxic, low_quality, injection), billed at the comment endpoint's label price. - posts_per_account (optional, string): Accounts only: posts read per looked-up account, 1 to 100 (default 12); one call reads at most 12. Sent, every looked-up account's posts are read and returned in its posts array; left out, only when activity is needed. - sort (optional, string): relevance (default), recent, engagement, views or views_per_follower; accounts fit, followers, engagement or recent. - sample (optional, string): representative spreads rows across authors and platforms (with max_per_author, max_per_platform). - max_per_author (optional, string): With sample=representative: the most rows per author. - max_per_platform (optional, string): With sample=representative: the most rows per platform. - format (optional, string): evidence (default), compact or text. - fields (optional, string): Keep only these keys per row (a dotted name keeps one leaf). - author_identity (optional, string): full (default), omit or hash the author on every row. - translate_to (optional, string): Adds text_translated in this language (1 credit per started 1,000 characters). - continue (optional, string): The token in data.next.continue_url: buys the next platform pages of the searches that reported more. - since_watermark (optional, string): The watermark from an earlier run's data.next.watermark: only rows newer than it. - seeds (optional, string): Comma-separated seeds to resolve to their own accounts instead of a topic (implies mode=resolve and view=accounts). Each entry is a domain or URL (notion.so: a company with that domain, named from it), Name:domain (BMW Group:bmwgroup.com), or a name alone (Trevor Noah, searched as a person). A name and a domain written any other way is a free 400 whose did_you_mean is the Name:domain form. - authors (optional, string): Comma-separated handles: keep only rows by these authors (up to 100 here; store longer lists with POST /v1/prism/discover/inputs). - author_list_id (optional, string): The id from POST /v1/prism/discover/inputs, in place of a long authors list. - authors_match (optional, string): filter (default): search and keep the rows by the listed authors; walk: read each listed author's own posts in the window instead, and keep the ones about the subject. - brand_handles (optional, string): A brand's own accounts: a handle or profile URL, optionally after a platform (instagram:zomato) and, with several brands, after the brand (zomato:instagram:zomato). Adds the account's own posts (owned_post) and, on Instagram, its tagged posts. - mentions_of (optional, string): Accounts whose mentions you want (@handle): posts and replies that mention them on X, Reddit and Instagram, by the @handle (u/handle on Reddit) or by a link to the account's profile or one of its posts. - hashtags (optional, string): Comma-separated hashtags searched on each platform's hashtag lane. - search_in (optional, string): Lane kinds per platform: posts (default), hashtags; Reddit and X comments; Naver corpora blog, cafe, kin, news, webkr; web search or sites, discover_sites and walk; a brand's owned posts, Instagram tagged posts, ads and reviews; listings, places and communities; Telegram messages (the search inside the channels its channel search finds). search_in. sets one platform. - review_sites (optional, string): With search_in=reviews: the review sites searched (default trustpilot, google, tripadvisor, app_store, google_play; also yelp, amazon, g2). - mode (optional, string): search (the ordinary keyword run), resolve (seeds resolved to their accounts; seeds imply it) or board (each platform's trend boards for country; view=items with country and no subject implies it). - expand (optional, string): 0 (default) to 3 extra searches planned per keyword per language; true counts as 1 and false as 0. - expand_from (optional, string): With expand above 0: keywords (default: the extra searches are planned from your keywords) or suggestions (also from each keyword's YouTube and TikTok search suggestions, 1 credit each). - sites_auto_max (optional, string): With sites=auto: how many of the sites found are searched, 1 to 20 (default 5). - walk_urls (optional, string): With search_in.web=walk: pages walked per site and keyword, 1 to 500 (default 50). - pages_per_platform (optional, string): Pages per search, 1 (default) to 10; above 3 the run continues in the background. - retention_days (optional, string): Days the run and its rows stay readable, 1 to 30 (default 7). - deadline_s (optional, string): Seconds this call may take, 10 to 96 (default 40, quick 15). - async (optional, string): auto (default: over budget continues in the background), true (always background) or false (422 NEEDS_ASYNC over budget). - fresh (optional, string): true bypasses cached search pages, at full price. - new_run (optional, string): true starts a new run even when an identical one exists. - exclude (optional, string): Evidence ids, post URLs or account keys already held: never returned again. - exclude_list_id (optional, string): The id of an exclude list stored with POST /v1/prism/discover/inputs (kind exclude, up to 50,000 entries): its rows are never returned, with exclude. - cursor (optional, string): pagination.next_cursor of an earlier answer: the next page of that run's stored rows, free. - page_size (optional, string): GET only: stored rows per page with cursor, 1 to 100 (default 50). - Constraint: one of keywords, query, brands, brand, hashtags, contains, seeds, authors, author_list_id, mentions_of, brand_handles, cursor, continue, view, mode (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/discover" \ --data-urlencode "query=electric cars" \ -H "x-api-key: YOUR_API_KEY" ## POST /v1/prism/discover Start a discover run from a JSON body, for groups and lists too long for a URL; it runs in the background and answers 202 with the run. Credit cost: 0-10000000 (metered): Nothing is held when the run starts. Each platform search is billed at that platform's own search price when it runs, only when it returns rows, and judging against a context costs 1 credit per started 15 rows and each label costs 1 credit per started 25 rows. max_credits is required and caps the whole run: the run pauses at it and never overspends. Reading the run is free. Parameters: - max_credits (required): Required unless dry_run is true or schedule carries max_credits_per_run: the most the run may spend. The run pauses at it and never overspends; a request expected to cost more is refused free. - keywords (optional, string): JSON array of searches, each run once on each platform. - query (optional, string): One search phrase, never split on commas. - context (optional, string): What kept rows must be about, 3 to 2,000 characters. - brands (optional, string): JSON array of brands; each is its own group, labelled with the mention judgment. - brand (optional, string): One brand (an alias for a one-item brands). - platforms (optional, string): JSON array of platforms, in order: tiktok, instagram, youtube, reddit, twitter, threads, facebook, linkedin, pinterest, bluesky, hackernews, forums, quora, github, news, web, telegram, naver, xiaohongshu, douyin, ebay, amazon, aliexpress, gumtree, tiktokshop, walmart. - preset (optional, string): A named platform set instead of platforms. - period (optional, string): Nd (1 to 365), yesterday, this_week, last_week, this_month, last_month, last_quarter, this_year or ytd. - since (optional, string): First day kept, YYYY-MM-DD (inclusive). - until (optional, string): Last day kept, YYYY-MM-DD (inclusive). - from (optional, string): Alias for since. - to (optional, string): Alias for until. - tz (optional, string): IANA time zone of the window's calendar (default UTC). - view (optional, string): posts (default), accounts, communities or items. - limit (optional, string): Kept rows returned per group (default 500 on a background run). - depth (optional, string): quick (at most 3 fast platforms, 15 s, no expansion), standard (default) or deep (background). - dry_run (optional, string): true answers the plan and the estimate, free, and starts nothing. - country (optional, string): ISO 3166 codes: keep rows whose row or author country is one of these; also picks the news edition. - exclude_country (optional, string): ISO 3166 codes: drop rows from these countries. - unknown_country (optional, string): keep (default) or drop rows whose country is unknown, when country is sent. A geo.country guessed with confidence below 0.3 (from language or currency, say) counts as unknown, so a kept row can show such a guess for another country. - near (optional, string): The place the listings, places and web searches look in: a place name or lat,lng. It filters no other rows. - languages (optional, string): ISO 639 codes: keep rows in these languages and plan searches in them. Malay and Indonesian count as one language (ms keeps id rows and id keeps ms rows); rows with no detected language are kept. - min_views (optional, string): Drop rows with fewer views. - min_likes (optional, string): Drop rows with fewer likes. - min_comments (optional, string): Drop rows with fewer comments. - min_followers (optional, string): Drop rows whose author has fewer followers. - max_followers (optional, string): Drop rows whose author has more followers. - verified (optional, string): true keeps only rows by verified authors. - media_type (optional, string): Keep only rows showing these media: video, image, carousel or text. - active_within_days (optional, string): Keep authors who posted within this many days. - link_domains (optional, string): Keep only rows linking to these domains. - exclude_terms (optional, string): Drop rows containing any of these terms. - contains (optional, string): Keep only rows containing one of these strings or URL prefixes (link_hits on the row); without keywords they are searched. - undated (optional, string): keep (default; counted apart) or drop rows with no date. - estimated_dates (optional, string): keep (default), undated or drop rows whose date the platform did not publish and the lane estimated. - outside_window (optional, string): drop (default) or keep rows dated outside the window, marked in_window false. Needs a window. - min_text_length (optional, string): Drop rows whose text has fewer characters (0 to 200), before judging. - sites (optional, string): Domains searched on the web source, up to 20, or auto to find the sites that hold the topic; web is added when you send no platforms or preset, and an explicit platform set must include web. Named sites run next to web's own whole-web keyword search; send search_in.web=sites to search only inside them. - relevance (optional, string): filter (default: drop off-topic rows), score (keep every row with its score) or off. - relevance_threshold (optional, string): The relevance score a kept row needs, 0 to 1 (default 0.5); on the POST a group's own relevance_threshold sets it for that group's rows. - label (optional, string): Judgments to add to each row, each billed: mention (needs brands), intent, niche, sponsored_model, stance (judgments.stance { label, confidence } toward the group's brand, else its keywords, else its context; uncertain apart in summary.stance), or none. With view=accounts, fit, role and account_kind judge accounts (the default). - role (optional, string): Accounts only: keep accounts of these roles (seller, reseller, buyer, warner, reviewer, promoter, other); adds the role judgment. - intent (optional, string): Keep only rows with these intents: switching, complaint, recommendation, question, purchase_intent or selling (implies label=intent). - account_kind (optional, string): Accounts only: keep accounts of these kinds (individual_creator, brand_or_business, media_or_publisher, fan_or_repost_page, cannot_tell); adds the account_kind judgment. - targets_country (optional, string): Accounts only: keep accounts that target these countries (ISO 3166); adds its judgment. - sponsored (optional, string): keep (default), exclude or only rows flagged or disclosed as sponsored. - questions (optional, string): Up to 5 questions of your own, as JSON keyed by the answer's id, judged on every account (and every row with view=posts); a question about a sensitive trait of a person is a free 400. - limit_per_keyword (optional, string): Kept rows per keyword (counts in summary.by_keyword). - include (optional, string): Extra data: author_country, body (full text of the top kept articles, pages and threads), raw (each platform's own row), instagram_views, dropped (dropped rows in results.jsonl and state=dropped reads), commenters (with comments=inline), interest (data.interest: how much each keyword was searched over time, per group); with view=accounts, authors, contacts (opt-in) and audience (a TikTok creator's follower aggregates). - body_limit (optional, string): With include=body: rows whose full text is read (default 10; at most 50 on the GET and 5,000 on the POST). - comments (optional, string): off (default), inline (reads the comments under each group's top posts into a comments block on the row, billed in by_stage.comments) or bulk (data.comments_job lists those posts as ready prism/comments calls). - comments.top_posts (optional, string): With comments=inline: posts read per group, 1 to 50 (default 3), taken in turn from each platform and ranked by comment count. - comments.per_post (optional, string): With comments=inline: the most comments read from each post, 1 to 200 (default 20). - comments.select_by (optional, string): comments (default: rank posts by comment count, by views where a platform reports none) or views (rank every post by views). - comments.min_length (optional, string): With comments=inline: drop replies shorter than this many characters (fetched counts them, items holds the kept ones). - comments.labels (optional, string): With comments=inline on view=posts: comment labels (sentiment, spam, question, purchase_intent, complaint, toxic, low_quality, injection), billed at the comment endpoint's label price. - posts_per_account (optional, string): Accounts only: posts read per looked-up account, 1 to 100 (default 12); one call reads at most 12. Sent, every looked-up account's posts are read and returned in its posts array; left out, only when activity is needed. - sort (optional, string): relevance (default), recent, engagement, views or views_per_follower; accounts fit, followers, engagement or recent. - sample (optional, string): representative spreads rows across authors and platforms (with max_per_author, max_per_platform). - max_per_author (optional, string): With sample=representative: the most rows per author. - max_per_platform (optional, string): With sample=representative: the most rows per platform. - format (optional, string): evidence (default; every field), compact (about 100 tokens a row) or text (one line a row). - fields (optional, string): Keep only these keys per row (a dotted name keeps one leaf). - author_identity (optional, string): full (default), omit or hash the author on every row. - translate_to (optional, string): Adds text_translated in this language (1 credit per started 1,000 characters). - continue (optional, string): The token in data.next.continue_url: buys the next platform pages of the searches that reported more. - since_watermark (optional, string): The watermark from an earlier run's data.next.watermark: only rows newer than it. - groups (optional, string): JSON array of groups, each { "id", "keywords", "platforms"?, "country"?, "languages"?, "context"?, "tags"? }; rows report their group and the run route filters by it. - seeds (optional, string): Names to resolve to their own accounts, instead of a topic (implies mode=resolve and view=accounts). On the GET a comma-separated list whose entries are a domain or URL (notion.so: a company with that domain, named from it), Name:domain (BMW Group:bmwgroup.com) or a name alone (Trevor Noah, searched as a person); any other way of writing a name with a domain is a free 400 whose did_you_mean is the Name:domain form. On the POST the same text entries, or objects with name and optional domain, country and platforms. - authors (optional, string): JSON array of handles: keep only rows by these authors. - author_list_id (optional, string): The id from POST /v1/prism/discover/inputs, in place of a long authors list. - authors_match (optional, string): filter (default): search and keep the rows by the listed authors; walk: read each listed author's own posts in the window instead, and keep the ones about the subject. - brand_handles (optional, string): A brand's own accounts: a handle or profile URL, optionally after a platform (instagram:zomato) and, with several brands, after the brand (zomato:instagram:zomato). Adds the account's own posts (owned_post) and, on Instagram, its tagged posts. - mentions_of (optional, string): Accounts whose mentions you want (@handle): posts and replies that mention them on X, Reddit and Instagram, by the @handle (u/handle on Reddit) or by a link to the account's profile or one of its posts. - hashtags (optional, string): Hashtags searched on each platform's hashtag lane. - search_in (optional, string): Lane kinds per platform: posts (default), hashtags; Reddit and X comments; Naver corpora blog, cafe, kin, news, webkr; web search or sites, discover_sites and walk; a brand's owned posts, Instagram tagged posts, ads and reviews; listings, places and communities; Telegram messages (the search inside the channels its channel search finds). search_in. sets one platform. - review_sites (optional, string): With search_in=reviews: the review sites searched (default trustpilot, google, tripadvisor, app_store, google_play; also yelp, amazon, g2). - mode (optional, string): search (the ordinary keyword run), resolve (seeds resolved to their accounts; seeds imply it) or board (each platform's trend boards for country; view=items with country and no subject implies it). - expand (optional, string): 0 (default) to 3 extra searches planned per keyword per language; true counts as 1 and false as 0. - expand_from (optional, string): With expand above 0: keywords (default: the extra searches are planned from your keywords) or suggestions (also from each keyword's YouTube and TikTok search suggestions, 1 credit each). - sites_auto_max (optional, string): With sites=auto: how many of the sites found are searched, 1 to 20 (default 5). - walk_urls (optional, string): With search_in.web=walk: pages walked per site and keyword, 1 to 500 (default 50). - pages_per_platform (optional, string): Pages per search, 1 (default) to 10; above 3 the run continues in the background. - schedule (optional, string): POST only: { every (1h, 6h, 12h, 1d, 7d or 30d), max_credits_per_run? (defaults to max_credits; one of them is required), max_credits_per_month?, name? (1 to 100 characters), purpose? (business, brand, creator or organisation; required with authors or author_list_id), start_at? (ISO 8601 with its zone, up to 90 days ahead; omit to run now) } runs this request again on its own, each run from the previous run's watermark. Not combined with async=false, since_watermark or continue. Creating it is free; each run bills like a background run, capped at max_credits_per_run. Manage it at /v1/prism/discover/schedules. - retention_days (optional, string): Days the run and its rows stay readable, 1 to 30 (default 7). - async (optional, string): Has no effect on the POST, which always runs in the background; async=false with schedule is a free 400. - fresh (optional, string): true bypasses cached search pages, at full price. - new_run (optional, string): true starts a new run even when an identical one exists. - exclude (optional, string): Evidence ids, post URLs or account keys already held: never returned again. - exclude_list_id (optional, string): The id of an exclude list stored with POST /v1/prism/discover/inputs (kind exclude, up to 50,000 entries): its rows are never returned, with exclude. - Constraint: one of keywords, query, brands, brand, groups, hashtags, contains, seeds, authors, author_list_id, mentions_of, brand_handles, continue, view, mode (at least one required) curl -X POST "https://www.socialcrawl.dev/v1/prism/discover" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"max_credits":200,"groups":[{"id":"client_a","keywords":["electric cars"],"tags":{"market":"uk"}},{"id":"client_b","keywords":["heat pumps"]}]}' ## GET /v1/prism/creators Find creators (influencers) who post about a niche on TikTok, Instagram, YouTube, X and LinkedIn, or measure and rank creators you already have, in one call or as a background run. Credit cost: 0-10000000 (metered): Each platform search is billed at that platform's own search price, only when it returns rows; a search that fails, finds nothing or is served from cache costs 0. A creator's profile lookup costs 1 credit (LinkedIn 5), a posts walk the post page's price, and judging 1 credit per started 5 creators per pass. Compiling a prompt, the metrics, the score, the filters and paging are free. max_credits (default 200 on this call) caps the whole run, and a request expected to cost more is refused free before anything is spent. Parameters: - keywords (optional, string): Comma-separated topic words, in any language; each runs once per platform. - query (optional, string): The same as keywords (merged into it). - prompt (optional, string): One sentence, 3 to 1,000 characters, compiled into the other fields; fields you send win, and the result is echoed in data.request.compiled. - campaign (optional, string): What you are promoting and who it is for, 3 to 1,000 characters; compiled into 4 to 8 content topics, a judging context and competitors (data.request.compiled.campaign). - campaign_url (optional, string): The product's App Store, Google Play or web page, read once per run at the read's own price; a subject on its own. - context (optional, string): What the creators' own content should be, 3 to 2,000 characters; every candidate is judged against it (default: accounts whose own posts are about the keywords). - brief (optional, string): The same as context. - similar_to (optional, string): 1 to 5 seed creators (platform:handle, an account key or a profile URL) to find more like. Each seed's last posts are read once for up to 3 topic searches on every chosen platform; a TikTok or Instagram seed also reads its platform's similar list (YouTube and LinkedIn: data.platforms.

.similar is topic_only). Lookalikes are judged against the seed's niche unless context is sent; the seed itself is never returned. Without platforms, the seeds' platforms. - handles (optional, string): Comma-separated creators you already have (platform:handle, an account key or a profile URL), up to 25 here; send more in POST /v1/prism/creators. Needs purpose. - author_list_id (optional, string): A stored list from POST /v1/prism/discover/inputs (up to 10,000 handles), in place of handles; every entry is measured, and one that names no creator is said in _warnings. Needs purpose. - purpose (optional, string): What the measured accounts are, required with handles or author_list_id: business, brand, creator or organisation. - platforms (optional, string): Comma-separated platforms: tiktok, instagram, youtube, twitter, linkedin, threads, facebook (x is read as twitter). Default tiktok, instagram, youtube. - country (optional, string): Up to 5 ISO 3166-1 alpha-2 codes (UK is read as GB). A planned market plans localised searches; any other code filters only, as data.market says. - min_followers (optional, string): Fewest followers (subscribers on YouTube), inclusive: one number, or a per-platform map such as youtube:10000,tiktok:50000,default:5000. - max_followers (optional, string): Most followers, inclusive: one number or a per-platform map. - min_subscribers (optional, string): The same as min_followers. - max_subscribers (optional, string): The same as max_followers. - limit (optional, string): Creators to deliver (default 20). Up to 100 answer in the call; more continue in the background. - max_credits (optional, string): The most the run may spend (default 200 on the GET; required on the POST except with dry_run). It pauses there and never overspends. - depth (optional, string): quick (profile-level creators, no posts walk, at most three platforms), standard (default, walks posts_per_creator posts of each delivered creator) or deep (background, 24 posts). - dry_run (optional, string): true answers the normalised and compiled request, the plan of searches and the estimate, free, and starts nothing. - languages (optional, string): Creators who post in these languages; searches are written per market language. - exclude_country (optional, string): Up to 10 ISO codes never delivered, by the creator's country after its lookup; a country the row would show from a hint (its captions or bio) counts too. - unknown_country (optional, string): With country: drop (default) a creator whose country stays unknown after its lookup, or keep it. - min_median_views (optional, string): Median views over the measured posts (the typical post), one number or a per-platform map. - min_avg_views (optional, string): Mean views over the measured posts, one number or a per-platform map. - min_views_to_followers (optional, string): Median views over followers, a size-independent floor, one number or a per-platform map. - min_engagement_rate (optional, string): Floor on the engagement rate, a fraction (0.03 for 3%), on the platform's basis unless engagement_basis is sent. - engagement_basis (optional, string): views or followers: the basis min_engagement_rate reads. - min_posts_per_week (optional, string): Fewest eligible posts per week over the walk. - video_format (optional, string): YouTube only: any (default), long or short, the videos the view metrics read. - unmeasurable (optional, string): keep (default) or drop a creator on a platform that publishes no value for a filtered metric; kept creators are flagged in why.unapplied_filters. - active_within_days (optional, string): Last non-pinned post within this many days. - verified (optional, string): true keeps verified accounts only; false keeps unverified only. - account_kind (optional, string): individual_creator, brand_or_business, media_or_publisher or fan_or_repost_page; a creator whose kind cannot be told is dropped unless unknown_kind=keep. - unknown_kind (optional, string): With account_kind: drop (default) or keep a creator whose kind cannot be told. - niches (optional, string): Content niche ids (sc-niche-v1); an unknown id is a free 400 with did_you_mean. - has_contact (optional, string): any: keep creators who show a public email or phone (a bio link alone is not a contact); email: keep creators who show a public email, reading a YouTube channel's About panel in the background at 25 credits per email found. Either implies include=contacts. - exclude (optional, string): Account keys never returned. - exclude_list_id (optional, string): A stored list of account keys never returned. - exclude_sponsors (optional, string): Up to 20 brand names: a creator whose measured posts disclose a sponsorship naming one is dropped; [] turns a campaign's competitors off. - sort (optional, string): score (default), fit, followers, median_views, median_shares, median_saves, posts_per_week, engagement or recent. - include (optional, string): posts (the measured posts, compact), contacts (the contact values) or linked (each delivered creator's own accounts on other platforms, confirmed by an identity check, with follower totals over those only). audience: each delivered TikTok creator's follower countries with their sampled counts, and its followers' genders and ages where TikTok publishes them, a sample of followers as published with its n, in account.audience and never in the creator's own fields (5 credits a TikTok creator read). authenticity: each delivered TikTok, Instagram or YouTube creator's comment-based and brand-safety signals, read on its walked posts, each with its sample size and never a verdict, in account.authenticity (the reads at their own prices, at most 36 credits a creator, Instagram 48, plus judging). - posts_per_creator (optional, string): Eligible (non-pinned, non-repost) posts measured per creator: 12 on standard (1 to 30), 24 on deep. - label (optional, string): Judgments: default fit,account_kind,niche; none turns judging off. - relevance (optional, string): filter (default in search mode), score or off. - relevance_threshold (optional, string): The fit a kept creator needs, 0 to 1 (default 0.5). - format (optional, string): evidence (default), compact or text. - fields (optional, string): The keys each creator row keeps. - author_identity (optional, string): full (default), omit or hash, for display-safe payloads. - audience_country (optional, string): TikTok only: up to 5 floors on the share of a creator's sampled followers in a country, as TikTok publishes it (a sample of followers as published), for example GB:0.3; every floor must hold, and a country TikTok does not list counts as 0. Each creator that passed every other filter is read once, at 5 credits, and only those that hold are delivered. Without platforms only TikTok is searched; with another platform it is not_released (none publishes an audience). Gender and age are never filters. - retention_days (optional, string): Days the run and its creators stay readable, 1 to 30 (default 7). - deadline_s (optional, string): GET only: seconds this call may wait, 10 to 96 (default 40, quick 15); a run expected to take longer answers 202 at once. - async (optional, string): auto (default: a run over the call's budget, or expected to take longer than deadline_s, answers 202 at once and continues in the background), true (always background) or false (waits up to deadline_s and answers what it finished with a resume_url; 422 NEEDS_ASYNC over the budget). - new_run (optional, string): true starts a new run even when an identical one exists. - fresh (optional, string): true bypasses cached searches, at their full price. - Constraint: one of keywords, query, prompt, campaign, campaign_url, similar_to, handles, author_list_id (at least one required) curl -G "https://www.socialcrawl.dev/v1/prism/creators" \ --data-urlencode "keywords=home espresso,latte art" \ -H "x-api-key: YOUR_API_KEY" ## POST /v1/prism/creators Start a creator search from a JSON body, for handle lists and exclusions too long for a URL; it runs in the background and answers 202 with the run. Credit cost: 0-10000000 (metered): Nothing is held when the run starts. Each platform search is billed at that platform's own search price when it runs, only when it returns rows; a profile lookup costs 1 credit (LinkedIn 5), a posts walk the post page's price, and judging 1 credit per started 5 creators per pass. max_credits is required and caps the whole run: the run pauses at it and never overspends. Reading the run is free. Parameters: - max_credits (required): Required unless dry_run is true: the most the run may spend. The run pauses at it and never overspends; a request expected to cost more is refused free. - keywords (optional, string): JSON array of topic words, in any language; each runs once per platform. - query (optional, string): The same as keywords (merged into it). - prompt (optional, string): One sentence, 3 to 1,000 characters, compiled into the other fields; fields you send win, and the result is echoed in data.request.compiled. - campaign (optional, string): What you are promoting and who it is for, 3 to 1,000 characters; compiled into 4 to 8 content topics, a judging context and competitors (data.request.compiled.campaign). - campaign_url (optional, string): The product's App Store, Google Play or web page, read once per run at the read's own price; a subject on its own. - context (optional, string): What the creators' own content should be, 3 to 2,000 characters; every candidate is judged against it (default: accounts whose own posts are about the keywords). - brief (optional, string): The same as context. - similar_to (optional, string): 1 to 5 seed creators (platform:handle, an account key or a profile URL) to find more like. Each seed's last posts are read once for up to 3 topic searches on every chosen platform; a TikTok or Instagram seed also reads its platform's similar list (YouTube and LinkedIn: data.platforms.

.similar is topic_only). Lookalikes are judged against the seed's niche unless context is sent; the seed itself is never returned. Without platforms, the seeds' platforms. - handles (optional, string): JSON array of creators you already have (platform:handle, an account key or a profile URL), up to 250. Needs purpose. - author_list_id (optional, string): A stored list from POST /v1/prism/discover/inputs (up to 10,000 handles), in place of handles; every entry is measured, and one that names no creator is said in _warnings. Needs purpose. - purpose (optional, string): What the measured accounts are, required with handles or author_list_id: business, brand, creator or organisation. - platforms (optional, string): JSON array of platforms: tiktok, instagram, youtube, twitter, linkedin, threads, facebook (x is read as twitter). Default tiktok, instagram, youtube. - country (optional, string): Up to 5 ISO 3166-1 alpha-2 codes (UK is read as GB). A planned market plans localised searches; any other code filters only, as data.market says. - min_followers (optional, string): Fewest followers (subscribers on YouTube), inclusive: one number, or a per-platform map such as youtube:10000,tiktok:50000,default:5000. - max_followers (optional, string): Most followers, inclusive: one number or a per-platform map. - min_subscribers (optional, string): The same as min_followers. - max_subscribers (optional, string): The same as max_followers. - limit (optional, string): Creators to deliver (default 20; in handles mode the number of handles). The GET answers at most 100 in the call; a background run delivers up to 1,000, and an author_list_id run up to its 10,000 handles. - depth (optional, string): quick (profile-level creators, no posts walk, at most three platforms), standard (default, walks posts_per_creator posts of each delivered creator) or deep (background, 24 posts). - dry_run (optional, string): true answers the normalised and compiled request, the plan of searches and the estimate, free, and starts nothing. - languages (optional, string): Creators who post in these languages; searches are written per market language. - exclude_country (optional, string): Up to 10 ISO codes never delivered, by the creator's country after its lookup; a country the row would show from a hint (its captions or bio) counts too. - unknown_country (optional, string): With country: drop (default) a creator whose country stays unknown after its lookup, or keep it. - min_median_views (optional, string): Median views over the measured posts (the typical post), one number or a per-platform map. - min_avg_views (optional, string): Mean views over the measured posts, one number or a per-platform map. - min_views_to_followers (optional, string): Median views over followers, a size-independent floor, one number or a per-platform map. - min_engagement_rate (optional, string): Floor on the engagement rate, a fraction (0.03 for 3%), on the platform's basis unless engagement_basis is sent. - engagement_basis (optional, string): views or followers: the basis min_engagement_rate reads. - min_posts_per_week (optional, string): Fewest eligible posts per week over the walk. - video_format (optional, string): YouTube only: any (default), long or short, the videos the view metrics read. - unmeasurable (optional, string): keep (default) or drop a creator on a platform that publishes no value for a filtered metric; kept creators are flagged in why.unapplied_filters. - active_within_days (optional, string): Last non-pinned post within this many days. - verified (optional, string): true keeps verified accounts only; false keeps unverified only. - account_kind (optional, string): individual_creator, brand_or_business, media_or_publisher or fan_or_repost_page; a creator whose kind cannot be told is dropped unless unknown_kind=keep. - unknown_kind (optional, string): With account_kind: drop (default) or keep a creator whose kind cannot be told. - niches (optional, string): Content niche ids (sc-niche-v1); an unknown id is a free 400 with did_you_mean. - has_contact (optional, string): any: keep creators who show a public email or phone (a bio link alone is not a contact); email: keep creators who show a public email, reading a YouTube channel's About panel in the background at 25 credits per email found. Either implies include=contacts. - exclude (optional, string): Account keys never returned. - exclude_list_id (optional, string): A stored list of account keys never returned. - exclude_sponsors (optional, string): Up to 20 brand names: a creator whose measured posts disclose a sponsorship naming one is dropped; [] turns a campaign's competitors off. - sort (optional, string): score (default), fit, followers, median_views, median_shares, median_saves, posts_per_week, engagement or recent. - include (optional, string): posts (the measured posts, compact), contacts (the contact values) or linked (each delivered creator's own accounts on other platforms, confirmed by an identity check, with follower totals over those only). audience: each delivered TikTok creator's follower countries with their sampled counts, and its followers' genders and ages where TikTok publishes them, a sample of followers as published with its n, in account.audience and never in the creator's own fields (5 credits a TikTok creator read). authenticity: each delivered TikTok, Instagram or YouTube creator's comment-based and brand-safety signals, read on its walked posts, each with its sample size and never a verdict, in account.authenticity (the reads at their own prices, at most 36 credits a creator, Instagram 48, plus judging). - posts_per_creator (optional, string): Eligible (non-pinned, non-repost) posts measured per creator: 12 on standard (1 to 30), 24 on deep. - label (optional, string): Judgments: default fit,account_kind,niche; none turns judging off. - relevance (optional, string): filter (default in search mode), score or off. - relevance_threshold (optional, string): The fit a kept creator needs, 0 to 1 (default 0.5). - format (optional, string): evidence (default), compact or text. - fields (optional, string): The keys each creator row keeps. - author_identity (optional, string): full (default), omit or hash, for display-safe payloads. - audience_country (optional, string): TikTok only: up to 5 floors on the share of a creator's sampled followers in a country, as TikTok publishes it (a sample of followers as published), for example GB:0.3; every floor must hold, and a country TikTok does not list counts as 0. Each creator that passed every other filter is read once, at 5 credits, and only those that hold are delivered. Without platforms only TikTok is searched; with another platform it is not_released (none publishes an audience). Gender and age are never filters. - retention_days (optional, string): Days the run and its creators stay readable, 1 to 30 (default 7). - async (optional, string): auto (default: a run over the call's budget, or expected to take longer than deadline_s, answers 202 at once and continues in the background), true (always background) or false (waits up to deadline_s and answers what it finished with a resume_url; 422 NEEDS_ASYNC over the budget). - new_run (optional, string): true starts a new run even when an identical one exists. - fresh (optional, string): true bypasses cached searches, at their full price. - schedule (optional, string): POST only: re-run this search on a cadence and report only new creators, { "every": "1d", "purpose": "creator", "max_credits_per_run": 200 } (every 1h, 6h, 12h, 1d, 7d or 30d; purpose creator required; not with handles or author_list_id). The first run is a baseline with no event; each later run delivers only creators no earlier run of the schedule delivered and announces them as discover.new_accounts. Each run bills at the price of its calls, with no premium. - Constraint: one of keywords, query, prompt, campaign, campaign_url, similar_to, handles, author_list_id (at least one required) curl -X POST "https://www.socialcrawl.dev/v1/prism/creators" \ -H "x-api-key: YOUR_API_KEY" \ -H "content-type: application/json" \ -d '{"max_credits":200,"keywords":["home espresso","latte art"]}'