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. Failed requests are free. | no |
GET /v1/tiktok/profiles/{handle}/videos | List TikTok profile videos | handle (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, 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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/tiktok/live | Get TikTok live info | userId (query) | client.tiktok.getLiveInfo({ roomId, userId }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. +10 credits for downloadMedia. Max 11 credits. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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 when media is downloaded. 1 credit when the post is not found or has no downloadable media. | no |
GET /v1/tiktok/videos/transcript | Get TikTok video transcript | url (query) | client.tiktok.getVideoTranscript({ url, language?, useAiFallback?, allowLongTranscription? }) | none | data.lookupStatus: found, not_found | 1 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/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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/tiktok/songs | Get TikTok song | id (query) | client.tiktok.getSong({ id }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/tiktok/shop/products | List TikTok Shop store products | url (query) | client.tiktok.listShopProducts({ url, cursor?, region?, sortBy? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: top, new-releases | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
GET /v1/tiktok/products | Get TikTok Shop product | url (query) | client.tiktok.getProduct({ url, region? }) | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/tiktok/ad-library/ads/search | Search TikTok Ad Library ads | query (query) | client.tiktok.searchAdLibraryAds({ query?, advertiserName?, advertiserBusinessId?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free. | 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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free. | 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. +2 credits per hosted file (hostMedia), max 24 files. Max 49 credits. Failed requests are free. | 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 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/posts | Get Facebook post or reel | url (query) | client.facebook.getPost({ url, includeComments?, includeTranscript? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. 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/search | Search Facebook Marketplace locations | query (query) | client.facebook.searchMarketplaceLocations({ query }) | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/facebook/events/details | Get Facebook event | url (query) | client.facebook.getEvent({ eventId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/facebook/ad-library/ads/search | Search Facebook Ad Library ads | query (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-recent | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v2/instagram/profiles/{profile} | Get Instagram profile | none documented | client.instagram.getProfileV2({ profile, include? }) | none | data.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}/media | List Instagram profile media | none documented | client.instagram.listProfileMediaV2({ profile, tab?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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}/highlights | List Instagram profile highlights | none documented | client.instagram.getProfileHighlightsV2({ profile }) | none | data.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}/stories | List Instagram profile stories | none documented | client.instagram.getProfileStoriesV2({ profile }) | none | data.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}/following | List Instagram profile following | none documented | client.instagram.listProfileFollowingV2({ profile, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 highlight | none documented | client.instagram.getHighlightV2({ highlightId }) | none | data.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}/engagement | Get Instagram profile engagement audit | none documented | client.instagram.getProfileEngagementV2({ profile }) | none | data.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/search | Search Instagram Reels | query (query) | client.instagram.searchReelsV2({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | A 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/search | Search Instagram profiles | query (query) | client.instagram.searchProfilesV2({ query, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | An 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/search | Search Instagram hashtags | query (query) | client.instagram.searchHashtagsV2({ query }) | none | An 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/search | Search Instagram locations | query (query) | client.instagram.searchLocationsV2({ query }) | none | An 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/search | Search Instagram audio | query (query) | client.instagram.searchAudioV2({ query }) | none | Instagram 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 topic | none documented | client.instagram.getTopicV2({ topic, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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/trending | List trending Instagram Reels | none documented | client.instagram.listTrendingReelsV2() | none | A 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 media | none documented | client.instagram.getMediaV2({ media, include? }) | none | data.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}/comments | List Instagram media comments | none documented | client.instagram.listMediaCommentsV2({ media, sort?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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}/replies | List Instagram comment replies | commentId (path) | client.instagram.listCommentRepliesV2({ media, commentId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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}/transcript | Get Instagram media transcript | none documented | client.instagram.getMediaTranscriptV2({ media }) | none | data.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 audio | none documented | client.instagram.getAudioV2({ audioId }) | none | data.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}/media | List Instagram audio media | none documented | client.instagram.listAudioMediaV2({ audioId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 hashtag | none documented | client.instagram.getHashtagV2({ hashtag }) | none | data.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}/media | List Instagram hashtag media | none documented | client.instagram.listHashtagMediaV2({ hashtag, tab?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 location | none documented | client.instagram.getLocationV2({ locationId }) | none | data.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}/media | List Instagram location media | none documented | client.instagram.listLocationMediaV2({ locationId, tab?, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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 |
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v2/linkedin/profiles | Get LinkedIn profile | handle (query) | client.linkedin.getProfile({ handle: "marclouvion" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/profiles/batch | Get LinkedIn profiles | url (query) | client.linkedin.getProfiles({ url: ["https://www.linkedin.com/in/marclouvion/"] }) | none | standard HTTP / success envelope | Up 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/resolve | Resolve LinkedIn person | handle (query) | client.linkedin.resolvePerson({ handle: "marclouvion" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/posts | List LinkedIn profile posts | none documented | client.linkedin.getProfilePosts({ entityId: "1441" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/comments | List LinkedIn profile comments | none documented | client.linkedin.getProfileComments({ entityId: "1441" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/employment-history | Get LinkedIn grouped employment history | none documented | client.linkedin.getEmploymentHistory({ entityId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/recommendations | Get LinkedIn recommendations | none documented | client.linkedin.getRecommendations({ entityId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/interests | Get LinkedIn interests | none documented | client.linkedin.getInterests({ entityId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/{entityId}/similar | List similar LinkedIn people | none documented | client.linkedin.getSimilarPeople({ entityId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations | Get LinkedIn organization | id (query) | client.linkedin.getOrganization({ slug: "stripe" }) | none | data.lookupStatus: found, not_found | 6 credits. +3 credits for slug. Max 9 credits. You're only charged for what's returned. | no |
GET /v2/linkedin/organizations/batch | Get LinkedIn organizations | url (query) | client.linkedin.getOrganizations({ url: ["https://www.linkedin.com/company/stripe/"] }) | none | standard HTTP / success envelope | Up 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/resolve | Resolve LinkedIn organization | none documented | client.linkedin.resolveOrganization({ slug: "stripe" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/{organizationId}/posts | List LinkedIn organization posts | none documented | client.linkedin.getOrganizationPosts({ organizationId: "1441" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/jobs | List LinkedIn organization jobs | none documented | client.linkedin.getOrganizationJobs({ organizationIds: "1441,1035" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/{organizationId}/headcount | Get LinkedIn organization headcount | none documented | client.linkedin.getOrganizationHeadcount({ organizationId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/{organizationId}/affiliated | List affiliated LinkedIn organizations | none documented | client.linkedin.getAffiliatedOrganizations({ organizationId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/{organizationId}/similar | List similar LinkedIn organizations | none documented | client.linkedin.getSimilarOrganizations({ organizationId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/jobs/{jobId} | Get LinkedIn job | none documented | client.linkedin.getJob({ jobId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/jobs/batch | Get LinkedIn jobs | url (query) | client.linkedin.getJobs({ url: ["https://www.linkedin.com/jobs/view/4468687278/"] }) | none | standard HTTP / success envelope | Up 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-team | List LinkedIn hiring team | none documented | client.linkedin.getHiringTeam({ jobId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/jobs/{jobId}/related-views | List related LinkedIn jobs | none documented | client.linkedin.getRelatedJobs({ jobId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/jobs/{jobId}/similar | List similar LinkedIn jobs | none documented | client.linkedin.getSimilarJobs({ jobId: "1441" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/activities/{activityId} | Get LinkedIn activity | none documented | client.linkedin.getActivity({ activityId: "urn:li:activity:7238942337892753408" }) | none | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/activities/{activityId}/comments | List LinkedIn activity comments | none documented | client.linkedin.getActivityComments({ activityId: "urn:li:activity:7238942337892753408" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, date_posted | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/activities/{activityId}/reactions | List LinkedIn activity reactions | none documented | client.linkedin.getActivityReactions({ activityId: "urn:li:activity:7238942337892753408" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/people/search | Search LinkedIn people | none documented | client.linkedin.searchPeople({ keyword: "technology" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/organizations/search | Search LinkedIn organizations | none documented | client.linkedin.searchOrganizations({ keyword: "technology" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 3 credits. Failed requests are free. | no |
GET /v2/linkedin/jobs/search | Search LinkedIn jobs | none documented | client.linkedin.searchJobs({ keyword: "software engineer" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore; sortBy: relevance, date_posted | data.lookupStatus: found, not_found | 6 credits. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/linkedin/posts | Get LinkedIn post or article | url (query) | client.linkedin.getPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Free when a transcript is unavailable. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/youtube/playlists | Get YouTube playlist | playlistId (query) | client.youtube.getPlaylist({ playlistId, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
GET /v1/youtube/community-posts | Get YouTube community post | url (query) | client.youtube.getCommunityPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/youtube/videos | Get YouTube video | url (query) | client.youtube.getVideo({ url, language? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/youtube/videos/comments/analysis | Analyze YouTube video comments | url (query) | HTTP only | none | data.lookupStatus: found, not_found | 2 credits. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/youtube/videos/transcript | Get YouTube video transcript | url (query) | client.youtube.getVideoTranscript({ url, language?, originalAudio? }) | none | data.lookupStatus: found, not_found, lookup_failed | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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, private, not_found | 1 credit. Failed requests are free. | no |
GET /v1/twitter/tweets | Get Twitter tweet | url (query) | client.twitter.getTweet({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
GET /v1/twitter/tweets/batch | Get multiple tweets | url (query) | client.twitter.getTweetsBatch({ ids }) | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/twitter/communities | Get Twitter community | url (query) | client.twitter.getCommunity({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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 for an unknown community id. A confirmed miss maps to lookupStatus: not_found. | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/twitter/spaces | Get Twitter Space | url (query) | client.twitter.getSpace({ id }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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 lookups; ended Spaces without replay return lookupStatus unavailable. | 1 credit. Failed requests are free. | 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 for the total. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/hackernews/updates | Get Hacker News updates | none documented | client.hackernews.getUpdates() | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | no |
GET /v1/hackernews/maxitem | Get Hacker News max item id | none documented | client.hackernews.getMaxItem() | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. +2 credits for includeReplies. Max 4 credits. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/pinterest/pins | Get Pinterest pin | url (query) | client.pinterest.getPin({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/threads/posts | Get Threads post | url (query) | client.threads.getPost({ url, trim? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
GET /v1/threads/search | Search Threads posts | query (query) | client.threads.search({ query, startDate?, endDate?, trim? }) | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | no |
GET /v1/threads/users/search | Search Threads users | query (query) | client.threads.searchUsers({ query }) | none | standard HTTP / success envelope | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/bluesky/posts | Get Bluesky post | url (query) | client.bluesky.getPost({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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, comment-count | Use 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
| 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/rumble/videos | Get Rumble video | url (query) | client.rumble.getVideo({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Free 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. Failed requests are free. | no |
Snapchat
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/snapchat/profiles/{handle} | Get Snapchat profile | handle (path) | client.snapchat.getProfile({ handle }) | none | data.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/spotlights | Get Snapchat Spotlight | url (query) | client.snapchat.getSpotlight({ url }) | none | data.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/comments | List Snapchat Spotlight comments | url (query) | client.snapchat.listSpotlightComments({ url, cursor? }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | data.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
| 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/twitch/clips | Get Twitch clip | url (query) | client.twitch.getClip({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/spotify/album | Get Spotify album | url (query) | client.spotify.getAlbum({ albumId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
GET /v1/spotify/track | Get Spotify track | url (query) | client.spotify.getTrack({ trackId?, url? }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/soundcloud/tracks | Get SoundCloud track | url (query) | client.soundcloud.getTrack({ url }) | none | data.lookupStatus: found, not_found | 1 credit. Failed requests are free. | no |
Yelp
| Route | Summary | Identifiers | SDK | Pagination / ordering | Outcome / empty-result notes | Credits | Media |
|---|---|---|---|---|---|---|---|
GET /v1/yelp/businesses/search | Search Yelp businesses | query (query) | client.yelp.searchBusinesses({ query: "guitar lessons", location: "New York, NY" }) | page via page, has more: data.page.hasMore | standard HTTP / success envelope | 1 credit. Failed requests are free. | no |
GET /v1/yelp/businesses/{alias} | Get Yelp business details | alias (path) | client.yelp.getBusiness(alias) | none | standard HTTP / success envelope | 2 credits. Failed requests are free. | no |
GET /v1/yelp/businesses/{alias}/reviews | List Yelp business reviews | alias (path) | client.yelp.getReviews("business-alias", { category: "recommended" }) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 2 credits. Failed requests are free. | no |
GET /v1/yelp/businesses/{alias}/photos | List Yelp business photos | alias (path) | client.yelp.getPhotos(alias) | cursor via cursor, next: data.page.nextCursor, has more: data.page.hasMore | standard HTTP / success envelope | 2 credits. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. Failed requests are free. | 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. +1 credit for region. Max 2 credits. | 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. Up to 5 URLs per request. Max 5 credits. | no |
POST /v1/web/extract | Extract structured data from a web page | none documented | client.web.extract({ url: "https://www.socialfetch.dev/", schema: { name: "socialfetch_home", baseSelector: "main", fields: [{ name: "headline", selector: "h1", type: "text" }] } }) | none | data.lookupStatus: found, restricted lookupStatus: restricted means bot/access protection blocked the fetch; extracted is null. | 2 credits. Failed requests are free. | 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. Failed requests are free. | no |
POST /v1/monitors | Create a monitor | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
GET /v1/monitors | List monitors | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
GET /v1/monitors/{id} | Get a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
PATCH /v1/monitors/{id} | Update a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
DELETE /v1/monitors/{id} | Delete a monitor | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
POST /v1/monitors/{id}/trigger | Manually trigger a monitor poll | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | 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. Failed requests are free. | no |
GET /v1/monitors/{id}/checks | List a monitor's recent check history | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
POST /v1/webhook-endpoints | Create a webhook endpoint | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
GET /v1/webhook-endpoints | List webhook endpoints | none documented | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
GET /v1/webhook-endpoints/{id} | Get a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
PATCH /v1/webhook-endpoints/{id} | Update a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
DELETE /v1/webhook-endpoints/{id} | Delete a webhook endpoint | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
POST /v1/webhook-endpoints/{id}/test | Send a test webhook event | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |
POST /v1/webhook-endpoints/{id}/rotate-secret | Rotate a webhook endpoint secret | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | 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. Failed requests are free. | no |
POST /v1/webhook-deliveries/{id}/redeliver | Manually redeliver a webhook delivery | id (path) | HTTP only | none | standard HTTP / success envelope | 0 credits. Failed requests are free. | no |