Takes a public post URL (TikTok video/photo, Instagram post/reel, YouTube video/short) and resolves it to the tracked post: the entry point when your input is a link. found:true returns the postId for get_post, request_transcript, download_post_media and remix_post. found:false tells you whether the whole profile is untracked (call crawl_profile) or just this post. TikTok/Instagram short links (vm.tiktok.com, /share/) must be expanded to the canonical URL first.
Turn a public TikTok, Instagram or YouTube post link into the internal post id every other skill uses. It is the entry point whenever your input is a URL a user pasted: resolve the link, get the post id, then transcribe, download, or remix it. When the post is not in the database, the response tells you exactly why (whole profile untracked, or just this post), so you know whether to crawl. Each call costs 1 credit (1 credit = $0.01).
Connect the Viral Outliers MCP server once and the resolve_post_url tool becomes available to your agent alongside all other skills:
claude mcp add --transport http viral-outliers https://viraloutliers.com/api/mcp \
--header "Authorization: Bearer so_live_YOUR_KEY"In Claude.ai or ChatGPT, add a custom connector pointing at https://viraloutliers.com/api/mcp. Your agent then calls resolve_post_url on its own whenever the task needs it.
| Name | Type | Description |
|---|---|---|
url* | string | Public post URL (canonical form, not a short link). |
On a hit, found:true with the internal postId: the same id that get_post, request_transcript, download_post_media and remix_post all take. On a miss, found:false plus a reason that distinguishes the two cases that matter: profile_not_tracked (the whole account is unknown, so crawl_profile it) versus post_not_tracked (the profile is tracked but this specific post fell outside the crawl window).
That distinction is the point of the skill: it turns a dead-end "not found" into an actionable next step, so an agent never has to guess whether to crawl an account or just accept that one post is missing.
You pass a single canonical post URL: a TikTok video/photo link, an Instagram post/reel link, or a YouTube video/short link. The service matches it against tracked posts and returns the id or the not-found reason. It is a synchronous database lookup priced at the read tier.
One requirement: short links must be expanded first. TikTok's vm.tiktok.com and /share/ links and other shorteners are not canonical, so resolve them to the full URL before calling. From a successful resolve you branch straight into the id-based skills; from profile_not_tracked you call crawl_profile with the handle and the post arrives with the crawl.
Link-first flows are the whole reason it exists: a user pastes a URL into a chat, the agent resolves it, and then transcribes, pulls the media, or remixes it, with crawl_profile as the automatic fallback when the account is untracked. Bulk-import tools resolve a list of saved links into post ids before enriching them. Routing logic uses the not-found reason to decide, per link, whether a crawl is worth the credits.
Because remix_post and request_transcript also accept a url directly, resolve_post_url is most valuable when you specifically need the id up front: for caching, deduping, or deciding whether to crawl before spending on heavier skills.
Doing this by hand means writing a parser for each platform's several URL shapes, expanding shorteners, and then querying for a matching post and interpreting the absence, all of which drift as platforms change their link formats. And a naive "not found" tells you nothing about whether crawling would help.
resolve_post_url gives you one call that returns either the id or a precise, actionable reason, at a single credit. Compared with rolling your own URL-to-id layer, you skip the parser maintenance entirely and get the crawl-or-not decision made for you, which is the part that actually saves credits downstream.
1 credit ($0.01) per call in prepaid credits (1 credit = $0.01). For example, 100 calls per dollar. Subscriptions include monthly credits; top-up packs start at $15. Failed asynchronous jobs are refunded automatically, and calls stop at a zero balance, never a surprise bill. See the full pricing table.
Two calls: resolve_post_url with the link gives you the internal post id (and tells you if the profile needs crawling first), then request_transcript with that id queues the transcription. The finished transcript comes back on get_post.
The response tells you which case you are in: profile_not_tracked means call crawl_profile with the handle (the post arrives with the crawl); post_not_tracked means the profile is tracked but this post fell outside the crawl window.
Also available as a REST API endpoint.
Related topics: TikTok URL to transcript · Instagram reel data from link · YouTube shorts API lookup