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. Failed requests are free.no
GET /v1/tiktok/profiles/{handle}/videosList TikTok profile videoshandle (path), userId (query)client.tiktok.getProfileVideos({ handle, sortBy?, cursor?, userId?, region?, trim?, includePinned? })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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/profiles/{handle}/regionGet TikTok profile regionhandle (path)client.tiktok.getProfileRegion({ handle })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/tiktok/profiles/{handle}/audienceGet TikTok profile audiencehandle (path)client.tiktok.getProfileAudience({ handle })nonedata.lookupStatus: found, not_found30 credits. Failed requests are free.no
GET /v1/tiktok/profiles/{handle}/engagementGet TikTok profile engagement audithandle (path)HTTP onlynonedata.lookupStatus: found, private, not_found5 credits. Failed requests are free.no
GET /v1/tiktok/profiles/{handle}/liveGet TikTok live streamhandle (path)client.tiktok.getProfileLive({ handle })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/tiktok/liveGet TikTok live infouserId (query)client.tiktok.getLiveInfo({ roomId, userId })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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-postedThis returns videos only. Use GET /v1/tiktok/search/top when you need Top results that also include photo carousels.1 credit. Failed requests are free.no
GET /v1/tiktok/search/topSearch TikTok Top resultsquery (query)client.tiktok.searchTop({ query, datePosted?, sortBy?, region?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, most-liked, date-postedTikTok Top search returns videos and photo carousels. Use GET /v1/tiktok/search for videos-only keyword search, or GET /v1/tiktok/search/hashtags for hashtag search.1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/search/suggestionsGet TikTok search suggestionsquery (query)client.tiktok.searchSuggestions({ query, region? })noneAn empty suggestions array is a valid success when there are no autocomplete matches. Use this for typeahead query suggestions. For videos use GET /v1/tiktok/search, for hashtags GET /v1/tiktok/search/hashtags, for users GET /v1/tiktok/users/search.1 credit. Failed requests are free.no
GET /v1/tiktok/videosGet TikTok videourl (query)client.tiktok.getVideo({ url, region?, trim?, downloadMedia? })nonedata.lookupStatus: found, not_found1 credit. +10 credits for downloadMedia. Max 11 credits. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/videos/downloadDownload TikTok video or photo post mediaurl (query)HTTP onlynonedata.lookupStatus: found, not_found11 credits when media is downloaded. 1 credit when the post is not found or has no downloadable media.no
GET /v1/tiktok/videos/transcriptGet TikTok video transcripturl (query)client.tiktok.getVideoTranscript({ url, language?, useAiFallback?, allowLongTranscription? })nonedata.lookupStatus: found, not_found1 credit. +10 credits when AI transcribes the audio (useAiFallback). +10 credits per started minute of AI transcript, replacing the flat +10 (allowLongTranscription). Max 601 credits. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/collections/videosList TikTok collection videosurl (query)client.tiktok.listCollectionVideos({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty data.videos array can mean no public videos in this collection, or other cases—there is no lookupStatus field on this route.1 credit. Failed requests are free.no
GET /v1/tiktok/songsGet TikTok songid (query)client.tiktok.getSong({ id })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/shop/productsList TikTok Shop store productsurl (query)client.tiktok.listShopProducts({ url, cursor?, region?, sortBy? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: top, new-releasesdata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/tiktok/productsGet TikTok Shop producturl (query)client.tiktok.getProduct({ url, region? })nonestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/tiktok/ad-library/adsGet TikTok Ad Library adurl (query)client.tiktok.getAdLibraryAd({ adId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/tiktok/ad-library/ads/searchSearch TikTok Ad Library adsquery (query)client.tiktok.searchAdLibraryAds({ query?, advertiserName?, advertiserBusinessId?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.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.hasMoredata.lookupStatus: found, not_found Use data.lookupStatus to distinguish not_found from found with an empty posts array (including private or restricted profiles that return no posts). Call GET /v1/facebook/profiles when you need private vs other profile states; this list route only exposes found / not_found.1 credit. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free.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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free.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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free.no
GET /v1/facebook/profiles/eventsList Facebook profile eventsurl (query)client.facebook.getProfileEvents({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found lookupStatus: found with an empty events array is the usual empty outcome. It can mean the Page has no public events, or that the URL did not resolve. This route cannot tell those apart. Use GET /v1/facebook/profiles when you need an existence check. not_found appears only when Facebook explicitly signals a miss. This lists events hosted by a public Facebook Page. It is not city-wide event explore or event search by name.1 credit. Failed requests are free.no
GET /v1/facebook/postsGet Facebook post or reelurl (query)client.facebook.getPost({ url, includeComments?, includeTranscript? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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.hasMoredata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/facebook/posts/transcriptGet Facebook post transcripturl (query)client.facebook.getPostTranscript({ url })nonedata.lookupStatus: found, not_found, lookup_failed1 credit. Failed requests are free.no
GET /v1/facebook/groupsGet Facebook groupurl (query)client.facebook.getGroup({ url?, groupId? })nonedata.lookupStatus: found, not_found lookupStatus: not_found often means the group URL or ID was wrong, private, or unresolved. Pass a full Facebook group URL (facebook.com/groups/{id-or-slug}/…, including /about) or a numeric groupId. Profile and Page URLs belong on GET /v1/facebook/profiles. For the group feed, use GET /v1/facebook/groups/posts.1 credit. Failed requests are free.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. Facebook 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. Failed requests are free.no
GET /v1/facebook/marketplace/locations/searchSearch Facebook Marketplace locationsquery (query)client.facebook.searchMarketplaceLocations({ query })nonestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/facebook/marketplace/itemsGet Facebook Marketplace itemurl (query)client.facebook.getMarketplaceItem({ itemId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/facebook/events/searchSearch Facebook eventsquery (query)client.facebook.searchEvents({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/facebook/eventsList Facebook city eventsurl (query)client.facebook.listCityEvents({ url, time?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty data.events array means no matching events in that time window for the requested city explore URL. This route has no lookupStatus field.1 credit. Failed requests are free.no
GET /v1/facebook/events/detailsGet Facebook eventurl (query)client.facebook.getEvent({ eventId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/facebook/ad-library/ads/searchSearch Facebook Ad Library adsquery (query)client.facebook.searchAdLibraryAds({ query, sortBy?, searchType?, adType?, country?, language?, 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. Failed requests are free.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. Failed requests are free.no
GET /v1/facebook/ad-library/companies/searchSearch Facebook ad library companiesquery (query)client.facebook.searchAdLibraryCompanies({ query })nonestandard HTTP / success envelope1 credit. Failed requests are free.no

Instagram

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v2/instagram/profiles/{profile}Get Instagram profilenone documentedclient.instagram.getProfileV2({ profile, include? })nonedata.lookupStatus: found, private, not_found recentMedia and about are null when not asked for, and when they can't be served (a private account's grid, an unavailable panel); then they are not charged and meta.creditsCharged is lower. not_found has a null profile. One profile lookup for a handle, a profile URL or a numeric user id. Add include=recentMedia for the latest grid posts and include=about for the country and join month; each adds 1 credit.1 credit. +1 credit for recentMedia. +1 credit for about. Max 3 credits. You're only charged for what's returned.no
GET /v2/instagram/profiles/{profile}/mediaList Instagram profile medianone documentedclient.instagram.listProfileMediaV2({ profile, tab?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, private, not_found A private or missing profile returns media: [] with lookupStatus private or not_found (still 1 credit). A public profile with nothing in that list is found with an empty media. In the Reels list taggedUsers is null, because that list doesn't say who is tagged; use GET /v2/instagram/media/{media} for the tags. One list for a profile's posts (tab=posts, the default), Reels (tab=reels) or the posts it is tagged in (tab=tagged), by handle, profile URL or numeric user id. Each page is 1 credit; pass page.nextCursor as cursor with the same tab while page.hasMore is true.1 credit. Failed requests are free.no
GET /v2/instagram/profiles/{profile}/highlightsList Instagram profile highlightsnone documentedclient.instagram.getProfileHighlightsV2({ profile })nonedata.lookupStatus: found, private, not_found highlights is empty for an account with none, and for a private or missing account (read lookupStatus). A lookup that finds the account is 1 credit whatever it holds. mediaCount, createdAt and updatedAt can be null on a highlight, and its cover can be the small square one: some fields can be null on a profile's first lookup. Lists a profile's story highlights (title, cover, story count, dates) for a handle, a profile URL or a numeric user id. Pass a highlight's id to GET /v2/instagram/highlights/{highlightId} for the stories inside it.1 credit. Failed requests are free.no
GET /v2/instagram/profiles/{profile}/storiesList Instagram profile storiesnone documentedclient.instagram.getProfileStoriesV2({ profile })nonedata.lookupStatus: found, private, not_found media is empty when the account has no live story, and for a private or missing account (read lookupStatus). A lookup that finds the account is 1 credit whatever it holds. Some fields can be null on a profile's first lookup. Lists a profile's live stories (posted in the last 24 hours), oldest first, for a handle, a profile URL or a numeric user id. Each story is the media object every v2 list returns, with kind: story and its expiry, link stickers and mentions under story. For saved stories use GET /v2/instagram/profiles/{profile}/highlights.1 credit. Failed requests are free.no
GET /v2/instagram/profiles/{profile}/followingList Instagram profile followingnone documentedclient.instagram.listProfileFollowingV2({ profile, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, private, not_found Check data.lookupStatus: private and not_found come back with an empty accounts list. found with an empty list means the profile follows no one (or the list has ended). A page holds up to 25 accounts and is billed once; keep following page.nextCursor while page.hasMore is true. The accounts a profile follows, one page of up to 25 per call, for a handle, a profile URL or a numeric user id. Each account is the same profile summary every v2 endpoint uses. Followers are not available.1 credit. Failed requests are free.no
GET /v2/instagram/highlights/{highlightId}Get Instagram highlightnone documentedclient.instagram.getHighlightV2({ highlightId })nonedata.lookupStatus: found, not_found not_found has a null highlight and an empty media: the highlight doesn't exist, was deleted, or can't be shown (for example when its account is private). It still costs 1 credit. One story highlight by its id (or an instagram.com /stories/highlights/ URL): the highlight and every story inside it, in the same media object every v2 list returns, with kind: story. Get highlight ids from GET /v2/instagram/profiles/{profile}/highlights.1 credit. Failed requests are free.no
GET /v2/instagram/profiles/{profile}/engagementGet Instagram profile engagement auditnone documentedclient.instagram.getProfileEngagementV2({ profile })nonedata.lookupStatus: found, private, not_found Check data.lookupStatus and data.audit.canCalculateEngagement: a private or missing profile has no audit to calculate (empty posts, null rates, no written summary) and costs 1 credit instead of 5, and profile is null when it is not found. audit.insight is also null when the written summary could not be generated; the rest of the audit stands. An engagement-rate audit of a profile's latest posts (up to 12), for a handle, a profile URL or a numeric user id. Each sample post is the same media object every v2 endpoint returns, with its engagement rate beside it.5 credits for an audited profile. 1 credit when the profile is private or not found.no
GET /v2/instagram/reels/searchSearch Instagram Reelsquery (query)client.instagram.searchReelsV2({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreA page can hold few Reels, or none while page.hasMore is true (Instagram mixes accounts and photos into the pages). Keep paging until page.hasMore is false. An unusual query returns an empty list with no more pages. Use this for Reels keyword search. Each result is the same media object every v2 endpoint uses, with kind set to reel. It has no page and no datePosted: results are in Instagram's relevance order and pages are cursor-linked. For recent posts under a tag use GET /v2/instagram/hashtags/{hashtag}/media?tab=recent.1 credit. Failed requests are free.no
GET /v2/instagram/profiles/searchSearch Instagram profilesquery (query)client.instagram.searchProfilesV2({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoreAn empty accounts list means nothing matched. A page can be short, and an account shown on an earlier page isn't repeated. Keep following page.nextCursor (with the same query) while page.hasMore is true. Find Instagram accounts by name or keyword. Hits are summaries without bio or counts; use GET /v2/instagram/profiles/{profile} for those.1 credit. Failed requests are free.no
GET /v2/instagram/hashtags/searchSearch Instagram hashtagsquery (query)client.instagram.searchHashtagsV2({ query })noneAn empty hashtags list means nothing matched the query; it is still billed. Finds hashtags that match a keyword, in Instagram's ranking, each with its post count: one page of up to about 55, no cursor. Use it to discover tags; then read a tag with GET /v2/instagram/hashtags/{hashtag} or its posts with GET /v2/instagram/hashtags/{hashtag}/media. To look up a tag named exactly search, write it %23search in the path.1 credit. Failed requests are free.no
GET /v2/instagram/locations/searchSearch Instagram locationsquery (query)client.instagram.searchLocationsV2({ query })noneAn empty locations list is rare, because matching is fuzzy: a query with no real match can still return loosely related places, so check each name. Search is billed once per call. Find Instagram places by name: one set of 25 to 30 matches per query, in Instagram's relevance order, each with id, name, coordinates, and often an address or city. Use an id with GET /v2/instagram/locations/{locationId} for the place and GET /v2/instagram/locations/{locationId}/media for the posts tagged there. There is no cursor: refine the query instead.1 credit. Failed requests are free.no
GET /v2/instagram/audio/searchSearch Instagram audioquery (query)client.instagram.searchAudioV2({ query })noneInstagram matches loosely, so an unusual query still returns audio. Results come as one ranked set; there is no cursor. reelCount is null when Instagram only gives a rounded figure. Find songs and original sounds by name. Pass an audio[].id as audioId to GET /v2/instagram/audio/{audioId} for the full details, or to GET /v2/instagram/audio/{audioId}/media for the Reels that use it.1 credit. Failed requests are free.no
GET /v2/instagram/topics/{topic}Get an Instagram topicnone documentedclient.instagram.getTopicV2({ topic, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found comes back with topic: null and an empty media list and means Instagram has no Popular page for that topic (try a broader word). topic is filled on the first page only; follow page.nextCursor with the same {topic} while page.hasMore is true, and each page is billed once. This feed is intermittently unavailable and answers 503 temporarily_unavailable (with a Retry-After header) when it is; nothing is charged for a 503, so retry the same request after a few seconds. Instagram's Popular page for a topic: its title, description and related searches, plus the posts Instagram curates for it. For a hashtag use GET /v2/instagram/hashtags/{hashtag}.1 credit. Failed requests are free.no
GET /v2/instagram/reels/trendingList trending Instagram Reelsnone documentedclient.instagram.listTrendingReelsV2()noneA batch can come back short or empty; call again. This feed is intermittently unavailable and answers 503 temporarily_unavailable (with a Retry-After header) when it is. Nothing is charged for a 503, so retry the same request after a few seconds. A fresh batch of the Reels Instagram is trending right now, as the same media objects every v2 endpoint returns (kind is reel). It takes no parameters and has no page: call it again for another batch and expect some overlap. For Reels on a keyword use GET /v2/instagram/reels/search; for a topic's curated posts use GET /v2/instagram/topics/{topic}.1 credit. Failed requests are free.no
GET /v2/instagram/media/{media}Get Instagram medianone documentedclient.instagram.getMediaV2({ media, include? })nonedata.lookupStatus: found, not_found not_found has a null media: the post doesn't exist, was deleted, or belongs to a private account. It still costs 1 credit. files is null when not asked for, when the post is not found, and when the files couldn't be hosted; then the 10 credits are not charged and meta.creditsCharged is lower. One post or Reel in full detail, by shortcode, post or Reel URL, or numeric media id (share links are a 400). Returns the same media object every v2 list returns, with taggedUsers always filled. Add include=files (+10 credits) to also copy the post's image, video or every carousel item to our media CDN and get the links in files. Comments are not included.1 credit per lookup, found or not found. +10 credits per 16 MB of files, max 60 (most posts: 10). Files that aren't hosted are free.no
GET /v2/instagram/media/{media}/commentsList Instagram media commentsnone documentedclient.instagram.listMediaCommentsV2({ media, sort?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found means the post doesn't exist, was deleted, or belongs to a private account (in both orders). found with an empty comments list means the post has no comments, comments are off, or the list has ended (the last page can be empty while page.hasMore was true, and is still billed as a page). replyCount can exceed the replies you can list, because Instagram hides some. If one order is briefly unavailable (503), retry or try the other sort. A page is billed once, only when it is served. One page of the top-level comments on a post or Reel, by shortcode, post or Reel URL, or numeric media id (share links are a 400). sort=top (the default) is Instagram's ranked order, the one the app shows first, with each comment's reply count and whether the owner pinned or liked it. sort=newest lists the latest comments first; where a view doesn't report them, reply counts and the owner flags are null. To read a thread, call GET /v2/instagram/media/{media}/comments/{commentId}/replies with a comment's id. Keep media and sort the same on every page: a cursor works only for the post and order that issued it.1 credit. Failed requests are free.no
GET /v2/instagram/media/{media}/comments/{commentId}/repliesList Instagram comment repliescommentId (path)client.instagram.listCommentRepliesV2({ media, commentId, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found means the comment doesn't exist on this post (or the post doesn't exist or is private). found with an empty comments list means the comment has no replies, or the thread has ended. A parent comment's replyCount can exceed the replies you can list, because Instagram hides some. A page is billed once. One page of the replies to a comment, oldest first, as the same comment object the comments list returns. Pass the post (shortcode, post or Reel URL, or numeric media id) and the parent comment's id from GET /v2/instagram/media/{media}/comments; a comment id that isn't digits is a 400. A reply has no reply count (replyCount is null). Keep media and commentId the same on every page: a cursor works only for the thread that issued it.1 credit. Failed requests are free.no
GET /v2/instagram/media/{media}/transcriptGet Instagram media transcriptnone documentedclient.instagram.getMediaTranscriptV2({ media })nonedata.lookupStatus: found, not_found found with a null transcript.text means the video has no speech. not_found has a null transcript: the post doesn't exist, was deleted, is on a private account, or has no video (a photo post). Both still cost 1 credit. What is said in one post or Reel video, by shortcode, post or Reel URL, or numeric media id (share links are a 400). Returns the spoken text only: language and segments are null. A video that is too long to transcribe is a 400 video_too_long_for_transcription (still billed 1 credit). For the video's length, caption or author, use GET /v2/instagram/media/{media}.1 credit. Failed requests are free.no
GET /v2/instagram/audio/{audioId}Get Instagram audionone documentedclient.instagram.getAudioV2({ audioId })nonedata.lookupStatus: found, not_found Check data.lookupStatus: not_found comes back with audio null and means Instagram doesn't know the id. found always has an audio, even when no Reels use it. The song or original sound behind an audio id: its title, artist, length, whether it is explicit or trending, and how many Reels use it. Take the id from GET /v2/instagram/audio/search or from the audio.id of a Reel. To list the Reels that use the audio, call GET /v2/instagram/audio/{audioId}/media.1 credit. Failed requests are free.no
GET /v2/instagram/audio/{audioId}/mediaList Instagram audio medianone documentedclient.instagram.listAudioMediaV2({ audioId, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found comes back with an empty media list and means Instagram doesn't know the id. found with an empty list means no Reels use the audio (or the list has ended). A page holds up to 12 Reels and is billed once; keep following page.nextCursor while page.hasMore is true. One page of the Reels that use an audio, as the same media objects every v2 endpoint returns, in Instagram's ranking for the audio. The first page also carries audio, the song or sound itself. Take the id from GET /v2/instagram/audio/search or from the audio.id of a Reel.1 credit. Failed requests are free.no
GET /v2/instagram/hashtags/{hashtag}Get Instagram hashtagnone documentedclient.instagram.getHashtagV2({ hashtag })nonedata.lookupStatus: found, not_found Check data.lookupStatus: not_found means nobody has used the hashtag, and data.hashtag is null. It is still billed. One hashtag's id, post count and trending flag, by name (with or without #, any letter case) or by an instagram.com tag link (instagram.com/explore/tags/nike/). To list the posts under it use GET /v2/instagram/hashtags/{hashtag}/media; to find hashtags from a keyword use GET /v2/instagram/hashtags/search. A tag literally named search is written %23search.1 credit. Failed requests are free.no
GET /v2/instagram/hashtags/{hashtag}/mediaList Instagram hashtag medianone documentedclient.instagram.listHashtagMediaV2({ hashtag, tab?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found means nobody has used the hashtag. found with an empty media list is a tag whose posts Instagram doesn't show publicly, or the end of the feed. A page can hold few items while more pages remain: keep following page.nextCursor with the same tab while page.hasMore is true. A page is billed once. The live feed under a hashtag: tab=top (default) for the posts and Reels Instagram ranks first, tab=recent for the newest posts, tab=reels for Reels only. Each item is the same media object every v2 list returns. The feeds show what Instagram shows now and reach back days, not months; there is no date filter, so use tab=recent and stop paging at the date you need. For the tag's post count use GET /v2/instagram/hashtags/{hashtag}.1 credit. Failed requests are free.no
GET /v2/instagram/locations/{locationId}Get Instagram locationnone documentedclient.instagram.getLocationV2({ locationId })nonedata.lookupStatus: found, not_found not_found has a null location: the id doesn't exist. It still costs 1 credit. A malformed id is a 400 and costs nothing. One place by Instagram location id (digits, or an instagram.com location URL): name, coordinates and category. To find the id of a place by name use GET /v2/instagram/locations/search; the id is also location.id on a post. To list posts tagged there use GET /v2/instagram/locations/{locationId}/media.1 credit. Failed requests are free.no
GET /v2/instagram/locations/{locationId}/mediaList Instagram location medianone documentedclient.instagram.listLocationMediaV2({ locationId, tab?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Check data.lookupStatus: not_found means the location id doesn't exist. found with an empty media list is a place nobody has tagged, or the end of the feed. Keep following page.nextCursor with the same tab while page.hasMore is true. A page is billed once. The live feed of posts and Reels tagged at a place, by Instagram location id (digits, or an instagram.com location URL): tab=top (default) for the posts Instagram ranks first, tab=recent for the newest. Each item is the same media object every v2 list returns. Find the id with GET /v2/instagram/locations/search. For the place's own name and coordinates use GET /v2/instagram/locations/{locationId}.1 credit. Failed requests are free.no

LinkedIn

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v2/linkedin/profilesGet LinkedIn profilehandle (query)client.linkedin.getProfile({ handle: "marclouvion" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/profiles/batchGet LinkedIn profilesurl (query)client.linkedin.getProfiles({ url: ["https://www.linkedin.com/in/marclouvion/"] })nonestandard HTTP / success envelopeUp to 3 credits per URL. Up to 50 URLs per request. Max 150 credits. You're only charged for what's returned, including verified misses.no
GET /v2/linkedin/people/resolveResolve LinkedIn personhandle (query)client.linkedin.resolvePerson({ handle: "marclouvion" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/postsList LinkedIn profile postsnone documentedclient.linkedin.getProfilePosts({ entityId: "1441" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/commentsList LinkedIn profile commentsnone documentedclient.linkedin.getProfileComments({ entityId: "1441" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/employment-historyGet LinkedIn grouped employment historynone documentedclient.linkedin.getEmploymentHistory({ entityId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/recommendationsGet LinkedIn recommendationsnone documentedclient.linkedin.getRecommendations({ entityId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/interestsGet LinkedIn interestsnone documentedclient.linkedin.getInterests({ entityId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/{entityId}/similarList similar LinkedIn peoplenone documentedclient.linkedin.getSimilarPeople({ entityId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizationsGet LinkedIn organizationid (query)client.linkedin.getOrganization({ slug: "stripe" })nonedata.lookupStatus: found, not_found6 credits. +3 credits for slug. Max 9 credits. You're only charged for what's returned.no
GET /v2/linkedin/organizations/batchGet LinkedIn organizationsurl (query)client.linkedin.getOrganizations({ url: ["https://www.linkedin.com/company/stripe/"] })nonestandard HTTP / success envelopeUp to 9 credits per URL. Up to 50 URLs per request. Max 450 credits. You're only charged for what's returned, including verified misses.no
GET /v2/linkedin/organizations/resolveResolve LinkedIn organizationnone documentedclient.linkedin.resolveOrganization({ slug: "stripe" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/{organizationId}/postsList LinkedIn organization postsnone documentedclient.linkedin.getOrganizationPosts({ organizationId: "1441" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/jobsList LinkedIn organization jobsnone documentedclient.linkedin.getOrganizationJobs({ organizationIds: "1441,1035" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/{organizationId}/headcountGet LinkedIn organization headcountnone documentedclient.linkedin.getOrganizationHeadcount({ organizationId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/{organizationId}/affiliatedList affiliated LinkedIn organizationsnone documentedclient.linkedin.getAffiliatedOrganizations({ organizationId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/{organizationId}/similarList similar LinkedIn organizationsnone documentedclient.linkedin.getSimilarOrganizations({ organizationId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/jobs/{jobId}Get LinkedIn jobnone documentedclient.linkedin.getJob({ jobId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/jobs/batchGet LinkedIn jobsurl (query)client.linkedin.getJobs({ url: ["https://www.linkedin.com/jobs/view/4468687278/"] })nonestandard HTTP / success envelopeUp to 3 credits per URL. Up to 50 URLs per request. Max 150 credits. You're only charged for what's returned, including verified misses.no
GET /v2/linkedin/jobs/{jobId}/hiring-teamList LinkedIn hiring teamnone documentedclient.linkedin.getHiringTeam({ jobId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/jobs/{jobId}/related-viewsList related LinkedIn jobsnone documentedclient.linkedin.getRelatedJobs({ jobId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/jobs/{jobId}/similarList similar LinkedIn jobsnone documentedclient.linkedin.getSimilarJobs({ jobId: "1441" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/activities/{activityId}Get LinkedIn activitynone documentedclient.linkedin.getActivity({ activityId: "urn:li:activity:7238942337892753408" })nonedata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/activities/{activityId}/commentsList LinkedIn activity commentsnone documentedclient.linkedin.getActivityComments({ activityId: "urn:li:activity:7238942337892753408" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, date_posteddata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/activities/{activityId}/reactionsList LinkedIn activity reactionsnone documentedclient.linkedin.getActivityReactions({ activityId: "urn:li:activity:7238942337892753408" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/people/searchSearch LinkedIn peoplenone documentedclient.linkedin.searchPeople({ keyword: "technology" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/organizations/searchSearch LinkedIn organizationsnone documentedclient.linkedin.searchOrganizations({ keyword: "technology" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found3 credits. Failed requests are free.no
GET /v2/linkedin/jobs/searchSearch LinkedIn jobsnone documentedclient.linkedin.searchJobs({ keyword: "software engineer" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, date_posteddata.lookupStatus: found, not_found6 credits. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/linkedin/postsGet LinkedIn post or articleurl (query)client.linkedin.getPost({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Free 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. Failed requests are free.no
GET /v1/linkedin/ad-library/adsGet LinkedIn Ad Library adurl (query)client.linkedin.getAdLibraryAd({ adId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/youtube/playlistsGet YouTube playlistplaylistId (query)client.youtube.getPlaylist({ playlistId, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/youtube/community-postsGet YouTube community posturl (query)client.youtube.getCommunityPost({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/youtube/videosGet YouTube videourl (query)client.youtube.getVideo({ url, language? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/youtube/videos/comments/analysisAnalyze YouTube video commentsurl (query)HTTP onlynonedata.lookupStatus: found, not_found2 credits. Failed requests are free.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. Failed requests are free.no
GET /v1/youtube/videos/transcriptGet YouTube video transcripturl (query)client.youtube.getVideoTranscript({ url, language?, originalAudio? })nonedata.lookupStatus: found, not_found, lookup_failed1 credit. Failed requests are free.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. Failed requests are free.no

Twitter

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/twitter/profiles/{handle}Get Twitter profilehandle (path)client.twitter.getProfile({ handle, by? })nonedata.lookupStatus: found, private, not_found1 credit. Failed requests are free.no
GET /v1/twitter/profilesGet multiple Twitter profileshandle (query), id (query)client.twitter.getProfilesBatch({ handles?, ids? })nonestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/aboutGet Twitter account transparency detailshandle (path)client.twitter.getProfileAbout({ handle, by? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/followersList Twitter profile followershandle (path)client.twitter.listProfileFollowers({ handle, by?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/followers/verifiedList verified followers of a Twitter profilehandle (path)client.twitter.listProfileVerifiedFollowers({ handle, by?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/followers/idsList follower ids of a Twitter profilehandle (path)client.twitter.listProfileFollowerIds({ handle, by?, cursor?, limit? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/followingList accounts a Twitter profile followshandle (path)client.twitter.listProfileFollowing({ handle, by?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/following/idsList following ids of a Twitter profilehandle (path)client.twitter.listProfileFollowingIds({ handle, by?, limit?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/subscriptionsList Twitter profile subscriptionshandle (path)client.twitter.listProfileSubscriptions({ handle, by?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private Most accounts have no subscriptions; an empty list with lookupStatus found is normal.1 credit. Failed requests are free.no
GET /v1/twitter/friendshipsCheck Twitter follow relationshipnone documentedclient.twitter.getFriendship({ source, target, by? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitter/profiles/{handle}/tweetsList Twitter profile tweetshandle (path)client.twitter.getProfileTweets({ handle, by?, limit?, cursor?, includeReplies?, includePinned? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, private, not_found1 credit. Failed requests are free.no
GET /v1/twitter/tweetsGet Twitter tweeturl (query)client.twitter.getTweet({ url, trim? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitter/tweets/batchGet multiple tweetsurl (query)client.twitter.getTweetsBatch({ ids })nonestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/twitter/tweets/quotesList quote tweets of a tweeturl (query)client.twitter.listTweetQuotes({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/tweets/retweetsList accounts that retweeted a tweeturl (query)client.twitter.listTweetRetweeters({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private1 credit. Failed requests are free.no
GET /v1/twitter/tweets/repliesList Twitter tweet repliesurl (query)client.twitter.listTweetReplies({ url, cursor?, sortBy? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, recency, likesdata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/twitter/searchSearch Twitter postsquery (query)client.twitter.search({ query, section?, limit?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.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 envelope1 credit. Failed requests are free.no
GET /v1/twitter/communitiesGet Twitter communityurl (query)client.twitter.getCommunity({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitter/communities/tweetsList Twitter community tweetsurl (query)client.twitter.getCommunityTweets({ url, cursor?, sortBy? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, recencydata.lookupStatus: found, not_found lookupStatus: found may still return an empty data.tweets array.1 credit. Failed requests are free.no
GET /v1/twitter/communities/membersList Twitter community membersurl (query)client.twitter.listCommunityMembers({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found lookupStatus: found may still return an empty data.members array, including for an unknown community id. A confirmed miss maps to lookupStatus: not_found.1 credit. Failed requests are free.no
GET /v1/twitter/communities/searchSearch Twitter communitiesquery (query)client.twitter.searchCommunities({ query, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/twitter/listsGet Twitter listurl (query)client.twitter.getList({ url })nonedata.lookupStatus: found, not_found, private Unknown lists usually return lookupStatus: not_found. Some valid-looking list ids return an uncharged 502 lookup_failed — that is not a client input error; confirm the list on X or try another id.1 credit. Failed requests are free.no
GET /v1/twitter/lists/tweetsList tweets from a Twitter listurl (query)client.twitter.listListTweets({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private lookupStatus: found may still return an empty data.tweets array when the list id is unknown or the list has no tweets.1 credit. Failed requests are free.no
GET /v1/twitter/lists/membersList members of a Twitter listurl (query)client.twitter.listListMembers({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private lookupStatus: found may still return an empty data.users array when the list id is unknown or the list has no members.1 credit. Failed requests are free.no
GET /v1/twitter/lists/followersList followers of a Twitter listurl (query)client.twitter.listListFollowers({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, private lookupStatus: found may still return an empty data.users array.1 credit. Failed requests are free.no
GET /v1/twitter/spacesGet Twitter Spaceurl (query)client.twitter.getSpace({ id })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitter/spaces/streamGet Twitter Space stream URLurl (query)client.twitter.getSpaceStream({ id })nonedata.lookupStatus: found, not_found, unavailable Uses two lookups; ended Spaces without replay return lookupStatus unavailable.1 credit. Failed requests are free.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 for the total.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. Failed requests are free.no
GET /v1/telegram/channels/{handle}/postsList Telegram channel postshandle (path)client.telegram.getChannelPosts({ handle: "durov", cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, restricted1 credit. Failed requests are free.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. Failed requests are free.no

Amazon

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/amazon/shopGet Amazon Shop pageurl (query)client.amazon.getShop({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found Empty data.lists, data.trendingPicks, or data.curations with lookupStatus: found means this storefront page has no collections (or this page of a paginated shop is empty). data.lists mixes idea lists (kind: list) and shoppable photos (kind: photo). The cursor pages data.lists; profile, trendingPicks, and curations are first-page fields. This is not a product PDP lookup. Pass an amazon.com/shop/... creator storefront URL. Extra path segments such as /list/... are resolved to the storefront. Product pages (/dp/) and brand stores (/stores/) are rejected with HTTP 400.1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/hackernews/feeds/{feed}List a Hacker News feednone documentedclient.hackernews.listFeed({ feed: "top" })page via page, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/hackernews/stories/{id}Get Hacker News storyid (path)client.hackernews.getStory({ id: 8863 })nonedata.lookupStatus: found, not_found, not_story1 credit. Failed requests are free.no
GET /v1/hackernews/stories/{id}/commentsGet Hacker News story commentsid (path)client.hackernews.getStoryComments({ id: 8863 })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found, not_story3 credits. Failed requests are free.no
GET /v1/hackernews/items/{id}Get Hacker News itemid (path)client.hackernews.getItem({ id: 8863 })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/hackernews/users/{username}Get Hacker News user profileusername (path)client.hackernews.getUserProfile({ username: "jl" })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/hackernews/updatesGet Hacker News updatesnone documentedclient.hackernews.getUpdates()nonestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/hackernews/maxitemGet Hacker News max item idnone documentedclient.hackernews.getMaxItem()nonestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.no
GET /v1/truthsocial/profiles/{handle}/postsList Truth Social profile postshandle (path)client.truthsocial.getProfilePosts({ handle: "realDonaldTrump", cursor?, limit? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found2 credits. +2 credits for includeReplies. Max 4 credits. Failed requests are free.no
GET /v1/truthsocial/postsGet Truth Social posturl (query)client.truthsocial.getPost({ url: "https://truthsocial.com/@justthenews/116972401572691045" })nonedata.lookupStatus: found, not_found2 credits. Failed requests are free.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. Failed requests are free.no
GET /v1/google/ad-library/adsGet Google Ad Library adurl (query)client.google.getAdLibraryAd({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/google/ad-library/advertisers/searchSearch Google Ad Library advertisersquery (query)client.google.searchAdLibraryAdvertisers({ query, region? })nonestandard HTTP / success envelope1 credit. Failed requests are free.no

Pinterest

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
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. Failed requests are free.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. Failed requests are free.no
GET /v1/pinterest/pinsGet Pinterest pinurl (query)client.pinterest.getPin({ url, trim? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
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. Failed requests are free.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. Failed requests are free.no
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. Failed requests are free.no
GET /v1/threads/postsGet Threads posturl (query)client.threads.getPost({ url, trim? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/threads/searchSearch Threads postsquery (query)client.threads.search({ query, startDate?, endDate?, trim? })nonestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/threads/users/searchSearch Threads usersquery (query)client.threads.searchUsers({ query })nonestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/bluesky/postsGet Bluesky posturl (query)client.bluesky.getPost({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/reddit/postsGet Reddit posturl (query)client.reddit.getPost({ url })nonedata.lookupStatus: found, not_found Use this route for post details without comments. Use GET /v1/reddit/posts/comments for the comment tree. Use GET /v1/reddit/posts/transcript for video captions.1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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, top, comment-countUse data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from data.totalResults alone.1 credit. Failed requests are free.no

Rumble

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
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. Failed requests are free.no
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. Failed requests are free.no
GET /v1/rumble/videosGet Rumble videourl (query)client.rumble.getVideo({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Free when captions are unavailable.no
GET /v1/rumble/videos/commentsList Rumble video commentsurl (query)client.rumble.listVideoComments({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no

Snapchat

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/snapchat/profiles/{handle}Get Snapchat profilehandle (path)client.snapchat.getProfile({ handle })nonedata.lookupStatus: found, not_found Use spotlights[].url with the Snapchat Spotlight and Spotlight comments endpoints.1 credit. Failed requests are free.no
GET /v1/snapchat/spotlightsGet Snapchat Spotlighturl (query)client.snapchat.getSpotlight({ url })nonedata.lookupStatus: found, not_found Pass a Spotlight video URL, not a profile URL. Use GET /v1/snapchat/profiles/{handle} for profiles.1 credit. Failed requests are free.no
GET /v1/snapchat/spotlights/commentsList Snapchat Spotlight commentsurl (query)client.snapchat.listSpotlightComments({ url, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found An empty list with lookupStatus found means the Spotlight has no public comments, or the id is unknown.1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/twitch/profiles/{handle}/scheduleGet Twitch profile schedulehandle (path)client.twitch.getProfileSchedule({ handle })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/twitch/clipsGet Twitch clipurl (query)client.twitch.getClip({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/github/profiles/{handle}/pull-requestsList GitHub profile pull requestshandle (path)client.github.listProfilePullRequests({ handle, since?, until?, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/spotify/albumGet Spotify albumurl (query)client.spotify.getAlbum({ albumId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/spotify/trackGet Spotify trackurl (query)client.spotify.getTrack({ trackId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no

Apple Music

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/apple-music/searchSearch Apple Musicquery (query)client.appleMusic.search({ query, type? })nonestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/apple-music/artistGet Apple Music artisturl (query)client.appleMusic.getArtist({ artistId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/apple-music/albumGet Apple Music albumurl (query)client.appleMusic.getAlbum({ albumId?, url? })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/apple-music/trackGet Apple Music trackurl (query)client.appleMusic.getTrack({ trackId?, url? })nonedata.lookupStatus: found, not_found Album URLs must include i={songId} to identify the song. Use GET /v1/apple-music/album for album lookups.1 credit. Failed requests are free.no

SoundCloud

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/soundcloud/profiles/{handle}Get SoundCloud profilehandle (path)client.soundcloud.getProfile({ handle })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/soundcloud/profiles/{handle}/tracksList SoundCloud profile trackshandle (path)client.soundcloud.listProfileTracks({ handle, cursor? })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMoredata.lookupStatus: found, not_found1 credit. Failed requests are free.no
GET /v1/soundcloud/tracksGet SoundCloud trackurl (query)client.soundcloud.getTrack({ url })nonedata.lookupStatus: found, not_found1 credit. Failed requests are free.no

Yelp

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/yelp/businesses/searchSearch Yelp businessesquery (query)client.yelp.searchBusinesses({ query: "guitar lessons", location: "New York, NY" })page via page, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.no
GET /v1/yelp/businesses/{alias}Get Yelp business detailsalias (path)client.yelp.getBusiness(alias)nonestandard HTTP / success envelope2 credits. Failed requests are free.no
GET /v1/yelp/businesses/{alias}/reviewsList Yelp business reviewsalias (path)client.yelp.getReviews("business-alias", { category: "recommended" })cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope2 credits. Failed requests are free.no
GET /v1/yelp/businesses/{alias}/photosList Yelp business photosalias (path)client.yelp.getPhotos(alias)cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope2 credits. Failed requests are free.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 page, has more: data.page.hasMorestandard HTTP / success envelope1 credit. Failed requests are free.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. Failed requests are free.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. Failed requests are free.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. Failed requests are free.no
GET /v1/web/screenshotCapture website screenshoturl (query)client.web.getScreenshot({ url: "https://www.socialfetch.dev/" })nonedata.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the capture; an artifact may still be present.1 credit. +1 credit for region. Max 2 credits.no
GET /v1/web/crawlCrawl web pagesurl (query)client.web.crawl({ urls: ["https://www.socialfetch.dev/"] })nonestandard HTTP / success envelope1 credit per URL. Up to 5 URLs per request. Max 5 credits.no
POST /v1/web/extractExtract structured data from a web pagenone documentedclient.web.extract({ url: "https://www.socialfetch.dev/", schema: { name: "socialfetch_home", baseSelector: "main", fields: [{ name: "headline", selector: "h1", type: "text" }] } })nonedata.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; extracted is null.2 credits. Failed requests are free.no

Monitors

RouteSummaryIdentifiersSDKPagination / orderingOutcome / empty-result notesCreditsMedia
GET /v1/monitors/sourcesList watchable sourcesnone documentedHTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/monitorsCreate a monitornone documentedHTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/monitorsList monitorsnone documentedHTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/monitors/{id}Get a monitorid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
PATCH /v1/monitors/{id}Update a monitorid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
DELETE /v1/monitors/{id}Delete a monitorid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/monitors/{id}/triggerManually trigger a monitor pollid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/monitors/{id}/eventsList monitor eventsid (path)HTTP onlycursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/monitors/{id}/checksList a monitor's recent check historyid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/webhook-endpointsCreate a webhook endpointnone documentedHTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/webhook-endpointsList webhook endpointsnone documentedHTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/webhook-endpoints/{id}Get a webhook endpointid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
PATCH /v1/webhook-endpoints/{id}Update a webhook endpointid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
DELETE /v1/webhook-endpoints/{id}Delete a webhook endpointid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/webhook-endpoints/{id}/testSend a test webhook eventid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/webhook-endpoints/{id}/rotate-secretRotate a webhook endpoint secretid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no
GET /v1/webhook-endpoints/{id}/deliveriesList deliveries for a webhook endpointid (path)HTTP onlycursor via cursor, next: data.page.nextCursor, has more: data.page.hasMorestandard HTTP / success envelope0 credits. Failed requests are free.no
POST /v1/webhook-deliveries/{id}/redeliverManually redeliver a webhook deliveryid (path)HTTP onlynonestandard HTTP / success envelope0 credits. Failed requests are free.no

On this page