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
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/tiktok/profiles/{handle} | Get TikTok profile | handle (path) | client.tiktok.getProfile({ handle }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/videos | List TikTok profile videos | handle (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, popular | An 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 base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/tiktok/profiles/{handle}/followers | List TikTok profile followers | handle (path), userId (query) | client.tiktok.getProfileFollowers({ handle, cursor?, userId?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, hidden, private, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/following | List TikTok profile following | handle (path) | client.tiktok.getProfileFollowing({ handle, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, hidden, private, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/region | Get TikTok profile region | handle (path) | client.tiktok.getProfileRegion({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/audience | Get TikTok profile audience | handle (path) | client.tiktok.getProfileAudience({ handle }) | none | data.lookupStatus: found, not_found | 30 credits per successful request. | no |
GET /v1/tiktok/profiles/{handle}/live | Get TikTok live stream | handle (path) | client.tiktok.getProfileLive({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/engagement | Get TikTok profile engagement audit | handle (path) | HTTP only | none | data.lookupStatus: found, private, not_found | 5 credits per successful request. | no |
GET /v1/tiktok/users/search | Search TikTok users | query (query) | client.tiktok.searchUsers({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/tiktok/search | Search TikTok videos | query (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-posted | This returns videos only. Use GET /v1/tiktok/search/top when you need Top results that also include photo carousels. | 1 credit per successful request. | no |
GET /v1/tiktok/search/top | Search TikTok Top results | query (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-posted | TikTok 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 per successful request. | no |
GET /v1/tiktok/search/hashtags | Search TikTok by hashtag | none documented | client.tiktok.searchHashtags({ hashtag, region?, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | Use 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/search/suggestions | Get TikTok search suggestions | query (query) | client.tiktok.searchSuggestions({ query, region? }) | none | An 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 per successful request. | no |
GET /v1/tiktok/videos | Get TikTok video | url (query) | client.tiktok.getVideo({ url, region?, trim?, downloadMedia? }) | none | data.lookupStatus: found, not_found | 1 credit base. With downloadMedia, Hosted media download. Up to 11 credits max. | downloadMedia=true |
GET /v1/tiktok/videos/comments | List TikTok video comments | url (query) | client.tiktok.getVideoComments({ url, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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/replies | List TikTok comment replies | commentId (query), url (query) | client.tiktok.getVideoCommentReplies({ commentId, url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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/download | Download TikTok video or photo post media | url (query) | HTTP only | none | data.lookupStatus: found, not_found | 11 credits per successful request. | no |
GET /v1/tiktok/videos/transcript | Get TikTok video transcript | url (query) | client.tiktok.getVideoTranscript({ url, language?, useAiFallback? }) | none | data.lookupStatus: found, not_found | 1 credit base. With useAiFallback, AI transcript fallback. Up to 11 credits max. | no |
GET /v1/tiktok/feed/trending | List TikTok trending feed | none documented | client.tiktok.listTrendingFeed({ region, trim? }) | none | Repeat 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/collections/videos | List TikTok collection videos | url (query) | client.tiktok.listCollectionVideos({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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 per successful request. | no |
GET /v1/tiktok/songs | Get TikTok song | id (query) | client.tiktok.getSong({ id }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/music/{clipId}/videos | List TikTok music videos | none documented | client.tiktok.listMusicVideos({ clipId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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/search | Search TikTok Shop products | query (query) | client.tiktok.searchShopProducts({ query, page?, region? }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/tiktok/shop/products | List TikTok Shop store products | url (query) | client.tiktok.listShopProducts({ url, cursor?, region? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/products | Get TikTok Shop product | url (query) | client.tiktok.getProduct({ url, region? }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/tiktok/products/reviews | List TikTok Shop product reviews | url (query) | client.tiktok.getProductReviews({ url?, productId?, region?, page? }) | page via page, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/profiles/{handle}/showcase-products | List TikTok profile showcase products | handle (path) | client.tiktok.getProfileShowcaseProducts({ handle, cursor?, region? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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/ads | Get TikTok Ad Library ad | url (query) | client.tiktok.getAdLibraryAd({ adId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/tiktok/ad-library/ads/search | Search TikTok Ad Library ads | query (query) | client.tiktok.searchAdLibraryAds({ query?, advertiserName?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/facebook/profiles | Get Facebook profile | url (query) | client.facebook.getProfile({ url, includeBusinessHours? }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/facebook/profiles/posts | List Facebook profile posts | url (query) | client.facebook.getProfilePosts({ url?, pageId?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/facebook/profiles/reels | List Facebook profile reels | url (query) | client.facebook.getProfileReels({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/facebook/profiles/photos | List Facebook profile photos | url (query) | client.facebook.getProfilePhotos({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/facebook/profiles/events | List Facebook profile events | url (query) | client.facebook.getProfileEvents({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 upstream 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 per successful request. | no |
GET /v1/facebook/posts | Get Facebook post or reel | url (query) | client.facebook.getPost({ url, includeComments?, includeTranscript? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/posts/comments | List Facebook post or reel comments | url (query) | client.facebook.getPostComments({ url?, cursor?, feedbackId? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/posts/comments/replies | List Facebook comment replies | none documented | client.facebook.getPostCommentReplies({ cursor }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/posts/transcript | Get Facebook post transcript | url (query) | client.facebook.getPostTranscript({ url }) | none | data.lookupStatus: found, not_found, lookup_failed | 1 credit per successful request. | no |
GET /v1/facebook/groups | Get Facebook group | url (query) | client.facebook.getGroup({ url?, groupId? }) | none | data.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 per successful request. | no |
GET /v1/facebook/groups/posts | List Facebook group posts | url (query) | client.facebook.listGroupPosts({ url, sortBy?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: top, recentActivity, chronological, chronologicalListings | data.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/locations/search | Search Facebook Marketplace locations | query (query) | client.facebook.searchMarketplaceLocations({ query }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/facebook/marketplace/search | Search Facebook Marketplace listings | query (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, priceDescend | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/facebook/marketplace/items | Get Facebook Marketplace item | url (query) | client.facebook.getMarketplaceItem({ itemId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/events/search | Search Facebook events | query (query) | client.facebook.searchEvents({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/facebook/events | List Facebook city events | url (query) | client.facebook.listCityEvents({ url, time?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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 per successful request. | no |
GET /v1/facebook/events/details | Get Facebook event | url (query) | client.facebook.getEvent({ eventId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/ad-library/ads | Get Facebook Ad Library ad | url (query) | client.facebook.getAdLibraryAd({ adId?, url?, includeTranscript?, trim? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/ad-library/ads/search | Search Facebook Ad Library ads | query (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-recent | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/facebook/ad-library/companies/ads | List Facebook company ads | none documented | client.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-recent | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/facebook/ad-library/companies/search | Search Facebook ad library companies | query (query) | client.facebook.searchAdLibraryCompanies({ query }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/instagram/profiles/{handle} | Get Instagram profile | handle (path) | client.instagram.getProfile({ handle }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/instagram/profiles/{userId}/basic | Get Instagram basic profile | userId (path) | client.instagram.getBasicProfile({ userId }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/instagram/profiles/{handle}/posts | List Instagram profile posts | handle (path) | client.instagram.getProfilePosts({ handle, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, private, not_found | 1 credit base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/instagram/profiles/{handle}/reels | List Instagram profile reels | handle (path) | client.instagram.getProfileReels({ handle, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/instagram/profiles/{handle}/highlights | List Instagram profile highlights | handle (path) | client.instagram.getProfileHighlights({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/instagram/profiles/{userId}/tagged-posts | List Instagram tagged posts | userId (path) | client.instagram.getProfileTaggedPosts({ userId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, private, not_found lookupStatus found with an empty posts array means this page of the Tagged tab has no public posts. This is the Tagged tab for a numeric Instagram user id, not the profile grid. Use GET /v1/instagram/profiles/{handle}/posts for the owner's own feed. Resolve a handle to a user id with GET /v1/instagram/profiles/{handle} or GET /v1/instagram/profiles/{userId}/basic. | 1 credit base. With hostMedia, +2 credits per hosted asset (up to 24 assets, 49 credits max). | no |
GET /v1/instagram/highlights/{highlightId} | Get Instagram highlight | none documented | client.instagram.getHighlight({ highlightId }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/instagram/profiles/{handle}/engagement | Get Instagram profile engagement audit | handle (path) | HTTP only | none | data.lookupStatus: found, private, not_found | 5 credits per successful request. | no |
GET /v1/instagram/search | Search Instagram accounts, hashtags, and places | query (query) | client.instagram.search({ query }) | none | Empty users, hashtags, places, and keywords arrays are a valid success when there are no matches. Use this for Instagram-native account, hashtag, and place typeahead. One page, no posts. For Google-indexed profile discovery use GET /v1/instagram/search/profiles. For hashtag posts use GET /v1/instagram/search/hashtags. For reel keyword search use GET /v1/instagram/search/reels. For a curated topic page with posts use GET /v1/instagram/search/popular. | 1 credit per successful request. | no |
GET /v1/instagram/search/profiles | Search Instagram profiles | query (query) | client.instagram.searchProfiles({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/instagram/search/reels | Search Instagram Reels | query (query) | client.instagram.searchReels({ query, datePosted?, page? }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/instagram/search/hashtags | Search Instagram by hashtag | none documented | client.instagram.searchHashtags({ hashtag, datePosted?, mediaType?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/instagram/search/popular | Search Instagram Popular topics | query (query) | client.instagram.searchPopular({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An empty posts array is a valid success when the topic has no curated posts on this page. Topic metadata (title, totalMediaCount, description, suggestedTerms) is populated on the first page and null on later pages. Use this for Instagram's curated Popular topic page (title, generated description, suggested terms, mixed posts). For an exact hashtag use GET /v1/instagram/search/hashtags. For Reels-only keyword search use GET /v1/instagram/search/reels. For Instagram-native account, hashtag, and place typeahead use GET /v1/instagram/search. | 1 credit per successful request. | no |
GET /v1/instagram/posts | Get Instagram post or reel | url (query) | client.instagram.getPost({ url, region?, trim?, downloadMedia? }) | none | data.lookupStatus: found, not_found, restricted | 1 credit base. With downloadMedia, Hosted media download. Up to 11 credits max. | downloadMedia=true |
GET /v1/instagram/posts/comments | List Instagram post or reel comments | url (query) | client.instagram.getPostComments({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found Lists top-level comments only. When a comment has replies (data.comments[].replyCount > 0), use List Instagram comment replies with that comment's id as commentId plus the same post or reel url. | 1 credit per successful request. | no |
GET /v1/instagram/posts/comments/replies | List Instagram comment replies | commentId (query), url (query) | client.instagram.getPostCommentReplies({ commentId, url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found Requires parent commentId from List Instagram post or reel comments plus the same post or reel 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/instagram/posts/download | Download Instagram post or reel media | url (query) | HTTP only | none | data.lookupStatus: found, not_found, restricted | 11 credits per successful request. | no |
GET /v1/instagram/posts/transcript | Get Instagram post transcript | url (query) | client.instagram.getPostTranscript({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/instagram/reels/trending | List trending Instagram Reels | none documented | client.instagram.getTrendingReels() | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/instagram/audio/{audioId}/reels | List Instagram audio Reels | none documented | client.instagram.listAudioReels({ audioId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An empty data.reels array can mean no public Reels use this audio, or other cases—there is no lookupStatus field on this route. | 1 credit per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/linkedin/profiles | Get LinkedIn profiles | url (query) | client.linkedin.getProfiles({ urls }) or client.linkedin.getProfile({ url }) | none | standard HTTP / success envelope | 2 credits per profile URL requested. Up to 50 profiles per request (100 credits max). | no |
GET /v1/linkedin/profiles/posts | List LinkedIn profile posts | url (query) | client.linkedin.listProfilePosts({ url, startDate?, endDate?, onlyAuthoredPosts? }) | none | data.lookupStatus: found, not_found | 2 credits attempt fee plus 2 credits per returned record. Up to 200 per request (402 credits max). limit default: 10. | no |
GET /v1/linkedin/organizations | Get LinkedIn organization page | url (query) | client.linkedin.getOrganizations({ urls }) or client.linkedin.getOrganization({ url }) | none | This 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/companies | Get LinkedIn company page | url (query) | client.linkedin.getCompany({ url }) | none | data.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/posts | List LinkedIn company posts | url (query) | client.linkedin.listCompanyPosts({ url, page? }) | page via page, has more: data.page.hasMore | data.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/posts | Get LinkedIn post or article | url (query) | client.linkedin.getPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/linkedin/posts/transcript | Get LinkedIn post transcript | url (query) | client.linkedin.getPostTranscript({ url }) | none | data.lookupStatus: found, not_found, lookup_failed | 1 credit when a transcript is found; no charge when a transcript is unavailable. | no |
GET /v1/linkedin/people/search | Search LinkedIn people | none documented | client.linkedin.searchPeople({ firstName?, lastName? }) | none | data.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/posts/search | Search LinkedIn posts | query (query) | client.linkedin.searchPosts({ query, datePosted?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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/ads | Get LinkedIn Ad Library ad | url (query) | client.linkedin.getAdLibraryAd({ adId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/linkedin/ad-library/ads/search | Search LinkedIn Ad Library ads | none documented | client.linkedin.searchAdLibraryAds({ company?, keyword?, companyId?, countries?, startDate?, endDate?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/linkedin/jobs | Get LinkedIn jobs | url (query) | client.linkedin.getJobs({ urls }) | none | standard HTTP / success envelope | 2 credits per job URL requested. Up to 50 jobs per request (100 credits max). | no |
GET /v1/linkedin/jobs/search | Search LinkedIn jobs | none documented | client.linkedin.searchJobs({ keyword, location, country?, timeRange?, jobType?, experienceLevel?, remote?, company?, locationRadius? }) | none | data.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
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/youtube/channel | Get YouTube channel | handle (query), url (query) | client.youtube.getChannel({ channelId?, handle?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/channels/videos | List YouTube channel videos | handle (query) | client.youtube.getChannelVideos({ channelId?, handle?, sortBy?, cursor?, includeExtras? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: latest, popular | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/channels/shorts | List YouTube channel shorts | handle (query) | client.youtube.getChannelShorts({ channelId?, handle?, sortBy?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: latest, popular | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/playlists | Get YouTube playlist | playlistId (query) | client.youtube.getPlaylist({ playlistId }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/community-posts | Get YouTube community post | url (query) | client.youtube.getCommunityPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/search | Search YouTube | query (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, popular | Use 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/hashtags | Search YouTube by hashtag | none documented | client.youtube.searchHashtag({ hashtag, type?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | Use 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/videos | Get YouTube video | url (query) | client.youtube.getVideo({ url, language? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/videos/comments | List YouTube video comments | url (query) | client.youtube.getVideoComments({ url, cursor?, order? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/youtube/videos/comments/analysis | Analyze YouTube video comments | url (query) | HTTP only | none | data.lookupStatus: found, not_found | 2 credits per successful request. | no |
GET /v1/youtube/videos/comments/replies | List YouTube comment replies | none documented | client.youtube.getVideoCommentReplies({ cursor }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/youtube/videos/transcript | Get YouTube video transcript | url (query) | client.youtube.getVideoTranscript({ url, language? }) | none | data.lookupStatus: found, not_found, lookup_failed | 1 credit per successful request. | no |
GET /v1/youtube/shorts/trending | List trending YouTube Shorts | none documented | client.youtube.getTrendingShorts() | none | Typically 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 |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/twitter/profiles/{handle} | Get Twitter profile | handle (path) | client.twitter.getProfile({ handle, by? }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/twitter/profiles | Get multiple Twitter profiles | handle (query), id (query) | client.twitter.getProfilesBatch({ handles?, ids? }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/about | Get Twitter account transparency details | handle (path) | client.twitter.getProfileAbout({ handle, by? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/tweets | List Twitter profile tweets | handle (path) | client.twitter.getProfileTweets({ handle, by?, limit?, cursor?, includeReplies?, includePinned? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/followers | List Twitter profile followers | handle (path) | client.twitter.listProfileFollowers({ handle, by?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/followers/verified | List verified followers of a Twitter profile | handle (path) | client.twitter.listProfileVerifiedFollowers({ handle, by?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/followers/ids | List follower ids of a Twitter profile | handle (path) | client.twitter.listProfileFollowerIds({ handle, by?, cursor?, limit? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/following | List accounts a Twitter profile follows | handle (path) | client.twitter.listProfileFollowing({ handle, by?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/following/ids | List following ids of a Twitter profile | handle (path) | client.twitter.listProfileFollowingIds({ handle, by?, limit?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/profiles/{handle}/subscriptions | List Twitter profile subscriptions | handle (path) | client.twitter.listProfileSubscriptions({ handle, by?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private Most accounts have no subscriptions; an empty list with lookupStatus found is normal. | 1 credit per successful request. | no |
GET /v1/twitter/friendships | Check Twitter follow relationship | none documented | client.twitter.getFriendship({ source, target, by? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/tweets | Get Twitter tweet | url (query) | client.twitter.getTweet({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/tweets/batch | Get multiple tweets | url (query) | client.twitter.getTweetsBatch({ ids }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/twitter/tweets/quotes | List quote tweets of a tweet | url (query) | client.twitter.listTweetQuotes({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/tweets/retweets | List accounts that retweeted a tweet | url (query) | client.twitter.listTweetRetweeters({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private | 1 credit per successful request. | no |
GET /v1/twitter/tweets/replies | List Twitter tweet replies | url (query) | client.twitter.listTweetReplies({ url, cursor?, sortBy? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, recency, likes | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/tweets/transcript | Get Twitter tweet transcript | url (query) | client.twitter.getTweetTranscript({ url }) | none | data.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/search | Search Twitter posts | query (query) | client.twitter.search({ query, section?, limit?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/twitter/hashtags | Search Twitter by hashtag | none documented | client.twitter.searchHashtags({ hashtag, section?, limit?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/twitter/communities | Get Twitter community | url (query) | client.twitter.getCommunity({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/communities/tweets | List Twitter community tweets | url (query) | client.twitter.getCommunityTweets({ url, cursor?, sortBy? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, recency | data.lookupStatus: found, not_found lookupStatus: found may still return an empty data.tweets array. | 1 credit per successful request. | no |
GET /v1/twitter/communities/members | List Twitter community members | url (query) | client.twitter.listCommunityMembers({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found lookupStatus: found may still return an empty data.members array, including when TweetAPI returns HTTP 200 with no members for an unknown community id. HTTP 404 maps to lookupStatus: not_found. | 1 credit per successful request. | no |
GET /v1/twitter/communities/search | Search Twitter communities | query (query) | client.twitter.searchCommunities({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/twitter/lists | Get Twitter list | url (query) | client.twitter.getList({ url }) | none | data.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 per successful request. | no |
GET /v1/twitter/lists/tweets | List tweets from a Twitter list | url (query) | client.twitter.listListTweets({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 per successful request. | no |
GET /v1/twitter/lists/members | List members of a Twitter list | url (query) | client.twitter.listListMembers({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 per successful request. | no |
GET /v1/twitter/lists/followers | List followers of a Twitter list | url (query) | client.twitter.listListFollowers({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, private lookupStatus: found may still return an empty data.users array. | 1 credit per successful request. | no |
GET /v1/twitter/spaces | Get Twitter Space | url (query) | client.twitter.getSpace({ id }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitter/spaces/stream | Get Twitter Space stream URL | url (query) | client.twitter.getSpaceStream({ id }) | none | data.lookupStatus: found, not_found, unavailable Uses two upstream lookups; ended Spaces without replay return lookupStatus unavailable. | 1 credit per successful request. | no |
Auth
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/whoami | Whoami | none documented | client.auth.whoami() | none | standard HTTP / success envelope | see meta.creditsCharged | no |
GET /v1/balance | Get account balance | none documented | client.billing.getBalance() | none | standard HTTP / success envelope | see meta.creditsCharged | no |
System
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
POST /v1/ask | Ask in natural language | none documented | client.ask({ query: "How many TikTok followers does MrBeast have?" }) | none | standard HTTP / success envelope | Routing is free. The nested lookup bills at that endpoint's normal credit rate — see meta.creditsCharged. | no |
GET /health | Health check | none documented | client.health() | none | standard HTTP / success envelope | see meta.creditsCharged | no |
Telegram
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/telegram/channels/{handle} | Get Telegram channel | handle (path) | client.telegram.getChannel({ handle: "durov" }) | none | data.lookupStatus: found, not_found, restricted | 1 credit per successful request. | no |
GET /v1/telegram/channels/{handle}/posts | List Telegram channel posts | handle (path) | client.telegram.getChannelPosts({ handle: "durov", cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, restricted | 1 credit per successful request. | no |
GET /v1/telegram/channels/{handle}/posts/{postId} | Get Telegram channel post | handle (path), postId (path) | client.telegram.getChannelPost({ handle: "Premiumoji", postId: "93" }) | none | data.lookupStatus: found, not_found, restricted | 1 credit per successful request. | no |
Amazon
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/amazon/shop | Get Amazon Shop page | url (query) | client.amazon.getShop({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 per successful request. | no |
Linktree
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/linktree/profiles/{handle} | Get Linktree profile | handle (path) | client.linktree.getProfile({ handle: "miguelangeles" }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
Hacker News
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/hackernews/search | Search Hacker News | query (query), author (query), domain (query), url (query) | client.hackernews.search({ query: "Dropbox" }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/hackernews/feeds/{feed} | List a Hacker News feed | none documented | client.hackernews.listFeed({ feed: "top" }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/hackernews/stories/{id} | Get Hacker News story | id (path) | client.hackernews.getStory({ id: 8863 }) | none | data.lookupStatus: found, not_found, not_story | 1 credit per successful request. | no |
GET /v1/hackernews/stories/{id}/comments | Get Hacker News story comments | id (path) | client.hackernews.getStoryComments({ id: 8863 }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found, not_story | 3 credits per successful request. | no |
GET /v1/hackernews/items/{id} | Get Hacker News item | id (path) | client.hackernews.getItem({ id: 8863 }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/hackernews/comments/{id}/context | Get Hacker News comment context | id (path) | client.hackernews.getCommentContext({ id: 9224 }) | none | data.lookupStatus: found, not_found, not_comment | 2 credits per successful request. | no |
GET /v1/hackernews/users/{username} | Get Hacker News user profile | username (path) | client.hackernews.getUserProfile({ username: "jl" }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/hackernews/users/{username}/submissions | List Hacker News user submissions | username (path) | client.hackernews.getUserSubmissions({ username: "jl" }) | page via page, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/hackernews/users/{username}/comments | List Hacker News user comments | username (path) | client.hackernews.getUserComments({ username: "jl" }) | page via page, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/hackernews/users/{username}/favorites | List Hacker News user favorites | username (path) | client.hackernews.getUserFavorites({ username: "tptacek" }) | page via page, has more: data.page.hasMore | data.lookupStatus: found, not_found, private_or_unavailable | 1 credit per successful request. | no |
GET /v1/hackernews/jobs/who-is-hiring | List Who is Hiring jobs | none documented | client.hackernews.listWhoIsHiring() | page via page, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/hackernews/updates | Get Hacker News updates | none documented | client.hackernews.getUpdates() | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/hackernews/maxitem | Get Hacker News max item id | none documented | client.hackernews.getMaxItem() | none | standard HTTP / success envelope | 1 credit per successful request. | no |
Truth Social
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/truthsocial/profiles/{handle} | Get Truth Social profile | handle (path) | client.truthsocial.getProfile({ handle: "realDonaldTrump" }) | none | data.lookupStatus: found, not_found | 2 credits per successful request. | no |
GET /v1/truthsocial/profiles/{handle}/posts | List Truth Social profile posts | handle (path) | client.truthsocial.getProfilePosts({ handle: "realDonaldTrump", cursor?, limit? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 2 credits base. With includeReplies, Include replies. Up to 4 credits max. | no |
GET /v1/truthsocial/posts | Get Truth Social post | url (query) | client.truthsocial.getPost({ url: "https://truthsocial.com/@justthenews/116972401572691045" }) | none | data.lookupStatus: found, not_found | 2 credits per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/google/ad-library/companies/ads | List Google company ads | domain (query) | client.google.listCompanyAds({ domain?, advertiserId?, topic?, region?, startDate?, endDate?, platform?, format?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found Google Ad Transparency only includes public ads. | 25 credits per successful request. | no |
GET /v1/google/ad-library/ads | Get Google Ad Library ad | url (query) | client.google.getAdLibraryAd({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/google/ad-library/advertisers/search | Search Google Ad Library advertisers | query (query) | client.google.searchAdLibraryAdvertisers({ query, region? }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/pinterest/profiles/{handle}/boards | List Pinterest profile boards | handle (path) | client.pinterest.listProfileBoards({ handle, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/pinterest/boards/pins | List Pinterest board pins | url (query) | client.pinterest.listBoardPins({ url, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/pinterest/pins | Get Pinterest pin | url (query) | client.pinterest.getPin({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/pinterest/search | Search Pinterest pins | query (query) | client.pinterest.searchPins({ query, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
Threads
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/threads/profiles/{handle} | Get Threads profile | handle (path) | client.threads.getProfile({ handle }) | none | data.lookupStatus: found, private, not_found | 1 credit per successful request. | no |
GET /v1/threads/profiles/{handle}/posts | List Threads profile posts | handle (path) | client.threads.getProfilePosts({ handle, trim? }) | none | data.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/posts | Get Threads post | url (query) | client.threads.getPost({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/threads/search | Search Threads posts | query (query) | client.threads.search({ query, startDate?, endDate?, trim? }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/threads/users/search | Search Threads users | query (query) | client.threads.searchUsers({ query }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
Bluesky
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/bluesky/profiles/{handle} | Get Bluesky profile | handle (path) | client.bluesky.getProfile({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/bluesky/profiles/{handle}/posts | List Bluesky profile posts | handle (path), userId (query) | client.bluesky.getProfilePosts({ handle, cursor?, userId? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/bluesky/posts | Get Bluesky post | url (query) | client.bluesky.getPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/reddit/subreddits | Get Reddit subreddit | url (query) | client.reddit.getSubreddit({ subreddit } | { url }) — subreddit names are case-sensitive | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/reddit/subreddits/{subreddit}/posts | List Reddit subreddit posts | none documented | client.reddit.listSubredditPosts({ subreddit, sort?, timeframe?, cursor? }) — subreddit is case-sensitive | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/reddit/posts | Get Reddit post | url (query) | client.reddit.getPost({ url }) | none | data.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 per successful request. | no |
GET /v1/reddit/posts/comments | List Reddit post comments | url (query) | client.reddit.listPostComments({ url, cursor?, trim? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/reddit/posts/transcript | Get Reddit post transcript | url (query) | client.reddit.getPostTranscript({ url, language? }) | none | data.lookupStatus: found, not_found, lookup_failed Accepts Reddit post permalinks and direct hosted video URLs. | 1 credit per successful request. | no |
GET /v1/reddit/subreddits/search | Search Reddit subreddit | query (query) | client.reddit.searchSubreddit({ subreddit, query?, sort?, timeframe?, cursor? }) — subreddit is case-sensitive | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | Use 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/search | Search Reddit posts | query (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 | Use data.page.hasMore and data.page.nextCursor for pagination rather than inferring completion from data.totalResults alone. | 1 credit per successful request. | no |
Rumble
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/rumble/channels/videos | List Rumble channel videos | url (query) | client.rumble.listChannelVideos({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/rumble/search | Search Rumble | query (query) | client.rumble.search({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | Use 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/videos | Get Rumble video | url (query) | client.rumble.getVideo({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/rumble/videos/transcript | Get Rumble video transcript | url (query) | client.rumble.getVideoTranscript({ url }) | none | data.lookupStatus: found, not_found, lookup_failed | 1 credit when a transcript is found; no charge when captions are unavailable. | no |
GET /v1/rumble/videos/comments | List Rumble video comments | url (query) | client.rumble.listVideoComments({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
Twitch
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/twitch/profiles/{handle} | Get Twitch profile | handle (path) | client.twitch.getProfile({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitch/profiles/{handle}/videos | List Twitch profile videos | handle (path) | client.twitch.listProfileVideos({ handle, filterBy?, sortBy? }) | sortBy: time, views | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitch/profiles/{handle}/schedule | Get Twitch profile schedule | handle (path) | client.twitch.getProfileSchedule({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/twitch/clips | Get Twitch clip | url (query) | client.twitch.getClip({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GitHub
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/github/profiles/{handle} | Get GitHub profile | handle (path) | client.github.getProfile({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/github/profiles/{handle}/repositories | List GitHub profile repositories | handle (path) | client.github.listProfileRepositories({ handle, cursor?, type?, sort?, direction? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/github/profiles/{handle}/pull-requests | List GitHub profile pull requests | handle (path) | client.github.listProfilePullRequests({ handle, since?, until?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/github/profiles/{handle}/activity | List GitHub profile activity | handle (path) | client.github.listProfileActivity({ handle, year?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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}/followers | List GitHub profile followers | handle (path) | client.github.listProfileFollowers({ handle, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/github/profiles/{handle}/following | List GitHub profile following | handle (path) | client.github.listProfileFollowing({ handle, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/github/profiles/{handle}/contributions | Get GitHub contribution graph | handle (path) | client.github.getProfileContributions({ handle, year? }) | none | data.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/repositories | Get GitHub repository | url (query) | client.github.getRepository({ url }) | none | data.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/trending/repositories | List trending GitHub repositories | none documented | client.github.listTrendingRepositories({ language?, since?, spokenLanguageCode? }) | none | Use 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/developers | List trending GitHub developers | none documented | client.github.listTrendingDevelopers({ language?, since? }) | none | Use 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
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/spotify/artist | Get Spotify artist | url (query) | client.spotify.getArtist({ artistId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/spotify/album | Get Spotify album | url (query) | client.spotify.getAlbum({ albumId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/spotify/track | Get Spotify track | url (query) | client.spotify.getTrack({ trackId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
Apple Music
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/apple-music/search | Search Apple Music | query (query) | client.appleMusic.search({ query, type? }) | none | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/apple-music/artist | Get Apple Music artist | url (query) | client.appleMusic.getArtist({ artistId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/apple-music/album | Get Apple Music album | url (query) | client.appleMusic.getAlbum({ albumId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/apple-music/track | Get Apple Music track | url (query) | client.appleMusic.getTrack({ trackId?, url? }) | none | data.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 per successful request. | no |
SoundCloud
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/soundcloud/profiles/{handle} | Get SoundCloud profile | handle (path) | client.soundcloud.getProfile({ handle }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/soundcloud/profiles/{handle}/tracks | List SoundCloud profile tracks | handle (path) | client.soundcloud.listProfileTracks({ handle, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
GET /v1/soundcloud/tracks | Get SoundCloud track | url (query) | client.soundcloud.getTrack({ url }) | none | data.lookupStatus: found, not_found | 1 credit per successful request. | no |
Web
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/web/search | Search the web | query (query) | client.web.search({ query: "Social media scraping API", region: "US" }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit per successful request. | no |
GET /v1/web/markdown | Generate web page markdown | url (query), query (query) | client.web.getMarkdown({ url: "https://www.socialfetch.dev/" }) | none | data.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/ask | Ask a question about a web page | url (query) | client.web.ask({ url: "https://www.socialfetch.dev/", q: "What is this page about?" }) | none | data.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; answer is null. | 1 credit per successful request. | no |
GET /v1/web/html | Generate web page HTML | url (query) | client.web.getHtml({ url: "https://www.socialfetch.dev/" }) | none | data.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; html is null. | 1 credit per successful request. | no |
GET /v1/web/screenshot | Capture website screenshot | url (query) | client.web.getScreenshot({ url: "https://www.socialfetch.dev/" }) | none | data.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the capture; an artifact may still be present. | 1 credit (2 with region) | no |
GET /v1/web/crawl | Crawl web pages | url (query) | client.web.crawl({ urls: ["https://www.socialfetch.dev/"] }) | none | standard HTTP / success envelope | 1 credit per URL requested. Up to 5 URLs per request (5 credits max). | no |
POST /v1/web/extract | Extract structured data from a web page | none documented | client.web.extract({ url: "https://example.com/products", schema: { name: "products", baseSelector: "div.product", fields: [{ name: "name", selector: "h2", type: "text" }] } }) | none | data.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; extracted is null. | 2 credits per successful request. | no |
Monitors
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/monitors/sources | List watchable sources | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/monitors | Create a monitor | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/monitors | List monitors | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/monitors/{id} | Get a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
PATCH /v1/monitors/{id} | Update a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
DELETE /v1/monitors/{id} | Delete a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/monitors/{id}/trigger | Manually trigger a monitor poll | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/monitors/{id}/events | List monitor events | id (path) | HTTP only | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/monitors/{id}/checks | List a monitor's recent check history | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/webhook-endpoints | Create a webhook endpoint | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/webhook-endpoints | List webhook endpoints | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/webhook-endpoints/{id} | Get a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
PATCH /v1/webhook-endpoints/{id} | Update a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
DELETE /v1/webhook-endpoints/{id} | Delete a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/webhook-endpoints/{id}/test | Send a test webhook event | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/webhook-endpoints/{id}/rotate-secret | Rotate a webhook endpoint secret | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |
GET /v1/webhook-endpoints/{id}/deliveries | List deliveries for a webhook endpoint | id (path) | HTTP only | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 0 credits per successful request. | no |
POST /v1/webhook-deliveries/{id}/redeliver | Manually redeliver a webhook delivery | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits per successful request. | no |