Integrations
Overview
Captapi plugs straight into your AI tooling. The official @captapi/mcp server exposes all 179 endpoints as typed tools over the Model Context Protocol, so Claude, Cursor, VS Code, and any MCP-compatible agent can pull transcripts, comments, profiles, search results, and more — billed to your account, with cached results free.
Prefer a one-click setup? Open Agent Integrations in your dashboard for install buttons with your key pre-filled. Agents can read the machine-readable manifest at /mcp.json.
Not using MCP? The same 179 endpoints are also available as typed TypeScript & Python SDKs, a CLI, an n8n community node, a Lovable chat connector— or call the REST API directly.
Model Context Protocol server exposing all 179 endpoints as typed tools for Claude, Cursor, VS Code, and any MCP agent.
Call every one of the 179 endpoints from your terminal, scripts, or CI — one command, JSON to stdout.
Community node (n8n-nodes-captapi) that brings all 179 endpoints into your n8n workflows.
A human creates the API key
Sign-up and key creation can't be automated by an agent. Create a capt_live_… key once in API Keys (100 free credits) and hand it to your agent.
The agent adds the config
Point your agent at this page or at /mcp.json, paste the snippet below with your key, and restart the client.
MCP Server
There are two ways to connect — both expose the same 179 tools. Pick Hosted for the fastest setup (no install), or Local if you prefer running the package on your machine. Replace the key with your own from API Keys, then restart the client.
Option A — Hosted (no install, just a URL)
Connect over HTTP to https://api.captapi.com/mcp. Nothing to install — your key is passed as an Authorization header (or x-api-key). Ideal for agents that can't run local processes. Clients that only support sign-in, such as claude.ai and Claude Desktop, can sign in with your Captapi account instead of sending a header.
// ~/.cursor/mcp.json (or .cursor/mcp.json per project)
{
"mcpServers": {
"captapi": {
"url": "https://api.captapi.com/mcp",
"headers": { "Authorization": "Bearer capt_live_xxxxxxxxxxxxxxxx" }
}
}
}Paste this into the agent
For Claude Code, Codex, OpenClaw, or Hermes — no JSON file. Paste the paragraph; the agent installs itself.
Set up Captapi so I can fetch social media data (transcripts, comments, profiles, ads) from this chat.
1. Connect the hosted MCP at https://api.captapi.com/mcp. Ask me for a capt_live_… key if you do not have one.
2. If this client cannot use a URL, install locally: npx -y @captapi/mcp with CAPTAPI_API_KEY set.
3. Confirm the tools load (youtube_transcript, facebook_profile_posts, google_ad_library_company_ads).
4. Tell me when it's ready.claude.ai & Claude Desktop — Add custom connector
Custom connectors in claude.ai and Claude Desktop take a server URL and sign you in. They have no field for your API key, so you sign in to Captapi and pick which key the connector uses instead. Every call is billed to that key, with its own rate limits, exactly like a direct request.
- In Claude, open Customize > Connectors and select Add custom connector. On a Team or Enterprise plan, an Owner adds it in Organization settings > Connectors (Add, then Custom), and each member then selects Connect.
- Enter the server URL
https://api.captapi.com/mcpand leave the OAuth client ID and secret empty. - If Claude asks for the sign-in settings, choose Sign in when needed and, for the OAuth client, Register automatically. Then select Add.
- Ask Claude for something that needs Captapi, for example a YouTube transcript. The first tool call shows a Connect card.
- Select Connect, sign in to Captapi, then pick one of your API keys or create a new one, and select Approve. Claude retries the call and continues.
Listing tools works before you sign in; calling a tool needs it. To disconnect, remove the connector in Claude, or revoke the key in API Keys — that stops the connector on its next call. Clients that can send a header (Cursor, VS Code, Claude Code) keep working with your key as shown above.
Claude details are from Claude's docs, checked on 2026-10-28: Add a connector that isn't in the directory, Authentication for connectors, Lazy authentication.
Option B — Local (npx / stdio)
Run the official @captapi/mcp package via npx. It talks to your client over stdio and reads your key from the CAPTAPI_API_KEY environment variable.
// ~/.cursor/mcp.json (or .cursor/mcp.json per project)
{
"mcpServers": {
"captapi": {
"command": "npx",
"args": ["-y", "@captapi/mcp"],
"env": { "CAPTAPI_API_KEY": "capt_live_xxxxxxxxxxxxxxxx" }
}
}
}Configuration (local mode)
| Env var | Required | Description |
|---|---|---|
| CAPTAPI_API_KEY | yes | Your capt_live_… key. |
| CAPTAPI_BASE_URL | no | Override the API base URL (default https://api.captapi.com). |
Tools & Parameters
Each endpoint is a tool named platform_action. Required parameters are marked *. The agent fills these in for you.
YouTube & Shorts (23)
youtube_transcript | url*stringlanguagestringcacheboolean |
youtube_audio_transcript | url*stringlanguagestringmaxCreditsnumbercacheboolean |
youtube_summarize | url*stringlanguagestringcacheboolean |
youtube_video_details | url*stringcacheboolean |
youtube_comments | url*stringlimitintegercursorstringcacheboolean |
youtube_channel_details | url*stringcacheboolean |
youtube_search | q*stringlimitintegercursorstringtypestringsortBystringuploadDatestringdurationstringregionstringcacheboolean |
youtube_channel_videos | url*stringlimitintegercursorstringfastbooleancacheboolean |
youtube_playlist_videos | url*stringlimitintegercursorstringfastbooleancacheboolean |
youtube_playlist | url*stringcacheboolean |
youtube_shorts_transcript | url*stringlanguagestringcacheboolean |
youtube_shorts_summarize | url*stringlanguagestringcacheboolean |
youtube_shorts_details | url*stringcacheboolean |
youtube_shorts_comments | url*stringlimitintegercursorstringcacheboolean |
youtube_channel_shorts | url*stringcursorstringlimitintegercacheboolean |
youtube_trending_shorts | qstringlimitintegercacheboolean |
youtube_channel_streams | url*stringlimitintegercacheboolean |
youtube_hashtag_search | q*stringlimitintegercacheboolean |
youtube_comment_replies | url*stringcommentId*stringlimitintegercursorstringcacheboolean |
youtube_channel_playlists | url*stringlimitintegercursorstringcacheboolean |
youtube_community_posts | url*stringlimitintegercursorstringcacheboolean |
youtube_community_post_details | url*stringcacheboolean |
youtube_video_sponsors | url*stringminVotesintegercategoriesstringcacheboolean |
TikTok (23)
tiktok_transcript | url*stringlanguagestringcacheboolean |
tiktok_summarize | url*stringlanguagestringcacheboolean |
tiktok_video_details | url*stringcacheboolean |
tiktok_comments | url*stringlimitintegercursorstringcacheboolean |
tiktok_channel_details | url*stringrawbooleancachebooleancacheMaxAgestring |
tiktok_profile_region | url*stringrawbooleancachebooleancacheMaxAgestring |
tiktok_audience_demographics | url*stringvideosintegercountriesLimitintegercacheboolean |
tiktok_search_suggestions | q*stringcountrystringlanguagestringlimitintegercacheboolean |
tiktok_channel_posts | url*stringlimitintegercursorstringcacheboolean |
tiktok_comment_replies | url*stringcommentId*stringlimitintegercursorstringcacheboolean |
tiktok_user_followers | url*stringlimitintegercursorstringcacheboolean |
tiktok_user_followings | url*stringlimitintegercursorstringcacheboolean |
tiktok_music_posts | url*stringlimitintegercursorstringcacheboolean |
tiktok_top_search | q*stringlimitintegercursorintegercacheboolean |
tiktok_search_by_hashtag | q*stringlimitintegercursorintegerregionstringcacheboolean |
tiktok_search_users | q*stringlimitintegercursorstringfallbackbooleancacheboolean |
tiktok_song_details | url*stringcacheboolean |
tiktok_trending_feed | countrystringcountryCodestringorderBystringperiodintegerpageintegerlimitintegercacheboolean |
tiktok_popular_hashtags | countrystringperiodintegerpageintegersortBystringnewOnBoardbooleanindustryIdstringquerystringlimitintegercacheboolean |
tiktok_popular_songs | countrystringperiodintegerpageintegerrankTypestringnewOnBoardbooleancommercialMusicbooleanlimitintegercacheboolean |
tiktok_live | url*stringcacheboolean |
tiktok_live_info | url*stringcacheboolean |
tiktok_popular_creators | countrystringsortstringpageintegerfollower_countstringlimitintegercachebooleancacheMaxAgestring |
Instagram Reels (17)
instagram_transcript | url*stringlanguagestringcacheboolean |
instagram_summarize | url*stringlanguagestringcacheboolean |
instagram_details | url*stringcacheboolean |
instagram_comments | url*stringlimitintegercursorstringcacheboolean |
instagram_channel_details | url*stringcachebooleancacheMaxAgestring |
instagram_channel_posts | url*stringlimitintegercursorstringcacheboolean |
instagram_channel_reels | urlstringuserIdstringlimitintegercursorstringcacheboolean |
instagram_reels_search | q*stringlimitintegerdatePostedstringcacheboolean |
instagram_trending_reels | countrystringlimitintegercacheboolean |
instagram_tagged_posts | url*stringlimitintegercursorstringcacheboolean |
instagram_reels_by_audio_id | audioId*stringlimitintegercacheboolean |
instagram_hashtag_search | q*stringlimitintegermediaTypestringcacheboolean |
instagram_profile_search | q*stringcacheboolean |
instagram_embed | url*stringcacheboolean |
instagram_highlights | urlstringuserIdstringcacheboolean |
instagram_highlights_details | id*stringcacheboolean |
instagram_basic_profile | userId*stringcachebooleancacheMaxAgestring |
Facebook (9)
facebook_details | url*stringcacheboolean |
facebook_summarize | url*stringcacheboolean |
facebook_comments | urlstringfeedbackIdstringlimitintegercacheboolean |
facebook_page_details | url*stringcacheboolean |
facebook_profile_posts | url*stringlimitintegercacheboolean |
facebook_profile_reels | url*stringlimitintegercacheboolean |
facebook_group_posts | url*stringlimitintegersortBystringcacheboolean |
facebook_comment_replies | url*stringcommentId*stringlimitintegercacheboolean |
facebook_profile_photos | url*stringlimitintegercacheboolean |
Twitter / X (6)
twitter_tweet_details | url*stringcacheboolean |
twitter_transcript | url*stringcacheboolean |
twitter_profile | url*stringcachebooleancacheMaxAgestring |
twitter_user_tweets | url*stringlimitintegercacheboolean |
twitter_community | url*stringcacheboolean |
twitter_community_tweets | url*stringlimitintegercacheboolean |
Reddit (7)
reddit_subreddit_posts | url*stringlimitintegersortstringtimeframestringcursorstringcacheboolean |
reddit_post_details | url*stringcacheboolean |
reddit_post_comments | url*stringlimitintegercursorstringcacheboolean |
reddit_post_transcript | url*stringlimitintegercacheboolean |
reddit_search | q*stringsortstringtimeframestringlimitintegercursorstringcacheboolean |
reddit_subreddit_details | url*stringcacheboolean |
reddit_subreddit_search | url*stringq*stringsortstringtimeframestringlimitintegercursorstringcacheboolean |
Threads (5)
threads_profile | url*stringcacheboolean |
threads_user_posts | url*stringlimitintegercacheboolean |
threads_post_details | url*stringcacheboolean |
threads_search | q*stringlimitintegerorderBystringcacheboolean |
threads_search_users | q*stringlimitintegercacheboolean |
Bluesky (3)
bluesky_profile | url*stringcachebooleancacheMaxAgestring |
bluesky_user_posts | url*stringlimitintegercursorstringfilterstringincludeRepostsbooleancacheboolean |
bluesky_post_details | url*stringdepthintegercacheboolean |
Pinterest (5)
pinterest_pin_details | url*stringcacheboolean |
pinterest_user_pins | url*stringlimitintegercursorstringcacheboolean |
pinterest_search | q*stringlimitintegercursorstringcacheboolean |
pinterest_board | url*stringlimitintegercursorstringcacheboolean |
pinterest_user_boards | url*stringlimitintegercursorstringcacheboolean |
LinkedIn (6)
linkedin_profile | url*stringcacheboolean |
linkedin_company | url*stringcacheboolean |
linkedin_post_details | url*stringcacheboolean |
linkedin_post_transcript | url*stringcacheboolean |
linkedin_company_posts | url*stringlimitintegercursorstringcacheboolean |
linkedin_search_posts | q*stringsortstringlimitintegercursorstringcacheboolean |
Rumble (5)
rumble_video_details | url*stringcacheboolean |
rumble_video_transcript | url*stringlanguagestringcacheboolean |
rumble_channel_videos | url*stringlimitintegercacheboolean |
rumble_search | q*stringlimitintegercacheboolean |
rumble_comments | url*stringlimitintegercacheboolean |
TikTok Shop (5)
tiktok_shop_search | q*stringregionstringlimitintegercacheboolean |
tiktok_shop_products | url*stringregionstringlimitintegercacheboolean |
tiktok_shop_product_details | url*stringregionstringcacheboolean |
tiktok_shop_product_reviews | url*stringlimitintegercacheboolean |
tiktok_shop_user_showcase | username*stringlimitintegercacheboolean |
Facebook Marketplace (3)
facebook_marketplace_search | q*stringsearchLocation*stringlocationstringlimitnumberminPricenumbermaxPricenumbersortBystringdaysSinceListedstringconditionstringdeliveryMethodstringavailabilitystringradiusMilesnumbercategorystringcursorstringdetailsbooleancacheboolean |
facebook_marketplace_location_search | q*stringlimitintegercacheboolean |
facebook_marketplace_item | url*stringcacheboolean |
Facebook Events (3)
facebook_event_search | q*stringlocationstringfromstringtostringupcomingbooleanlimitintegercacheboolean |
facebook_event_details | url*stringcacheboolean |
facebook_profile_events | url*stringlimitintegercacheboolean |
Facebook Ad Library (5)
facebook_ad_library_search | q*stringcountrystringlimitintegerstatusstringmedia_typestringplatformsstringad_typestringsearch_typestringsort_bystringstart_datestringend_datestringcursorstringtrimbooleancacheboolean |
facebook_ad_library_company_ads | url*stringcountrystringlimitintegerstatusstringcursorstringcacheboolean |
facebook_ad_library_search_companies | q*stringcountrystringlimitintegercacheboolean |
facebook_ad_library_ad_details | url*stringcacheboolean |
facebook_ad_library_ad_transcript | url*stringcacheboolean |
TikTok Ad Library (3)
tiktok_ad_library_search | q*stringcountrystringmatchstringlimitintegercacheboolean |
tiktok_ad_library_top_ads | qstringmatchstringcountrystringperiodnumberorderBystringindustrystringobjectivestringadFormatstringlimitintegercacheboolean |
tiktok_ad_library_ad_details | url*stringcountrystringcacheboolean |
Google Ad Library (3)
google_ad_library_company_ads | advertiser*stringcountrystringregionstringstart_datestringend_datestringsortstringcursorstringtopicstringlimitintegercacheboolean |
google_ad_library_ad_details | creative_id*stringcountrystringcacheboolean |
google_ad_library_advertiser_search | q*stringcountrystringlimitintegercacheboolean |
LinkedIn Ad Library (2)
linkedin_ad_library_search_ads | qstringcompanystringkeywordstringcompanyIdstringcountrystringcountriesstringstartDatestringendDatestringcursorstringpaginationTokenstringlimitintegercacheboolean |
linkedin_ad_library_ad_details | url*stringcacheboolean |
Amazon Seller Storefront (1)
amazon_shop_page | url*stringmarketplacestringlimitintegercursorstringcacheboolean |
GitHub (10)
github_user | username*stringcacheboolean |
github_repositories | username*stringsortstringdirectionstringtypestringlimitintegercursorstringcacheboolean |
github_pull_requests | repo*stringstatestringlimitintegercursorstringcacheboolean |
github_activity | username*stringlimitintegercursorstringcacheboolean |
github_followers | username*stringlimitintegercursorstringcacheboolean |
github_following | username*stringlimitintegercursorstringcacheboolean |
github_contributions | username*stringcacheboolean |
github_repository | repo*stringcacheboolean |
github_trending_repositories | sincestringlanguagestringlimitintegercacheboolean |
github_trending_developers | sincestringlanguagestringlimitintegercacheboolean |
Twitch (4)
twitch_profile | url*stringcachebooleancacheMaxAgestring |
twitch_user_videos | url*stringlimitintegerfilterBystringsortBystringcursorstringcacheboolean |
twitch_user_schedule | url*stringlimitintegercacheboolean |
twitch_clip | url*stringcachebooleancacheMaxAgestring |
Spotify (6)
spotify_artist | url*stringrawbooleancacheboolean |
spotify_track | url*stringrawbooleancacheboolean |
spotify_album | url*stringrawbooleancacheboolean |
spotify_search | q*stringtypestringlimitintegerrawbooleancacheboolean |
spotify_podcast | url*urlcacheboolean |
spotify_podcast_episodes | url*urllimitintegercursorstringrawbooleancacheboolean |
SoundCloud (3)
soundcloud_artist | url*stringcachebooleancacheMaxAgestring |
soundcloud_artist_tracks | url*stringlimitintegercursorstringcacheboolean |
soundcloud_track | url*stringcachebooleancacheMaxAgestring |
Linktree (1)
linktree_page | url*stringcachebooleancacheMaxAgestring |
Snapchat (1)
snapchat_user_profile | url*stringcacheboolean |
Truth Social (3)
truth_social_profile | url*stringcacheboolean |
truth_social_user_posts | url*stringlimitintegercursorstringcacheboolean |
truth_social_post | url*stringcacheboolean |
Kick (1)
kick_clip | url*stringlimitintegercachebooleancacheMaxAgestring |
CaptAPI Account (4)
account_balance | |
account_request_history | limitintegerendpointstringstatusCodeintegersincestringuntilstringcursorstring |
account_daily_usage | daysinteger |
account_most_used_routes | daysintegerlimitinteger |
Analytics & Video Files (4)
analytics_post | url*stringcacheboolean |
analytics_compare | urls*stringcacheboolean |
video_transcript | file*filelanguagestringtranslatebooleantimestampGranularitystring |
video_summarize | file*filelanguagestringtranslatebooleantimestampGranularitystring |
Kwai (3)
kwai_profile | url*stringcacheboolean |
kwai_user_posts | url*stringlimitnumbercursorstringcacheboolean |
kwai_post | url*stringcacheboolean |
Komi (1)
komi_page | url*stringcachebooleancacheMaxAgestring |
Pillar (1)
pillar_page | url*stringcachebooleancacheMaxAgestring |
Linkbio (1)
linkbio_page | url*stringcachebooleancacheMaxAgestring |
Linkme (1)
linkme_profile | url*stringcachebooleancacheMaxAgestring |
Google Maps (1)
google_maps_business_search | q*stringlocationstringlocationCodeintegerlanguagestringlimitintegercacheboolean |
Typed SDKs (TypeScript & Python)
Writing code? The official SDKs cover every endpoint with typed, namespaced methods — great autocomplete for humans and AI coding agents — and errors always throw, never silently return empty data. TypeScript: @captapi/sdk (zero dependencies, Node 18+/Deno/Bun/edge). Python: pip install captapi (sync + async clients on httpx).
// TypeScript — npm install @captapi/sdk
import { Captapi } from "@captapi/sdk";
const client = new Captapi({ apiKey: "capt_live_..." });
const res = await client.youtube.transcript({ url: "https://youtube.com/watch?v=..." });
# Python — pip install captapi
from captapi import Captapi
client = Captapi(api_key="capt_live_...")
res = client.youtube.transcript(url="https://youtube.com/watch?v=...")Platform features (batch, monitors, history, status)
Beyond single calls, the API ships building blocks competitors make you assemble yourself:
- Batch —
POST /v1/batchruns up to 20 endpoint calls concurrently in one request, with per-item status and billing (cached items stay free). - Monitors + webhooks —
POST /v1/monitorswatches any list endpoint (subreddit posts, channel videos, ad-library searches…) on your schedule and POSTs only new items to your webhook, HMAC-signed. Test deliveries withPOST /v1/monitors/{id}/test. - Metric history —
GET /v1/historyreturns follower/view/like time series that accumulate automatically whenever tracked profile or post endpoints are fetched fresh. - Live status —
GET /v1/status(no auth) exposes per-platform success rates from real traffic; the human view lives at /status.
Command-line (CLI)
Prefer the terminal, a shell script, or CI? The official @captapi/cli package exposes all 179 endpoints as commands. Authenticate once with captapi login (or set CAPTAPI_API_KEY), then call any endpoint — each one is a subcommand, parameters are flags, and responses print as JSON to stdout so they pipe cleanly into jq and scripts. It can even wire the MCP server into your agent with captapi agent add.
npm install -g @captapi/cli # or just use: npx @captapi/cli <command>
captapi login # paste your capt_live_… key (saved to ~/.captapi/config.json)
captapi whoami # confirm the active key
captapi balance # remaining credits + recent requestsWorkflow automation (n8n)
Building no-code/low-code automations? The official n8n-nodes-captapi community node brings all 179 endpoints into n8n. Install it from Settings → Community Nodes, add a Captapi API credential with your capt_live_… key, then drop the Captapi node into any workflow — pick a platform and operation, and pipe the structured JSON into your other nodes.
# In n8n: Settings → Community Nodes → Install
n8n-nodes-captapi
# Self-hosted (npm), then restart n8n:
npm install n8n-nodes-captapiUse Captapi in Lovable
Lovable can add a remote MCP server as a chat connector. Connect the hosted Captapi server once, and Lovable can pull real social data in the project chat and in Chats — all Captapi tools, billed to your Captapi credits.
Setup
- Create a
capt_live_…key in API Keys. - In Lovable, open Connectors, select the + button and choose MCP server.
- Fill in the form:
- Server name:
Captapi - Server URL:
https://api.captapi.com/mcp - Authentication: Bearer token or API key
- Token: paste only your
capt_live_…key.
- Server name:
- Select Add server. In the project chat, ask Lovable to list the Captapi tools to confirm the connection.
The server accepts the key as Authorization: Bearer capt_live_… or as x-api-key: capt_live_…, so either header style works.
Example prompts
Use Captapi to fetch the latest posts from these TikTok accounts:
https://www.tiktok.com/@brand_a, https://www.tiktok.com/@brand_b, https://www.tiktok.com/@brand_c
Build a dashboard of my competitors' TikTok posts: one card per post with the
caption, date, views, likes and comments, plus a chart of views per account.
Use the real data you fetched as the seed data.Limitation: chat connector only
Lovable uses chat connections, including custom MCP servers, only in the project chat and in Chats. They are not part of your published app, and your app's visitors cannot reach Captapi through them. Each teammate also connects the server with their own key.
If your published app needs live data, call the REST API from server-side code (an Edge Function or server function). Store the key as a project secret, never in frontend code. You can ask Lovable to do it:
Add a server-side function that calls the Captapi REST API.
Store my key as a secret named CAPTAPI_API_KEY.
Call GET https://api.captapi.com/v1/tiktok/channel-posts?url=<tiktok profile url>&limit=10
with the header "Authorization: Bearer <CAPTAPI_API_KEY>"
and return the JSON to the frontend. Never expose the key in the browser.Lovable details are from Lovable's docs, checked on 2026-10-23: Connect a custom MCP server, Chat connectors, Integrate any API.
Make.com — not in the public directory
There is no published Captapi app on Make.com (make.com/en/integrations/captapi is 404). Searching Make for Captapi will not find anything. Use n8n, MCP, or the REST API instead.
Apify — not in the public store
There is no Captapi Actor in the public Apify Store. Searching the store will not find one. Use n8n, MCP, or the REST API instead.
Connect your agent in 60 seconds
Grab a key, paste the config, and start pulling social data from your AI tool.
Open Agent Integrations