API Capability Matrix — Endpoints by Platform

Every Social Fetch endpoint by platform: identifiers, SDK methods, pagination, credits, and lookup outcomes. From the public OpenAPI spec.

This page is generated from the same OpenAPI-derived data used by /llms.json.

TikTok

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/tiktok/profiles/{handle}Get TikTok profilehandle (path)client.tiktok.getProfile({ handle })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/videosList TikTok profile videoshandle (path), userId (query)client.tiktok.getProfileVideos({ handle, sortBy?, cursor?, userId?, region?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: latest, popularAn empty data.videos array can mean no videos in the selected sort window, a private profile, or other cases—there is no lookupStatus field on this route. Call GET /v1/tiktok/profiles/{handle} when you need explicit lookupStatus including private or not_found before interpreting an empty video list.1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/followersList TikTok profile followershandle (path), userId (query)client.tiktok.getProfileFollowers({ handle, cursor?, userId?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, hidden, private, not_found1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/followingList TikTok profile followinghandle (path)client.tiktok.getProfileFollowing({ handle, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, hidden, private, not_found1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/regionGet TikTok profile regionhandle (path)client.tiktok.getProfileRegion({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/audienceGet TikTok profile audiencehandle (path)client.tiktok.getProfileAudience({ handle })nonedata.lookupStatus: found, not_found30 credits per successful request.no
GET /v1/tiktok/profiles/{handle}/liveGet TikTok live streamhandle (path)client.tiktok.getProfileLive({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/users/searchSearch TikTok usersquery (query)client.tiktok.searchUsers({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/tiktok/searchSearch TikTok videosquery (query)client.tiktok.searchVideos({ query, datePosted?, sortBy?, region?, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, most-liked, date-postedstandard HTTP / success envelope1 credit per successful request.no
GET /v1/tiktok/search/hashtagsSearch TikTok by hashtagnone documentedclient.tiktok.searchHashtags({ hashtag, region?, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreUse data.page.hasMore and data.page.nextCursor for pagination. Repeat the same hashtag and filters when requesting the next page.1 credit per successful request.no
GET /v1/tiktok/videosGet TikTok videourl (query)client.tiktok.getVideo({ url, region?, trim?, downloadMedia? })nonedata.lookupStatus: found, not_found1 credit base, +10 with downloadMedia. Up to 11 credits max.downloadMedia=true
GET /v1/tiktok/videos/commentsList TikTok video commentsurl (query)client.tiktok.getVideoComments({ url, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Cursor pagination with variable page size — use data.page.hasMore and data.page.nextCursor; do not assume a fixed number of comments per page or loop on totalComments alone.1 credit per successful request.no
GET /v1/tiktok/videos/comments/repliesList TikTok comment repliescommentId (query), url (query)client.tiktok.getVideoCommentReplies({ commentId, url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Requires parent commentId from List TikTok video comments plus the same video url. Paginate with data.page.hasMore and data.page.nextCursor; do not assume a fixed page size.1 credit per successful request.no
GET /v1/tiktok/videos/transcriptGet TikTok video transcripturl (query)client.tiktok.getVideoTranscript({ url, language?, useAiFallback? })nonedata.lookupStatus: found, not_found1 credit base, +10 with useAiFallback. Up to 11 credits max.no
GET /v1/tiktok/feed/trendingList TikTok trending feednone documentedclient.tiktok.listTrendingFeed({ region, trim? })noneRepeat the same request for a fresh trending batch. New and overlapping posts are both possible. No cursor or page parameters.1 credit per successful request.no
GET /v1/tiktok/songsGet TikTok songid (query)client.tiktok.getSong({ id })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/music/{clipId}/videosList TikTok music videosnone documentedclient.tiktok.listMusicVideos({ clipId, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty data.videos array can mean no public videos use this music clip, or other cases—there is no lookupStatus field on this route.1 credit per successful request.no
GET /v1/tiktok/shop/products/searchSearch TikTok Shop productsquery (query)client.tiktok.searchShopProducts({ query, page?, region? })page via page, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/tiktok/shop/productsList TikTok Shop store productsurl (query)client.tiktok.listShopProducts({ url, cursor?, region? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/productsGet TikTok Shop producturl (query)client.tiktok.getProduct({ url, region? })nonestandard HTTP / success envelope1 credit per successful request.no
GET /v1/tiktok/products/reviewsList TikTok Shop product reviewsurl (query)client.tiktok.getProductReviews({ url?, productId?, region?, page? })page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/profiles/{handle}/showcase-productsList TikTok profile showcase productshandle (path)client.tiktok.getProfileShowcaseProducts({ handle, cursor?, region? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty data.products array can mean no showcased products, a private profile, or other cases—there is no lookupStatus field on this route. Call GET /v1/tiktok/profiles/{handle} when you need explicit profile lookup status before interpreting an empty showcase list.1 credit per successful request.no
GET /v1/tiktok/ad-library/adsGet TikTok Ad Library adurl (query)client.tiktok.getAdLibraryAd({ adId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/tiktok/ad-library/ads/searchSearch TikTok Ad Library adsquery (query)client.tiktok.searchAdLibraryAds({ region?, period?, query?, advertiserName?, orderBy?, industry?, objective?, duration?, likes?, adFormat?, adLanguage?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no

Facebook

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/facebook/profilesGet Facebook profileurl (query)client.facebook.getProfile({ url, includeBusinessHours? })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/facebook/profiles/postsList Facebook profile postsurl (query)client.facebook.getProfilePosts({ url?, pageId?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty data.posts page with hasMore: false can represent no public posts, restricted visibility, or an unresolvable URL or id—there is no lookupStatus field on this route. Call GET /v1/facebook/profiles first when you need found / private / not_found before interpreting an empty posts page.1 credit per successful request.no
GET /v1/facebook/profiles/reelsList Facebook profile reelsurl (query)client.facebook.getProfileReels({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/profiles/photosList Facebook profile photosurl (query)client.facebook.getProfilePhotos({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/postsGet Facebook post or reelurl (query)client.facebook.getPost({ url, includeComments?, includeTranscript? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/posts/commentsList Facebook post or reel commentsurl (query)client.facebook.getPostComments({ url?, cursor?, feedbackId? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/posts/comments/repliesList Facebook comment repliesnone documentedclient.facebook.getPostCommentReplies({ cursor })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/facebook/posts/transcriptGet Facebook post transcripturl (query)client.facebook.getPostTranscript({ url })nonedata.lookupStatus: found, not_found, lookup_failed1 credit per successful request.no
GET /v1/facebook/groups/postsList Facebook group postsurl (query)client.facebook.listGroupPosts({ url, sortBy?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: top, recentActivity, chronological, chronologicalListingsdata.lookupStatus: found, not_found lookupStatus: not_found often means the group URL was wrong or unresolved. Each page bills separately, including not_found outcomes. Pass a full Facebook group URL (facebook.com/groups/{id-or-slug}/…), not a profile or page URL. Use sortBy: chronological for general feeds; use chronologicalListings for Buy/Sell marketplace groups. Upstream returns a small number of posts per page (often around three). No server-side keyword filter — filter client-side on text after fetching pages.1 credit per successful request.no
GET /v1/facebook/marketplace/itemsGet Facebook Marketplace itemurl (query)client.facebook.getMarketplaceItem({ itemId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/marketplace/locations/searchSearch Facebook Marketplace locationsquery (query)client.facebook.searchMarketplaceLocations({ query })nonestandard HTTP / success envelope1 credit per successful request.no
GET /v1/facebook/marketplace/searchSearch Facebook Marketplace listingsquery (query)client.facebook.searchMarketplace({ query, lat, lng, sortBy?, deliveryMethod?, cursor?, ... })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: suggested, distanceAscend, creationTimeDescend, priceAscend, priceDescendstandard HTTP / success envelope1 credit per successful request.no
GET /v1/facebook/ad-library/adsGet Facebook Ad Library adurl (query)client.facebook.getAdLibraryAd({ adId?, url?, includeTranscript?, trim? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/ad-library/ads/searchSearch Facebook Ad Library adsquery (query)client.facebook.searchAdLibraryAds({ query, sortBy?, searchType?, adType?, country?, status?, mediaType?, startDate?, endDate?, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: impressions, most-recentstandard HTTP / success envelope1 credit per successful request.no
GET /v1/facebook/ad-library/companies/adsList Facebook company adsnone documentedclient.facebook.listCompanyAds({ pageId?, companyName?, country?, status?, mediaType?, language?, sortBy?, startDate?, endDate?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: impressions, most-recentdata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/facebook/ad-library/companies/searchSearch Facebook ad library companiesquery (query)client.facebook.searchAdLibraryCompanies({ query })nonestandard HTTP / success envelope1 credit per successful request.no

Instagram

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/instagram/profiles/{handle}Get Instagram profilehandle (path)client.instagram.getProfile({ handle })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/instagram/profiles/{userId}/basicGet Instagram basic profileuserId (path)client.instagram.getBasicProfile({ userId })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/instagram/profiles/{handle}/postsList Instagram profile postshandle (path)client.instagram.getProfilePosts({ handle, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/instagram/profiles/{handle}/reelsList Instagram profile reelshandle (path)client.instagram.getProfileReels({ handle, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/instagram/profiles/{handle}/highlightsList Instagram profile highlightshandle (path)client.instagram.getProfileHighlights({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/instagram/highlights/{highlightId}Get Instagram highlightnone documentedclient.instagram.getHighlight({ highlightId })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/instagram/postsGet Instagram post or reelurl (query)client.instagram.getPost({ url, region?, trim?, downloadMedia? })nonedata.lookupStatus: found, not_found, restricted1 credit base, +10 with downloadMedia. Up to 11 credits max.downloadMedia=true
GET /v1/instagram/posts/commentsList Instagram post or reel commentsurl (query)client.instagram.getPostComments({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/instagram/posts/transcriptGet Instagram post transcripturl (query)client.instagram.getPostTranscript({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/instagram/search/profilesSearch Instagram profilesquery (query)client.instagram.searchProfiles({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/instagram/search/reelsSearch Instagram Reelsquery (query)client.instagram.searchReels({ query, datePosted?, page? })page via page, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/instagram/search/hashtagsSearch Instagram by hashtagnone documentedclient.instagram.searchHashtags({ hashtag, datePosted?, mediaType?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/instagram/reels/trendingList trending Instagram Reelsnone documentedclient.instagram.getTrendingReels()nonestandard HTTP / success envelope1 credit per successful request.no

LinkedIn

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/linkedin/profilesGet LinkedIn profilesurl (query)client.linkedin.getProfiles({ urls }) or client.linkedin.getProfile({ url })nonestandard HTTP / success envelope2 credits per profile URL requested. Up to 50 profiles per request (100 credits max).no
GET /v1/linkedin/profiles/postsList LinkedIn profile postsurl (query)client.linkedin.listProfilePosts({ url, startDate?, endDate?, onlyAuthoredPosts? })nonedata.lookupStatus: found, not_found2 credits attempt fee plus 2 credits per returned record. Up to 200 per request (402 credits max). limit default: 10.no
GET /v1/linkedin/people/searchSearch LinkedIn peoplenone documentedclient.linkedin.searchPeople({ firstName?, lastName? })nonedata.lookupStatus: found, not_found This search usually takes around one and a half minutes to complete, so expect a longer wait than most endpoints.2 credits attempt fee plus 2 credits per returned record. Up to 50 per request (102 credits max).no
GET /v1/linkedin/organizationsGet LinkedIn organization pageurl (query)client.linkedin.getOrganizations({ urls }) or client.linkedin.getOrganization({ url })noneThis endpoint covers company, school, and other LinkedIn organization pages. If you only need a standard company page lookup, the Company page endpoint may be a better fit.2 credits per organization URL requested. Up to 50 organizations per request (100 credits max).no
GET /v1/linkedin/companiesGet LinkedIn company pageurl (query)client.linkedin.getCompany({ url })nonedata.lookupStatus: found, not_found This endpoint is for LinkedIn company pages only. If you have a school URL or another organization page type, use the Organization page endpoint instead.1 credit per successful request.no
GET /v1/linkedin/companies/postsList LinkedIn company postsurl (query)client.linkedin.listCompanyPosts({ url, page? })page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found This endpoint is for LinkedIn company pages only. If you have a school URL or another organization page type, use the Organization page endpoint instead.1 credit per successful request.no
GET /v1/linkedin/postsGet LinkedIn post or articleurl (query)client.linkedin.getPost({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/linkedin/posts/transcriptGet LinkedIn post transcripturl (query)client.linkedin.getPostTranscript({ url })nonedata.lookupStatus: found, not_found, lookup_failed1 credit when a transcript is found; no charge when a transcript is unavailable.no
GET /v1/linkedin/posts/searchSearch LinkedIn postsquery (query)client.linkedin.searchPosts({ query, datePosted?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty posts array means no matching public posts were returned for this query and page. It is not an error.1 credit per successful request.no
GET /v1/linkedin/ad-library/adsGet LinkedIn Ad Library adurl (query)client.linkedin.getAdLibraryAd({ adId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/linkedin/ad-library/ads/searchSearch LinkedIn Ad Library adsnone documentedclient.linkedin.searchAdLibraryAds({ company?, keyword?, companyId?, countries?, startDate?, endDate?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/linkedin/jobsGet LinkedIn jobsurl (query)client.linkedin.getJobs({ urls })nonestandard HTTP / success envelope2 credits per job URL requested. Up to 50 jobs per request (100 credits max).no
GET /v1/linkedin/jobs/searchSearch LinkedIn jobsnone documentedclient.linkedin.searchJobs({ keyword, location, country?, timeRange?, jobType?, experienceLevel?, remote?, company?, locationRadius? })nonedata.lookupStatus: found, not_found This search usually takes around one and a half minutes.2 credits attempt fee plus 2 credits per returned record. Up to 1000 per request (2002 credits max). limit default: 10.no

YouTube

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/youtube/channelGet YouTube channelhandle (query), url (query)client.youtube.getChannel({ channelId?, handle?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/channels/videosList YouTube channel videoshandle (query)client.youtube.getChannelVideos({ channelId?, handle?, sortBy?, cursor?, includeExtras? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: latest, populardata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/channels/shortsList YouTube channel shortshandle (query)client.youtube.getChannelShorts({ channelId?, handle?, sortBy?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: latest, populardata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/playlistsGet YouTube playlistplaylistId (query)client.youtube.getPlaylist({ playlistId })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/community-postsGet YouTube community posturl (query)client.youtube.getCommunityPost({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/searchSearch YouTubequery (query)client.youtube.search({ query, uploadDate?, sortBy?, type?, duration?, region?, cursor?, includeExtras? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, popularUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from bucket sizes alone.1 credit per successful request.no
GET /v1/youtube/search/hashtagsSearch YouTube by hashtagnone documentedclient.youtube.searchHashtag({ hashtag, type?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from result count alone.1 credit per successful request.no
GET /v1/youtube/shorts/trendingList trending YouTube Shortsnone documentedclient.youtube.getTrendingShorts()noneTypically returns about 48 trending Shorts per call. Repeat the same request for another fresh batch (new and overlapping Shorts are both possible). No cursor or page parameters.1 credit per successful request.no
GET /v1/youtube/videosGet YouTube videourl (query)client.youtube.getVideo({ url, language? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/videos/commentsList YouTube video commentsurl (query)client.youtube.getVideoComments({ url, cursor?, order? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/youtube/videos/comments/repliesList YouTube comment repliesnone documentedclient.youtube.getVideoCommentReplies({ cursor })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/youtube/videos/transcriptGet YouTube video transcripturl (query)client.youtube.getVideoTranscript({ url, language? })nonedata.lookupStatus: found, not_found, lookup_failed1 credit per successful request.no

Twitter

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/twitter/profiles/{handle}Get Twitter profilehandle (path)client.twitter.getProfile({ handle })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no
GET /v1/twitter/profiles/{handle}/tweetsList Twitter profile tweetshandle (path)client.twitter.getProfileTweets({ handle, limit?, cursor?, includeReplies?, includePinned? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found2 credits per successful request.no
GET /v1/twitter/tweetsGet Twitter tweeturl (query)client.twitter.getTweet({ url, trim? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/twitter/tweets/repliesList Twitter tweet repliesurl (query)client.twitter.listTweetReplies({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope2 credits per successful request.no
GET /v1/twitter/tweets/transcriptGet Twitter tweet transcripturl (query)client.twitter.getTweetTranscript({ url })nonedata.lookupStatus: found, not_found, lookup_failed For video tweets only. Responses can take longer than typical lookups. Videos longer than about two minutes cannot be transcribed.1 credit per successful request.no
GET /v1/twitter/searchSearch Twitter postsquery (query)client.twitter.search({ query, section?, minRetweets?, minLikes?, minReplies?, limit?, startDate?, endDate?, language?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope2 credits per successful request.no
GET /v1/twitter/hashtagsSearch Twitter by hashtagnone documentedclient.twitter.searchHashtags({ hashtag, section?, limit?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope2 credits per successful request.no
GET /v1/twitter/communitiesGet Twitter communityurl (query)client.twitter.getCommunity({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/twitter/communities/tweetsList Twitter community tweetsurl (query)client.twitter.getCommunityTweets({ url })nonedata.lookupStatus: found, not_found lookupStatus: found may still return an empty data.tweets array.1 credit per successful request.no

Auth

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/whoamiWhoaminone documentedclient.auth.whoami()nonestandard HTTP / success envelopesee meta.creditsChargedno
GET /v1/balanceGet account balancenone documentedclient.billing.getBalance()nonestandard HTTP / success envelopesee meta.creditsChargedno

System

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
POST /v1/askAsk in natural languagenone documentedclient.ask({ query: "How many TikTok followers does MrBeast have?" })nonestandard HTTP / success envelopeRouting is free. The nested lookup bills at that endpoint's normal credit rate — see meta.creditsCharged.no
GET /healthHealth checknone documentedclient.health()nonestandard HTTP / success envelopesee meta.creditsChargedno

Telegram

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/telegram/channels/{handle}Get Telegram channelhandle (path)client.telegram.getChannel({ handle: "durov" })nonedata.lookupStatus: found, not_found, restricted1 credit per successful request.no
GET /v1/telegram/channels/{handle}/postsList Telegram channel postshandle (path)client.telegram.getChannelPosts({ handle: "durov", cursor? })cursor via cursordata.lookupStatus: found, not_found, restricted1 credit per successful request.no
GET /v1/telegram/channels/{handle}/posts/{postId}Get Telegram channel posthandle (path), postId (path)client.telegram.getChannelPost({ handle: "Premiumoji", postId: "93" })nonedata.lookupStatus: found, not_found, restricted1 credit per successful request.no

Linktree

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/linktree/profiles/{handle}Get Linktree profilehandle (path)client.linktree.getProfile({ handle: "miguelangeles" })nonedata.lookupStatus: found, not_found1 credit per successful request.no

Hacker News

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/hackernews/searchSearch Hacker Newsquery (query), author (query), domain (query), url (query)client.hackernews.search({ query: "Dropbox" })page via page, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/hackernews/feeds/{feed}List a Hacker News feednone documentedclient.hackernews.listFeed({ feed: "top" })offset via offset, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/hackernews/stories/{id}Get Hacker News storyid (path)client.hackernews.getStory({ id: 8863 })nonedata.lookupStatus: found, not_found, not_story1 credit per successful request.no
GET /v1/hackernews/stories/{id}/commentsGet Hacker News story commentsid (path)client.hackernews.getStoryComments({ id: 8863 })cursor via cursordata.lookupStatus: found, not_found, not_story3 credits per successful request.no
GET /v1/hackernews/items/{id}Get Hacker News itemid (path)client.hackernews.getItem({ id: 8863 })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/hackernews/comments/{id}/contextGet Hacker News comment contextid (path)client.hackernews.getCommentContext({ id: 9224 })nonedata.lookupStatus: found, not_found, not_comment2 credits per successful request.no
GET /v1/hackernews/users/{username}Get Hacker News user profileusername (path)client.hackernews.getUserProfile({ username: "jl" })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/hackernews/users/{username}/submissionsList Hacker News user submissionsusername (path)client.hackernews.getUserSubmissions({ username: "jl" })page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/hackernews/users/{username}/commentsList Hacker News user commentsusername (path)client.hackernews.getUserComments({ username: "jl" })page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/hackernews/users/{username}/favoritesList Hacker News user favoritesusername (path)client.hackernews.getUserFavorites({ username: "tptacek" })page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found, private_or_unavailable1 credit per successful request.no
GET /v1/hackernews/jobs/who-is-hiringList Who is Hiring jobsnone documentedclient.hackernews.listWhoIsHiring()page via page, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/hackernews/updatesGet Hacker News updatesnone documentedclient.hackernews.getUpdates()nonestandard HTTP / success envelope1 credit per successful request.no
GET /v1/hackernews/maxitemGet Hacker News max item idnone documentedclient.hackernews.getMaxItem()nonestandard HTTP / success envelope1 credit per successful request.no

Truth Social

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/truthsocial/profiles/{handle}Get Truth Social profilehandle (path)client.truthsocial.getProfile({ handle: "realDonaldTrump" })nonedata.lookupStatus: found, not_found2 credits per successful request.no
GET /v1/truthsocial/profiles/{handle}/postsList Truth Social profile postshandle (path)client.truthsocial.getProfilePosts({ handle: "realDonaldTrump", cursor?, limit? })cursor via cursordata.lookupStatus: found, not_found2 credits base, +2 with includeReplies. Up to 4 credits max.no
GET /v1/truthsocial/postsGet Truth Social posturl (query)client.truthsocial.getPost({ url: "https://truthsocial.com/@justthenews/116972401572691045" })nonedata.lookupStatus: found, not_found2 credits per successful request.no

Google

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/google/ad-library/companies/adsList Google company adsdomain (query)client.google.listCompanyAds({ domain?, advertiserId?, topic?, region?, startDate?, endDate?, platform?, format?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Google Ad Transparency only includes public ads.25 credits per successful request.no
GET /v1/google/ad-library/adsGet Google Ad Library adurl (query)client.google.getAdLibraryAd({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/google/ad-library/advertisers/searchSearch Google Ad Library advertisersquery (query)client.google.searchAdLibraryAdvertisers({ query, region? })nonestandard HTTP / success envelope1 credit per successful request.no

Pinterest

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/pinterest/searchSearch Pinterest pinsquery (query)client.pinterest.searchPins({ query, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit per successful request.no
GET /v1/pinterest/pinsGet Pinterest pinurl (query)client.pinterest.getPin({ url, trim? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/pinterest/profiles/{handle}/boardsList Pinterest profile boardshandle (path)client.pinterest.listProfileBoards({ handle, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/pinterest/boards/pinsList Pinterest board pinsurl (query)client.pinterest.listBoardPins({ url, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no

Threads

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/threads/profiles/{handle}Get Threads profilehandle (path)client.threads.getProfile({ handle })nonedata.lookupStatus: found, private, not_found1 credit per successful request.no

Bluesky

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/bluesky/profiles/{handle}Get Bluesky profilehandle (path)client.bluesky.getProfile({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/bluesky/profiles/{handle}/postsList Bluesky profile postshandle (path), userId (query)client.bluesky.getProfilePosts({ handle, cursor?, userId? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/bluesky/postsGet Bluesky posturl (query)client.bluesky.getPost({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no

Threads

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/threads/profiles/{handle}/postsList Threads profile postshandle (path)client.threads.getProfilePosts({ handle, trim? })nonedata.lookupStatus: found, not_found lookupStatus: found means the handle resolved; data.posts may still be empty.1 credit per successful request.no
GET /v1/threads/searchSearch Threads postsquery (query)client.threads.search({ query, startDate?, endDate?, trim? })nonestandard HTTP / success envelope1 credit per successful request.no
GET /v1/threads/postsGet Threads posturl (query)client.threads.getPost({ url, trim? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/threads/users/searchSearch Threads usersquery (query)client.threads.searchUsers({ query })nonestandard HTTP / success envelope1 credit per successful request.no

Reddit

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/reddit/subredditsGet Reddit subredditurl (query)client.reddit.getSubreddit({ subreddit } | { url }) — subreddit names are case-sensitivenonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/reddit/subreddits/{subreddit}/postsList Reddit subreddit postsnone documentedclient.reddit.listSubredditPosts({ subreddit, sort?, timeframe?, cursor? }) — subreddit is case-sensitivecursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/reddit/subreddits/searchSearch Reddit subredditquery (query)client.reddit.searchSubreddit({ subreddit, query?, sort?, timeframe?, cursor? }) — subreddit is case-sensitivecursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from data.totalResults alone.1 credit per successful request.no
GET /v1/reddit/posts/commentsList Reddit post commentsurl (query)client.reddit.listPostComments({ url, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/reddit/posts/transcriptGet Reddit post transcripturl (query)client.reddit.getPostTranscript({ url, language? })nonedata.lookupStatus: found, not_found, lookup_failed Accepts Reddit post permalinks and direct hosted video URLs.1 credit per successful request.no
GET /v1/reddit/searchSearch Reddit postsquery (query)client.reddit.search({ query, sortBy?, timeframe?, cursor?, trim? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, new, topUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from data.totalResults alone.1 credit per successful request.no

Rumble

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/rumble/searchSearch Rumblequery (query)client.rumble.search({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from data.totalResults alone.1 credit per successful request.no
GET /v1/rumble/channels/videosList Rumble channel videosurl (query)client.rumble.listChannelVideos({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/rumble/videosGet Rumble videourl (query)client.rumble.getVideo({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/rumble/videos/transcriptGet Rumble video transcripturl (query)client.rumble.getVideoTranscript({ url })nonedata.lookupStatus: found, not_found, lookup_failed1 credit when a transcript is found; no charge when captions are unavailable.no
GET /v1/rumble/videos/commentsList Rumble video commentsurl (query)client.rumble.listVideoComments({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no

Twitch

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/twitch/profiles/{handle}Get Twitch profilehandle (path)client.twitch.getProfile({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/twitch/profiles/{handle}/videosList Twitch profile videoshandle (path)client.twitch.listProfileVideos({ handle, filterBy?, sortBy? })sortBy: time, viewsdata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/twitch/profiles/{handle}/scheduleGet Twitch profile schedulehandle (path)client.twitch.getProfileSchedule({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/twitch/clipsGet Twitch clipurl (query)client.twitch.getClip({ url })nonedata.lookupStatus: found, not_found1 credit per successful request.no

GitHub

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/github/profiles/{handle}Get GitHub profilehandle (path)client.github.getProfile({ handle })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/github/profiles/{handle}/repositoriesList GitHub profile repositorieshandle (path)client.github.listProfileRepositories({ handle, cursor?, type?, sort?, direction? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/github/repositoriesGet GitHub repositoryurl (query)client.github.getRepository({ url })nonedata.lookupStatus: found, not_found Use this endpoint for one repository when you have a full owner/repo URL. To list every public repository for a user, use the profile repositories list endpoint instead.1 credit per successful request.no
GET /v1/github/profiles/{handle}/activityList GitHub profile activityhandle (path)client.github.listProfileActivity({ handle, year?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found This endpoint returns one month of public contribution activity per request. Keep the same year on follow-up calls and pass data.page.nextCursor as cursor to page backward through the year.1 credit per successful request.no
GET /v1/github/profiles/{handle}/followersList GitHub profile followershandle (path)client.github.listProfileFollowers({ handle, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/github/profiles/{handle}/followingList GitHub profile followinghandle (path)client.github.listProfileFollowing({ handle, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/github/profiles/{handle}/contributionsGet GitHub contribution graphhandle (path)client.github.getProfileContributions({ handle, year? })nonedata.lookupStatus: found, not_found year default: current calendar year. Contribution counts reflect public GitHub activity for that year.1 credit per successful request.no
GET /v1/github/trending/repositoriesList trending GitHub repositoriesnone documentedclient.github.listTrendingRepositories({ language?, since?, spokenLanguageCode? })noneUse since (daily, weekly, monthly) and optional language / spokenLanguageCode to narrow results. For trending developers instead of repositories, use the trending developers endpoint.1 credit per successful request.no
GET /v1/github/trending/developersList trending GitHub developersnone documentedclient.github.listTrendingDevelopers({ language?, since? })noneUse since (daily, weekly, monthly) and optional language to narrow results. Each developer may include popularRepository when GitHub highlights one. For trending repositories instead of developers, use the trending repositories endpoint.1 credit per successful request.no

Spotify

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/spotify/artistGet Spotify artisturl (query)client.spotify.getArtist({ artistId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/spotify/albumGet Spotify albumurl (query)client.spotify.getAlbum({ albumId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no
GET /v1/spotify/trackGet Spotify trackurl (query)client.spotify.getTrack({ trackId?, url? })nonedata.lookupStatus: found, not_found1 credit per successful request.no

Web

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/web/searchSearch the webquery (query)client.web.search({ query: "Social media scraping API", region: "US" })page via pagestandard HTTP / success envelope1 credit per successful request.no
GET /v1/web/markdownGenerate web page markdownurl (query), query (query)client.web.getMarkdown({ url: "https://www.socialfetch.dev/" })nonedata.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; content fields are null.1 credit per successful request.no
GET /v1/web/askAsk a question about a web pageurl (query)client.web.ask({ url: "https://www.socialfetch.dev/", q: "What is this page about?" })nonedata.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; answer is null.1 credit per successful request.no
GET /v1/web/htmlGenerate web page HTMLurl (query)client.web.getHtml({ url: "https://www.socialfetch.dev/" })nonedata.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; html is null.1 credit per successful request.no
GET /v1/web/crawlCrawl web pagesurl (query)client.web.crawl({ urls: ["https://www.socialfetch.dev/"] })nonestandard HTTP / success envelope1 credit per URL requested. Up to 5 URLs per request (5 credits max).no

On this page