Getting Started
Introduction
Captapi gives you structured data from social media video through one consistent REST API. Send a public URL from YouTube, TikTok, Instagram, or Facebook and get back clean JSON — transcripts, AI summaries, video details, comments, search results, and downloads. No OAuth, no per-platform SDKs, no scraping infrastructure to maintain.
- • One API key works across all four platforms.
- • Repeat calls are served from a shared cache for free (up to 24h; time-sensitive metrics refresh within ~1h).
- • You are only charged for successful requests.
Quickstart
After signing up and copying your API key from the dashboard, make your first request:
curl "https://api.captapi.com/v1/youtube/transcript?url=https%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ" \
-H "Authorization: Bearer capt_live_..."Authentication
All requests are authenticated with a Bearer token. Generate keys in your dashboard and send them in the Authorization header. Keep keys secret — never expose capt_live_ keys in client-side code.
Authorization: Bearer capt_live_xxxxxxxxxxxxxxxxxxxxMaking Requests
Most endpoints take a single url query parameter (search endpoints use q). When building the request as a query string, you must URL-encode the target URL so it isn't misinterpreted as multiple parameters.
# URL-encode the target URL before passing it
urlencode "https://youtube.com/watch?v=dQw4w9WgXcQ"Response Format
Every response is JSON with a top-level success boolean. Successful responses include cached, creditsUsed, and a data object.
Success
{
"success": true,
"cached": false,
"creditsUsed": 2,
"data": {
"language": "en",
"segments": [
{ "start": 0.0, "end": 4.12, "text": "Hey everyone, welcome back." }
],
"text": "Hey everyone, welcome back."
}
}Error
{
"success": false,
"error": {
"code": "no_captions",
"message": "This video has no captions and audio transcription failed."
}
}Credits & Caching
Credits are the unit of billing. Each endpoint costs 1–4 credits per successful call (video details: 1, transcript/comments: 2, summarize: 4, downloads: 3). Failed and empty results are never charged.
Responses are cached and shared across all accounts for up to 24 hours — time-sensitive data (engagement metrics, follower lists) refreshes within ~1 hour so it stays current. If a result is served from cache, cached is true and creditsUsed is 0.
Errors
Errors return a non-2xx status and an error object with a stable code and a human-readable message.
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | Missing or malformed Authorization header. |
| 402 | insufficient_credits | Your balance is too low for this request. |
| 404 | not_found | The target URL or resource could not be found. |
| 422 | no_captions | No captions and audio transcription failed (not charged). |
| 429 | rate_limited | Too many requests — slow down or upgrade your plan. |
| 502 | upstream_error | Temporary scraping failure. Safe to retry (not charged). |
Rate Limits
Rate limits scale with your plan and are returned on every response via X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. When you exceed the limit you'll get a 429 — back off and retry after the reset window.
API Reference
64 endpoints across five groups. Click any endpoint for full parameters, examples, and FAQs.
YouTube & Shorts
| Method | Endpoint | Credits | Description |
|---|---|---|---|
| GET | /v1/youtube/transcript | 2 | Transcript |
| GET | /v1/youtube/summarize | 4 | Summarizer |
| GET | /v1/youtube/video-details | 1 | Video Details |
| GET | /v1/youtube/comments | ~20 | Comments |
| GET | /v1/youtube/channel-details | 1 | Channel Details |
| GET | /v1/youtube/search | ~20 | Search |
| GET | /v1/youtube/channel-videos | ~20 | Channel Videos |
| GET | /v1/youtube/playlist-videos | ~50 | Playlist Videos |
| GET | /v1/youtube/video-download | 3 | Video Download |
| GET | /v1/youtube/shorts/transcript | 2 | Shorts Transcript |
| GET | /v1/youtube/shorts/summarize | 4 | Shorts Summarizer |
| GET | /v1/youtube/shorts/video-details | 1 | Shorts Stats |
| GET | /v1/youtube/shorts/comments | ~20 | Shorts Comments |
| GET | /v1/youtube/channel-shorts | ~20 | Channel Shorts |
| GET | /v1/youtube/channel-streams | ~20 | Channel Streams |
| GET | /v1/youtube/hashtag-search | ~20 | Hashtag Search |
| GET | /v1/youtube/comment-replies | ~20 | Comment Replies |
| GET | /v1/youtube/channel-playlists | ~20 | Channel Playlists |
| GET | /v1/youtube/community-posts | ~10 | Community Posts |
TikTok
| Method | Endpoint | Credits | Description |
|---|---|---|---|
| GET | /v1/tiktok/transcript | 2 | Transcript |
| GET | /v1/tiktok/summarize | 4 | Summarizer |
| GET | /v1/tiktok/video-details | 1 | Video Details |
| GET | /v1/tiktok/comments | ~10 | Comments |
| GET | /v1/tiktok/channel-details | 1 | Channel Details |
| GET | /v1/tiktok/search | ~14 | Search |
| GET | /v1/tiktok/video-download | 3 | Video Download |
| GET | /v1/tiktok/channel-posts | ~14 | Channel Posts |
| GET | /v1/tiktok/comment-replies | 50 | Comment Replies |
| GET | /v1/tiktok/user-followers | ~20 | User Followers |
| GET | /v1/tiktok/user-followings | ~20 | User Followings |
| GET | /v1/tiktok/music-posts | ~32 | Music Posts |
| GET | /v1/tiktok/hashtag-search | ~14 | Hashtag Search |
| GET | /v1/tiktok/top-search | ~14 | Top Search |
| GET | /v1/tiktok/user-search | ~8 | User Search |
| GET | /v1/tiktok/song-details | 2 | Song Details |
| GET | /v1/tiktok/trending-feed | ~14 | Trending Feed |
| GET | /v1/tiktok/popular-hashtags | ~14 | Popular Hashtags |
Instagram Reels
| Method | Endpoint | Credits | Description |
|---|---|---|---|
| GET | /v1/instagram/transcript | 2 | Transcript |
| GET | /v1/instagram/summarize | 4 | Summarizer |
| GET | /v1/instagram/details | 1 | Details |
| GET | /v1/instagram/comments | ~45 | Comments |
| GET | /v1/instagram/channel-details | 1 | Channel Details |
| GET | /v1/instagram/channel-posts | ~12 | Channel Posts |
| GET | /v1/instagram/channel-reels | ~12 | Channel Reels |
| GET | /v1/instagram/reels-search | ~12 | Reels Search |
| GET | /v1/instagram/video-download | 3 | Video Download |
| GET | /v1/instagram/tagged-posts | ~18 | Tagged Posts |
| GET | /v1/instagram/music-posts | ~18 | Music Posts |
| GET | /v1/instagram/hashtag-search | ~12 | Hashtag Search |
| GET | /v1/instagram/profile-search | ~12 | Profile Search |
| GET | /v1/instagram/story-highlights | 5 | Story Highlights |
| GET | /v1/instagram/highlights-details | ~9 | Highlights Details |
| GET | /v1/instagram/embed | 1 | Embed |
| Method | Endpoint | Credits | Description |
|---|---|---|---|
| GET | /v1/facebook/details | 1 | Details |
| GET | /v1/facebook/transcript | 2 | Transcript |
| GET | /v1/facebook/summarize | 4 | Summarizer |
| GET | /v1/facebook/comments | ~30 | Comments |
| GET | /v1/facebook/page-details | 1 | Page Details |
| GET | /v1/facebook/profile-posts | ~12 | Profile Posts |
| GET | /v1/facebook/profile-reels | ~36 | Profile Reels |
| GET | /v1/facebook/group-posts | ~12 | Group Posts |
| GET | /v1/facebook/comment-replies | ~30 | Comment Replies |
Video Files (direct upload)
| Method | Endpoint | Credits | Description |
|---|---|---|---|
| POST | /v1/video/transcript | 1/min | Whisper transcription of an uploaded file |
| POST | /v1/video/summarize | 1/min +1 | Transcribe an uploaded file + AI summary |