> **For coding agents and LLMs:** This is one page from the Social Fetch docs (markdown export). For curated orientation and workflow guidance, start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for agent onboarding and crawl rules, use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for the full endpoint list with links to pages like this one, use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt); for one platform's parameters and curls, use [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt); use [`/llms.json`](https://www.socialfetch.dev/llms.json) when you need structured JSON for tool registration.

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/docs/capability-matrix>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/docs/capability-matrix.mdx>

## API base URL and authentication

- **API origin (from OpenAPI `servers`):** `https://api.socialfetch.dev`
- **Authentication:** send `x-api-key: sfk_...` on `/v1/**` and `/v2/**` routes unless the operation is explicitly anonymous (check OpenAPI `security`, the [API reference hub](https://www.socialfetch.dev/docs/api.mdx), [`/llms.txt`](https://www.socialfetch.dev/llms.txt), or [`/llms.json`](https://www.socialfetch.dev/llms.json) for each route).
- **OpenAPI JSON:** <https://www.socialfetch.dev/openapi.json>

## Recommended docs entrypoints (this site)

- [Documentation overview](https://www.socialfetch.dev/docs.mdx) — top-level orientation (markdown).
- [Quickstart](https://www.socialfetch.dev/docs/quickstart.mdx) — authenticate with `x-api-key`, validate auth with `whoami`, and understand the JSON envelope.
- [SDK](https://www.socialfetch.dev/docs/sdk.mdx) — official TypeScript SDK guide, including `SocialFetchClient`, `Result`, and `unwrap()`.
- [Capability matrix](https://www.socialfetch.dev/docs/capability-matrix.mdx) — every operation with identifiers, pagination, outcomes, media download, credits, and its SDK method. Generated from OpenAPI, so use it for route selection instead of scanning individual pages.
- [Recipes](https://www.socialfetch.dev/docs/recipes.mdx) — copyable workflows (brand monitoring, transcripts, Ad Library, creator scoring, Reddit research) with credit callouts and SDK examples.
- [Integrations](https://www.socialfetch.dev/docs/integrations.mdx) — MCP for AI clients, n8n verified node, Apify Store Actors, Make custom app, SDK, and REST API connection paths.
- [MCP product page](https://www.socialfetch.dev/mcp) — hosted MCP overview, OAuth, Skills install.
- [MCP integration](https://www.socialfetch.dev/docs/integrations/mcp.mdx) — hosted `/mcp` server, OAuth, Cursor/VS Code/Claude install snippets, 274 endpoint tools, plus docs_search/docs_read for implementation help.
- [n8n integration](https://www.socialfetch.dev/docs/integrations/n8n.mdx) — install `n8n-nodes-socialfetch`, credentials, and workflow examples.
- [Apify integration](https://www.socialfetch.dev/docs/integrations/apify.mdx) — Store Actors under @social-fetch, PPE billing, dataset export, and quick start.
- [Make integration](https://www.socialfetch.dev/docs/integrations/make.mdx) — custom app modules for Make scenarios, API key credentials, and module catalog.
- [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt) — every documented operation with a direct link to that route's agent-readable markdown page (prefer this over parsing OpenAPI).
- [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt) — per-platform endpoint files generated from OpenAPI (parameters, credits, curls).
- [`/agents.txt`](https://www.socialfetch.dev/agents.txt) — agent crawl/onboarding file with capabilities, auth rules, and allowlist.
- [`/llms.json`](https://www.socialfetch.dev/llms.json) — structured machine-readable operation inventory with parameter names, pagination, outcomes, credits, and SDK mapping.
- [API reference hub](https://www.socialfetch.dev/docs/api.mdx) — human-friendly index of operations with links into generated pages.
- [Errors](https://www.socialfetch.dev/docs/errors.mdx) — shared error envelope and HTTP status guidance.
- [Credits](https://www.socialfetch.dev/docs/credits.mdx) — metering, `402`, and planning batch jobs.
- Outcome semantics such as `found`, `not_found`, and `private` are documented in [Errors](https://www.socialfetch.dev/docs/errors.mdx) and on operation pages when present in the OpenAPI contract.

## Markdown docs convention

- Every docs page has a markdown twin: append **`.mdx`** to the docs pathname (for example `/docs/quickstart` → `/docs/quickstart.mdx`).
- Agents that send `Accept: text/markdown` on `/docs/**` HTML URLs may receive markdown directly (same URL, `Vary: Accept`).
- Published blog posts use the same convention: `/blog/{slug}` → `/blog/{slug}.mdx`, or `Accept: text/markdown` on the HTML URL (`Vary: Accept`).

---
# API capability matrix: endpoints by platform (https://www.socialfetch.dev/docs/capability-matrix)

{/* AUTO-GENERATED by scripts/generate-capability-appendix.mts; do not edit by hand. */}

Documented endpoints on one page, grouped by platform. Use it to check what an endpoint takes, what it costs, how to page through it and what an empty result means, before you write any code.

The tables use the same OpenAPI and SDK catalog data as [`/llms.json`](/llms.json). For the full parameter list and authentication requirements, check the [API reference](/docs/api).

## How to read the tables

Each platform has one table with a row per endpoint.

| Column                       | What it tells you                                                                                                                                                                                |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Route                        | The method and path. Parts in braces, such as `{handle}`, go in the URL itself.                                                                                                                  |
| Summary                      | What the endpoint does, in a few words.                                                                                                                                                          |
| Identifiers                  | The parameters that say which account, post or page you mean, and whether each goes in the path or the query string.                                                                             |
| SDK                          | The [TypeScript SDK](/docs/sdk) method signature or example call. A `?` after a name marks an optional parameter. "HTTP only" means no SDK wrapper is listed in the catalog; use the HTTP route. |
| Pagination / ordering        | How to get the next page: which parameter to send, and where the next cursor and the has-more flag are in the response. Also the sort options, where there are any.                              |
| Outcome / empty-result notes | The values `data.lookupStatus` can take, and what an empty list means on that route. Read the status before you treat an empty list as "nothing there".                                          |
| Credits                      | What a request costs, and any extras that add to it. Empty results and some endpoint-specific errors can still be billed. See [Credits](/docs/credits) and the endpoint reference.               |
| Media                        | Whether the endpoint supports `downloadMedia=true` to copy media to our storage. Check the endpoint reference for other media options.                                                           |

## Find an endpoint in the Playground

To try an endpoint, open the [Playground](https://app.socialfetch.dev/playground) and type a word from its summary into **Search endpoints**. The list narrows to the endpoints that match, grouped by platform. Choose one to fill in its parameters and copy the call as cURL, Node.js or the TypeScript SDK.

Pick a row, then open the **TypeScript SDK** tab to see the call for that endpoint, with the parameters you filled in. The same SDK method name is in the SDK column below.

## 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?, hostMedia? })` | cursor via `cursor`, next: `data.page.nextCursor`, has more: `data.page.hasMore`; sortBy: latest, popular                    | `data.lookupStatus`: `found`, `private`, `not_found` Read `data.lookupStatus` before interpreting an empty `data.videos` array: `private` and `not_found` always come with no videos, while `found` with no videos means the account has none on this page (for example none in the selected sort window). | 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                      | `roomId` (query), `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                  | `hashtag` (query)                  | `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. 1 credit for transcript\_target\_not\_video (HTTP 400). Service failures 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                  | `clipId` (path)                    | `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                   |

## Facebook

| 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`, `restricted`, `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`, `restricted`, `not_found` Use `data.lookupStatus` to distinguish `not_found` from `found` with an empty `posts` array (including private profiles that return no posts). `restricted` means the Page is age-restricted, so Facebook hides its posts from signed-out viewers. Call `GET /v1/facebook/profiles` when you need `private` vs other profile states; this list route only exposes `found` / `restricted` / `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`, `restricted`, `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`, `restricted`, `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`, `restricted`, `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. `restricted` means the Page is age-restricted, so Facebook hides its events from signed-out viewers. `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. +10 credits per started minute of transcribed video, up to 60 minutes (allowLongTranscription). Max 601 credits. 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`, `unavailable`, `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    |

## Instagram

| Route                                                          | Summary                                | Identifiers                        | SDK                                                                    | Pagination / ordering                                                            | Outcome / empty-result notes                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | Credits                                                                                                                                              | Media |
| -------------------------------------------------------------- | -------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| `GET /v2/instagram/profiles/{profile}`                         | Get Instagram profile                  | `profile` (path)                   | `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           | `profile` (path)                   | `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      | `profile` (path)                   | `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         | `profile` (path)                   | `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       | `profile` (path)                   | `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                | `highlightId` (path)               | `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 | `profile` (path)                   | `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                 | `topic` (path)                     | `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                    | `media` (path)                     | `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          | `media` (path)                     | `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         | `media` (path), `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         | `media` (path)                     | `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` (free). For the video's length, caption or author, use GET /v2/instagram/media/\{media}.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 1 credit. +10 credits per started minute of transcribed video, up to 60 minutes (allowLongTranscription). Max 601 credits. Failed requests are free. | no    |
| `GET /v2/instagram/audio/{audioId}`                            | Get Instagram audio                    | `audioId` (path)                   | `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             | `audioId` (path)                   | `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                  | `hashtag` (path)                   | `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           | `hashtag` (path)                   | `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                 | `locationId` (path)                | `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          | `locationId` (path)                | `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    |

## LinkedIn

| 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             | `entityId` (path)            | `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          | `entityId` (path)            | `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 | `entityId` (path)            | `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            | `entityId` (path)            | `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                  | `entityId` (path)            | `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            | `entityId` (path)            | `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               | `slug` (query), `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           | `slug` (query)               | `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        | `organizationId` (path)      | `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     | `organizationId` (path)      | `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  | `organizationId` (path)      | `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     | `organizationId` (path)      | `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                        | `jobId` (path)               | `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               | `jobId` (path)               | `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              | `jobId` (path)               | `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              | `jobId` (path)               | `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                   | `activityId` (path)          | `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         | `activityId` (path)          | `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        | `activityId` (path)          | `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      | `hashtag` (query)               | `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 when a transcript is found. Free when a transcript is unavailable. | 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    |

## Twitter

| 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. +10 credits per started minute of transcribed video, up to 60 minutes (allowLongTranscription). Max 601 credits. 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                    | `hashtag` (query)              | `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           | `feed` (path)                                                      | `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    |

## Fandom

| Route                                                | Summary                         | Identifiers                      | SDK                                                                                        | Pagination / ordering                                                            | Outcome / empty-result notes              | Credits                             | Media |
| ---------------------------------------------------- | ------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- | ----------------------------------------- | ----------------------------------- | ----- |
| `GET /v1/fandom/wikis/{wiki}`                        | Get a Fandom wiki               | `wiki` (path)                    | `client.fandom.getWiki({ wiki: "fortnite" })`                                              | none                                                                             | `data.lookupStatus`: `found`, `not_found` | 1 credit. Failed requests are free. | no    |
| `GET /v1/fandom/wikis/{wiki}/page`                   | Get a Fandom wiki page          | `wiki` (path)                    | `client.fandom.getPage({ wiki: "fortnite", title: "Peely" })`                              | none                                                                             | `data.lookupStatus`: `found`, `not_found` | 1 credit. Failed requests are free. | no    |
| `GET /v1/fandom/wikis/{wiki}/search`                 | Search a Fandom wiki            | `wiki` (path), `query` (query)   | `client.fandom.search({ wiki: "roblox", query: "Builderman" })`                            | page via `page`, has more: `data.page.hasMore`                                   | `data.lookupStatus`: `found`, `not_found` | 1 credit. Failed requests are free. | no    |
| `GET /v1/fandom/wikis/{wiki}/pages`                  | List Fandom wiki pages          | `wiki` (path)                    | `client.fandom.listPages({ wiki: "doors-game" })`                                          | 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/fandom/wikis/{wiki}/category-members`       | List Fandom category members    | `wiki` (path)                    | `client.fandom.listCategoryMembers({ wiki: "fortnite", category: "Outfits" })`             | 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/fandom/wikis/{wiki}/recent-changes`         | List Fandom recent changes      | `wiki` (path)                    | `client.fandom.listRecentChanges({ wiki: "roblox" })`                                      | 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/fandom/wikis/{wiki}/article-comments`       | List Fandom article comments    | `wiki` (path)                    | `client.fandom.listArticleComments({ wiki: "blox-fruits", title: "Swords" })`              | page via `page`, has more: `data.page.hasMore`                                   | `data.lookupStatus`: `found`, `not_found` | 1 credit. Failed requests are free. | no    |
| `GET /v1/fandom/wikis/{wiki}/discussions`            | List Fandom Discussions threads | `wiki` (path)                    | `client.fandom.listDiscussions({ wiki: "fortnite" })`                                      | 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/fandom/wikis/{wiki}/discussions/{threadId}` | Get a Fandom Discussions thread | `wiki` (path), `threadId` (path) | `client.fandom.getDiscussionThread({ wiki: "fortnite", threadId: "4400000000000172709" })` | 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/fandom/wikis/{wiki}/activity`               | List Fandom wiki activity       | `wiki` (path)                    | `client.fandom.listActivity({ wiki: "roblox", since: "2026-10-20T00:00:00Z" })`            | cursor via `cursor`, next: `data.page.nextCursor`, has more: `data.page.hasMore` | `data.lookupStatus`: `found`, `not_found` | 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    |

## Google

| 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    |

## Pinterest

| 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    |

## Reddit

| 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 | `subreddit` (path) | `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 a bot challenge or block page stood in front of the page, so there is no screenshot and no charge (`meta.creditsCharged: 0`). | 1 credit. +1 credit for region. Max 2 credits. Free when the page blocks the capture (restricted). | 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 | `client.monitors.listSources()`                                                                    | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `POST /v1/monitors`                             | Create a monitor                       | none documented | `client.monitors.create(params: CreateMonitorParams, options?: CreateMonitorOptions)`              | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `GET /v1/monitors`                              | List monitors                          | none documented | `client.monitors.list(params?: ListMonitorsParams)`                                                | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `GET /v1/monitors/{id}`                         | Get a monitor                          | `id` (path)     | `client.monitors.get(id: string)`                                                                  | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `PATCH /v1/monitors/{id}`                       | Update a monitor                       | `id` (path)     | `client.monitors.update(id: string, params: UpdateMonitorParams)`                                  | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `DELETE /v1/monitors/{id}`                      | Delete a monitor                       | `id` (path)     | `client.monitors.delete(id: string)`                                                               | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `POST /v1/monitors/{id}/trigger`                | Manually trigger a monitor poll        | `id` (path)     | `client.monitors.trigger(id: string)`                                                              | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `GET /v1/monitors/{id}/events`                  | List monitor events                    | `id` (path)     | `client.monitors.listEvents(id: string, params?: ListMonitorEventsParams)`                         | 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)     | `client.monitors.listChecks(id: string)`                                                           | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `POST /v1/webhook-endpoints`                    | Create a webhook endpoint              | none documented | `client.webhookEndpoints.create(params: CreateWebhookEndpointParams)`                              | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `GET /v1/webhook-endpoints`                     | List webhook endpoints                 | none documented | `client.webhookEndpoints.list()`                                                                   | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `GET /v1/webhook-endpoints/{id}`                | Get a webhook endpoint                 | `id` (path)     | `client.webhookEndpoints.get(id: string)`                                                          | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `PATCH /v1/webhook-endpoints/{id}`              | Update a webhook endpoint              | `id` (path)     | `client.webhookEndpoints.update(id: string, params: UpdateWebhookEndpointParams)`                  | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |
| `DELETE /v1/webhook-endpoints/{id}`             | Delete a webhook endpoint              | `id` (path)     | `client.webhookEndpoints.delete(id: string)`                                                       | 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)     | `client.webhookEndpoints.sendTest(id: string, params?: SendWebhookEndpointTestParams)`             | 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)     | `client.webhookEndpoints.rotateSecret(id: string)`                                                 | 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)     | `client.webhookEndpoints.listDeliveries(id: string, params?: ListWebhookEndpointDeliveriesParams)` | 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)     | `client.webhookDeliveries.redeliver(id: string)`                                                   | none                                                                             | standard HTTP / success envelope | 0 credits. Failed requests are free. | no    |