{"openapi":"3.1.0","info":{"title":"Captapi API","description":"Extract transcripts, summaries, comments and stats from social media videos and related public sources (YouTube, TikTok, Instagram, Facebook, and more). Connect via MCP (@captapi/mcp), CLI (@captapi/cli), n8n (n8n-nodes-captapi), Make.com, or the optional Apify Store client that calls this REST API with your Captapi key. Full guide: https://captapi.com/docs/integrations","version":"0.1.0"},"paths":{"/":{"get":{"tags":["meta"],"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Root  Get"}}}}}}},"/healthz":{"get":{"tags":["meta"],"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/v1/youtube/transcript":{"get":{"tags":["YouTube"],"summary":"Get YouTube video transcript","description":"Returns the captions YouTube publishes for a video — manual or auto-generated. It does not perform speech-to-text. Long live streams and VODs frequently have no auto-captions at all. When there is no caption track this endpoint returns 404 and costs 0 credits; use /v1/youtube/audio-transcript to transcribe the audio directly (priced per minute). Costs 1 credit on success.","operationId":"youtube_transcript_v1_youtube_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube video URL","title":"Url"},"description":"YouTube video URL"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO language code (en, tr, es…). When set, only that language (or a YouTube translation into it) is returned — never a silent fallback to another track. Missing language → 404 language_not_available with availableLanguages.","title":"Language"},"description":"ISO language code (en, tr, es…). When set, only that language (or a YouTube translation into it) is returned — never a silent fallback to another track. Missing language → 404 language_not_available with availableLanguages."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/audio-transcript":{"get":{"tags":["YouTube"],"summary":"Speech-to-text a YouTube video (Whisper-class ASR)","description":"Transcribes YouTube audio with Whisper-class speech-to-text — separate from /transcript (published captions). Priced per started minute: credits = ceil(durationSeconds / 60) × 2. Pass maxCredits to refuse expensive jobs before any STT runs (400 cost_exceeds_max, 0 credits). Sync path is capped at 90 minutes (measured e2e under Cloudflare); longer videos return 400 duration_too_long with estimatedCredits. Hard deadline 110s → 502, 0 credits. Response source is always \"asr\" (contrast /transcript source=\"captions\").","operationId":"youtube_audio_transcript_v1_youtube_audio_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube video URL","title":"Url"},"description":"YouTube video URL"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional ISO-639-1 hint for ASR (e.g. tr, en). Omit to auto-detect (languageIsDetected=true).","title":"Language"},"description":"Optional ISO-639-1 hint for ASR (e.g. tr, en). Omit to auto-detect (languageIsDetected=true)."},{"name":"maxCredits","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":50000,"minimum":1},{"type":"null"}],"description":"Refuse the job before transcription when estimatedCredits would exceed this. Returns 400 cost_exceeds_max (0 credits).","title":"Maxcredits"},"description":"Refuse the job before transcription when estimatedCredits would exceed this. Returns 400 cost_exceeds_max (0 credits)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/summarize":{"get":{"tags":["YouTube"],"summary":"AI summary of a YouTube video","description":"Summarizes YouTube's published captions via GPT — same caption source as /transcript (not speech-to-text). Costs 3 credits on success; when captions are missing, returns the same diagnostic 404 as /transcript and charges 0 credits.","operationId":"youtube_summarize_v1_youtube_summarize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO language code for captions + summary. Missing caption language → 404 language_not_available (0 credits).","title":"Language"},"description":"ISO language code for captions + summary. Missing caption language → 404 language_not_available (0 credits)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/video-details":{"get":{"tags":["YouTube"],"summary":"YouTube video metadata + stats","operationId":"youtube_video_details_v1_youtube_video_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/comments":{"get":{"tags":["YouTube"],"summary":"YouTube video comments (cursor-paginated)","operationId":"youtube_comments_v1_youtube_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/channel-details":{"get":{"tags":["YouTube"],"summary":"YouTube channel info & stats","operationId":"youtube_channel_details_v1_youtube_channel_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/channel-videos":{"get":{"tags":["YouTube"],"summary":"List videos for a YouTube channel","operationId":"youtube_channel_videos_v1_youtube_channel_videos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"fast","in":"query","required":false,"schema":{"type":"boolean","description":"Use YouTube's public RSS feed for faster but less detailed metadata.","default":false,"title":"Fast"},"description":"Use YouTube's public RSS feed for faster but less detailed metadata."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/playlist-videos":{"get":{"tags":["YouTube"],"summary":"List videos in a YouTube playlist (cursor-paginated)","description":"Paginated playlist contents — same enriched row shape as channel-videos. Pass nextCursor for the next page. Flat 2 credits per page on the native path. For title/owner/thumbnail without videos, use /playlist (1 credit).","operationId":"youtube_playlist_videos_v1_youtube_playlist_videos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"fast","in":"query","required":false,"schema":{"type":"boolean","description":"Use YouTube's public RSS feed for faster but less detailed metadata.","default":false,"title":"Fast"},"description":"Use YouTube's public RSS feed for faster but less detailed metadata."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/playlist":{"get":{"tags":["YouTube"],"summary":"YouTube playlist metadata","description":"Playlist identity only — title, channel{}, totalVideos, thumbnailUrl. No videos array. Flat 1 credit. For paginated contents use /playlist-videos.","operationId":"youtube_playlist_v1_youtube_playlist_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube playlist URL","title":"Url"},"description":"YouTube playlist URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/search":{"get":{"tags":["YouTube"],"summary":"Search YouTube by keyword (cursor-paginated)","description":"Search YouTube as clean JSON with cursor pagination. Each hit includes type (video|short|channel|playlist|live), id, canonical url, title, channel{id,title,handle}, viewCount, durationSeconds, badges[]. Filter with type, sortBy, uploadDate, duration, and region. Flat 2 credits per page — pass nextCursor to continue.","operationId":"youtube_search_v1_youtube_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query (min 2 characters).","title":"Q"},"description":"Search query (min 2 characters)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results for this page (default 20).","default":20,"title":"Limit"},"description":"Max results for this page (default 20)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Result type filter: all | videos | shorts | channels | playlists.","title":"Type"},"description":"Result type filter: all | videos | shorts | channels | playlists."},{"name":"sortBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: relevance | date | views | rating (alias: popular→views).","title":"Sortby"},"description":"Sort: relevance | date | views | rating (alias: popular→views)."},{"name":"uploadDate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Upload window: any | today | this_week | this_month | this_year.","title":"Uploaddate"},"description":"Upload window: any | today | this_week | this_month | this_year."},{"name":"duration","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Length filter: any | under_4 | 4_20 | over_20.","title":"Duration"},"description":"Length filter: any | under_4 | 4_20 | over_20."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"ISO country code for localized results (InnerTube gl). Default US.","title":"Region"},"description":"ISO country code for localized results (InnerTube gl). Default US."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/trending-shorts":{"get":{"tags":["YouTube"],"summary":"Trending YouTube Shorts","description":"Shorts recommendation sequence (reel_watch_sequence). Returns a single window; use limit to size it. No cursor. Flat 2 credits.","operationId":"youtube_trending_shorts_v1_youtube_trending_shorts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Optional topic seed for the Shorts recommendation sequence (not a keyword search). Values like trending/shorts are ignored — omit for the default reel feed. Same surface as ScrapeCreators GET /v1/youtube/shorts/trending.","title":"Q"},"description":"Optional topic seed for the Shorts recommendation sequence (not a keyword search). Values like trending/shorts are ignored — omit for the default reel feed. Same surface as ScrapeCreators GET /v1/youtube/shorts/trending."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"How many Shorts to return (1–100). Returns a single window; use limit to size it. No cursor. Flat 2 credits.","default":20,"title":"Limit"},"description":"How many Shorts to return (1–100). Returns a single window; use limit to size it. No cursor. Flat 2 credits."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/channel-shorts":{"get":{"tags":["YouTube"],"summary":"List Shorts for a YouTube channel","description":"Channel Shorts shelf + player enrich (SC ``/v1/youtube/channel/shorts`` parity).\n\nSame cursor pagination as ``/channel-videos``. Flat 2 credits on the native\npath — shelf cards alone omit publish/duration/thumbnail nesting; we fill\nthose (and exact viewCount) via ``reel_item_watch`` + ANDROID player.","operationId":"youtube_channel_shorts_v1_youtube_channel_shorts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/channel-streams":{"get":{"tags":["YouTube"],"summary":"List live/past streams for a YouTube channel","description":"Channel Live tab only — not Videos.\n\nChannels without a Live tab (e.g. MrBeast) return ``hasLiveTab:false`` and\nan empty list — **0 credits** (tab check only; no stream fetch). When the\nLive tab exists, each row includes ``liveStatus`` (live|upcoming|past) and\nhonest durations (null when YouTube reports 0). Flat 2 credits on native.","operationId":"youtube_channel_streams_v1_youtube_channel_streams_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/hashtag-search":{"get":{"tags":["YouTube"],"summary":"YouTube videos from a hashtag page (/hashtag/{name})","description":"Returns videos listed on youtube.com/hashtag/{name} — not a keyword search. Titles often omit the #tag (hashtag may live only in the description); membership is the hashtag page itself. Each result includes type (video|short|live), id, channel{}, and viewCountIsApproximate. Returns a single window; use limit to size it. No cursor. Billed per returned result.","operationId":"youtube_hashtag_search_v1_youtube_hashtag_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Hashtag (with or without #)","title":"Q"},"description":"Hashtag (with or without #)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max results (1–200). Returns a single window; use limit to size it. No cursor. Billed per result.","default":20,"title":"Limit"},"description":"Max results (1–200). Returns a single window; use limit to size it. No cursor. Billed per result."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/shorts/transcript":{"get":{"tags":["YouTube"],"summary":"YouTube Shorts transcript","operationId":"shorts_transcript_v1_youtube_shorts_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min).","title":"Url"},"description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min)."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO language code (en, tr, es...)","title":"Language"},"description":"ISO language code (en, tr, es...)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/shorts/summarize":{"get":{"tags":["YouTube"],"summary":"YouTube Shorts AI summary","operationId":"shorts_summarize_v1_youtube_shorts_summarize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min).","title":"Url"},"description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min)."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/shorts/video-details":{"get":{"tags":["YouTube"],"summary":"YouTube Shorts metadata","description":"Same schema as Video Details, but scoped to Shorts (≤3 min) with ``isShort: true``.\n\nLong-form videos (including ones pasted under /shorts/{id}) return HTTP 422\nbefore credits are charged.","operationId":"shorts_details_v1_youtube_shorts_video_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min).","title":"Url"},"description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/shorts/comments":{"get":{"tags":["YouTube"],"summary":"YouTube Shorts comments","operationId":"shorts_comments_v1_youtube_shorts_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min).","title":"Url"},"description":"YouTube Shorts URL (youtube.com/shorts/ID) or a watch URL that resolves to a Short (≤3 min)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/comment-replies":{"get":{"tags":["YouTube"],"summary":"Replies to a YouTube comment","description":"Replies under a **top-level** comment. Nested reply ids are not supported (404). Envelope includes parentReplyCount when known, plus nextCursor/hasMore. Reply rows omit replyCount (those threads are not fetchable). Accepts ``commentId`` (preferred) or legacy ``comment_id``.","operationId":"youtube_comment_replies_v1_youtube_comment_replies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube video URL the comment belongs to","title":"Url"},"description":"YouTube video URL the comment belongs to"},{"name":"commentId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the parent (top-level) comment from /comments.","title":"Commentid"},"description":"ID of the parent (top-level) comment from /comments."},{"name":"comment_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated alias of commentId.","deprecated":true,"title":"Comment Id"},"description":"Deprecated alias of commentId.","deprecated":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from a previous nextCursor. Leave empty for the first page.","title":"Cursor"},"description":"Pagination cursor from a previous nextCursor. Leave empty for the first page."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/channel-playlists":{"get":{"tags":["YouTube"],"summary":"List a YouTube channel's playlists (cursor-paginated)","description":"Channel /playlists tab as clean JSON with nextCursor + hasMore. Each row: id, url, title, totalVideos (same name as /playlist), thumbnailUrl. Flat 2 credits per page.","operationId":"youtube_channel_playlists_v1_youtube_channel_playlists_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/community-posts":{"get":{"tags":["YouTube"],"summary":"List a YouTube channel's community posts","operationId":"youtube_community_posts_v1_youtube_community_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Channel URL, @handle, bare handle, or UC... channel ID","title":"Url"},"description":"Channel URL, @handle, bare handle, or UC... channel ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/community-post-details":{"get":{"tags":["YouTube"],"summary":"YouTube community post details","operationId":"youtube_community_post_details_v1_youtube_community_post_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube community post URL","title":"Url"},"description":"YouTube community post URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/youtube/video-sponsors":{"get":{"tags":["YouTube"],"summary":"SponsorBlock segments for a YouTube video","description":"Community-sourced skip segments from SponsorBlock (https://sponsor.ajay.app/), not YouTube official data and not Captapi detection. Database/API licence: CC BY-NC-SA 4.0 — attribution required; commercial use needs SponsorBlock's explicit permission. Envelope always includes source, sourceUrl, license, and videoDurationSeconds (even when segments is empty).","operationId":"youtube_video_sponsors_v1_youtube_video_sponsors_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"YouTube video URL or ID","title":"Url"},"description":"YouTube video URL or ID"},{"name":"minVotes","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":-10,"description":"Minimum SponsorBlock votes to keep a segment. Default 0 drops community-rejected rows (votes < 0). Raise to require verified segments.","default":0,"title":"Minvotes"},"description":"Minimum SponsorBlock votes to keep a segment. Default 0 drops community-rejected rows (votes < 0). Raise to require verified segments."},{"name":"categories","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated SponsorBlock categories. Default: sponsor,selfpromo,interaction. Also: intro,outro,preview,music_offtopic,poi_highlight,filler.","title":"Categories"},"description":"Comma-separated SponsorBlock categories. Default: sponsor,selfpromo,interaction. Also: intro,outro,preview,music_offtopic,poi_highlight,filler."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/video-details":{"get":{"tags":["TikTok"],"summary":"TikTok video metadata + stats","description":"Engagement counters hydrate from TikTok's mobile aweme detail (exact ints, per-counter *IsApproximate=false, plus downloads/reposts when exposed); when every residential exit is soft-blocked, the web page's display-rounded counters are served instead and the flags say so. authorRegion / author.region is the creator's country as exposed on the mobile aweme (null when TikTok omits it) — locationCreated is the video's posting locale, a different signal. For creator country with regionSource/regionConfidence, use /tiktok/profile-region.","operationId":"tiktok_video_details_v1_tiktok_video_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/transcript":{"get":{"tags":["TikTok"],"summary":"TikTok video transcript (via auto-captions)","operationId":"tiktok_transcript_v1_tiktok_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"description":"Optional ISO-639-1 hint (e.g. 'tr') to pin the speech language","title":"Language"},"description":"Optional ISO-639-1 hint (e.g. 'tr') to pin the speech language"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Serve from the 24h shared cache when available (0 credits on hit). Default true — set false to always fetch fresh.","default":true,"title":"Cache"},"description":"Serve from the 24h shared cache when available (0 credits on hit). Default true — set false to always fetch fresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/summarize":{"get":{"tags":["TikTok"],"summary":"AI summary of a TikTok video","operationId":"tiktok_summarize_v1_tiktok_summarize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"description":"Optional ISO-639-1 code (e.g. 'tr'): pins the speech language and sets the summary output language","title":"Language"},"description":"Optional ISO-639-1 code (e.g. 'tr'): pins the speech language and sets the summary output language"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/comments":{"get":{"tags":["TikTok"],"summary":"Comments on a TikTok video (text, author, likes, timestamp) with cursor pagination","operationId":"tiktok_comments_v1_tiktok_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response (a numeric offset, e.g. 50).","title":"Cursor"},"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response (a numeric offset, e.g. 50)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/channel-details":{"get":{"tags":["TikTok"],"summary":"TikTok profile identity — id, secUid, createTime, Shop flags, contact","description":"Resolve a TikTok @handle to stable id + secUid and curated profile stats for CRM joins and chaining. Privacy settings are decoded (commentsAllowedFrom / duetsAllowedFrom / …). Upstream TikTok enums and internals are behind raw=true. Creator geography is not inferred here — use /tiktok/profile-region for region + regionSource. Flat 1 credit.","operationId":"tiktok_channel_details_v1_tiktok_channel_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to include TikTok's upstream user/statsV2 blob under raw. Default false — curated fields only.","default":false,"title":"Raw"},"description":"Set true to include TikTok's upstream user/statsV2 blob under raw. Default false — curated fields only."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/profile-region":{"get":{"tags":["TikTok"],"summary":"TikTok creator region, language & core stats","operationId":"tiktok_profile_region_v1_tiktok_profile_region_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to include TikTok's upstream user/statsV2 blob under raw. Default false — curated fields only (raw is not part of the public contract).","default":false,"title":"Raw"},"description":"Set true to include TikTok's upstream user/statsV2 blob under raw. Default false — curated fields only (raw is not part of the public contract)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/live":{"get":{"tags":["TikTok"],"summary":"TikTok live status + room info for a creator","operationId":"tiktok_live_v1_tiktok_live_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/live-info":{"get":{"tags":["TikTok"],"summary":"TikTok live room info for a creator (alias of /live)","description":"Alias of ``/live`` — same runner and payload (``isLive``, ``liveStatus``, creator, room). Priced at 1 credit to match ``/live``; the previous 7-credit surcharge was not justified by extra fields.","operationId":"tiktok_live_info_v1_tiktok_live_info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/search-suggestions":{"get":{"tags":["TikTok"],"summary":"TikTok search/autocomplete suggestions","operationId":"tiktok_search_suggestions_v1_tiktok_search_suggestions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Seed keyword to expand into autocomplete suggestions, e.g. skincare.","title":"Q"},"description":"Seed keyword to expand into autocomplete suggestions, e.g. skincare."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code that localizes the suggestions to a market, e.g. US, GB, DE. Default US.","default":"US","title":"Country"},"description":"Two-letter ISO country code that localizes the suggestions to a market, e.g. US, GB, DE. Default US."},{"name":"language","in":"query","required":false,"schema":{"type":"string","description":"Interface language for the suggestions, e.g. en-US or de-DE. Default en-US.","default":"en-US","title":"Language"},"description":"Interface language for the suggestions, e.g. en-US or de-DE. Default en-US."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Upper bound on how many suggestions to return (1-100, default 20). TikTok only surfaces a limited number of real autocomplete suggestions per keyword, so you'll often get fewer than the limit.","default":20,"title":"Limit"},"description":"Upper bound on how many suggestions to return (1-100, default 20). TikTok only surfaces a limited number of real autocomplete suggestions per keyword, so you'll often get fewer than the limit."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/popular-creators":{"get":{"tags":["TikTok"],"summary":"Popular TikTok creators (Creative Center)","description":"TikTok Creative Center creator chart (ads.tiktok.com/business/creativecenter/inspiration/popular/creator). engagementRate is TikTok's official interact rate when exposed (engagementRateBasis=creative_center). Falls back to For You feed hydrate, then Apify. Flat 2 credits on Creative Center / FYP native.","operationId":"tiktok_popular_creators_v1_tiktok_popular_creators_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(follower|engagement|popularity)$","default":"follower","title":"Sort"}},{"name":"follower_count","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional range: 10k-100k, 100k-1m, 1m-10m, >10m (FYP/Apify fallthrough)","title":"Follower Count"},"description":"Optional range: 10k-100k, 100k-1m, 1m-10m, >10m (FYP/Apify fallthrough)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Creative Center page (default 1).","default":1,"title":"Page"},"description":"Creative Center page (default 1)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/audience-demographics":{"get":{"tags":["TikTok"],"summary":"TikTok audience countries + languages (engagement sample)","description":"TikTok does not publish follower geography. This endpoint samples people engaging with the creator's recent videos. The two signals come from two populations, disclosed in basis: audienceLanguages are tallied from top-level COMMENTERS (basis.language=\"commenters\"), audienceLocations from REPLIERS under the most-replied parent comments (basis.region=\"repliers\") — the only public surface that exposes user.region reliably. Percentages are numeric and sum to ~100% across audienceLocations (+ other when countriesLimit truncates). Use videos=12|30|60 for sample depth (credits 3/5/8). Reflects who engages — not a full follower census. confidence is from sampleSize (low <400, medium 400–999, high ≥1000) CAPPED for clustering: replies concentrate under few parent threads, so confidence degrades when regionSampleParents (<8/<20) or regionSampleVideos (<4/<8) are low — 400 repliers from 6 threads is not 400 independent observations. Envelope includes timings{path,postsVia,postsMs,postsDeadlineMs,commentsMs,commentsVia,totalMs,videoConcurrency,commentsAttempts,commentsErrors,commentsAttemptsPerVideo} — postsVia is which leg served the video list (native|apify); commentsVia is the comments surface (web+replies); commentsErrors counts blocked comment requests absorbed before clean pages; commentsAttemptsPerVideo is the per-video attempts distribution (sorted desc). If the posts leg hits its deadline on a real profile, the response is a degraded 200 (degraded:true, degradedReason:\"posts-timeout\", 0 credits) — 404 NOT_FOUND is reserved for profiles positively confirmed absent.","operationId":"tiktok_audience_demographics_v1_tiktok_audience_demographics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"videos","in":"query","required":false,"schema":{"type":"integer","description":"How many recent videos to sample comments from (12, 30, or 60). Credits: 3 / 5 / 8.","default":12,"title":"Videos"},"description":"How many recent videos to sample comments from (12, 30, or 60). Credits: 3 / 5 / 8."},{"name":"countriesLimit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Max countries to return in audienceLocations. Remainder is folded into other{count,percentage}. Omit to return every country in the sample.","title":"Countrieslimit"},"description":"Max countries to return in audienceLocations. Remainder is folded into other{count,percentage}. Omit to return every country in the sample."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/channel-posts":{"get":{"tags":["TikTok"],"summary":"Latest videos from a TikTok profile (cursor-paginated)","description":"Returns a creator's most recent public videos as structured JSON — caption, engagement (views/likes/comments/shares/saves), playable videoUrl / downloadUrl (CDN-signed; see mediaUrlsExpireAt), thumbnail, hashtags, sound name, shop/ad flags, and author profile (including id/secUid). Accepts a profile URL, @handle, or username. Prefers TikTok's native post API (cursor pagination via nextCursor / hasMore); falls back to our data-collection pool on the first page if every native exit is soft-blocked — a full fallback page synthesizes nextCursor from the oldest returned post so paging never dead-ends, a short one means the feed is likely exhausted (hasMore false). Large limits may return fewer posts than limit with hasMore true when the fetch budget runs out — keep paging with nextCursor; it always points past the returned posts (no overlap). A cursor TikTok rejects returns 400 INVALID_CURSOR, not 502. Missing profiles return 404 (not 502). Envelope includes timings{path,nativeMs,apifyMs,pagesFetched,deadlineHit} — path is which leg served the page (native|apify); deadlineHit true means the fetch budget ran out and the page is partial (nextCursor still resumes past it). Flat 2 credits per call.","operationId":"tiktok_channel_posts_v1_tiktok_channel_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"How many latest videos to return (1–200). Newest first. Flat 2 credits per call.","default":20,"title":"Limit"},"description":"How many latest videos to return (1–200). Newest first. Flat 2 credits per call."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (TikTok's max_cursor timestamp, e.g. 1783614676000).","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (TikTok's max_cursor timestamp, e.g. 1783614676000)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/comment-replies":{"get":{"tags":["TikTok"],"summary":"Replies to a TikTok comment (cursor-paginated)","operationId":"tiktok_comment_replies_v1_tiktok_comment_replies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"URL of the TikTok video the comment belongs to","title":"Url"},"description":"URL of the TikTok video the comment belongs to"},{"name":"commentId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the parent comment.","title":"Commentid"},"description":"ID of the parent comment."},{"name":"comment_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated alias of commentId.","deprecated":true,"title":"Comment Id"},"description":"Deprecated alias of commentId.","deprecated":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/user-followers":{"get":{"tags":["TikTok"],"summary":"List a TikTok user's followers","operationId":"tiktok_user_followers_v1_tiktok_user_followers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor (TikTok minCursor). Leave empty for the first page; then pass nextCursor from the previous response.","title":"Cursor"},"description":"Pagination cursor (TikTok minCursor). Leave empty for the first page; then pass nextCursor from the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/user-followings":{"get":{"tags":["TikTok"],"summary":"List who a TikTok user follows","operationId":"tiktok_user_followings_v1_tiktok_user_followings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok profile URL, @handle, or username","title":"Url"},"description":"TikTok profile URL, @handle, or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor (TikTok minCursor). Leave empty for the first page; then pass nextCursor from the previous response.","title":"Cursor"},"description":"Pagination cursor (TikTok minCursor). Leave empty for the first page; then pass nextCursor from the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/music-posts":{"get":{"tags":["TikTok"],"summary":"Posts using a TikTok sound/music","operationId":"tiktok_music_posts_v1_tiktok_music_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok music/sound URL","title":"Url"},"description":"TikTok music/sound URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"How many videos using this sound to return (1–200). Flat 2 credits per call.","default":20,"title":"Limit"},"description":"How many videos using this sound to return (1–200). Flat 2 credits per call."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/top-search":{"get":{"tags":["TikTok"],"summary":"Top mixed TikTok search results for a keyword","description":"TikTok's Top/General search tab — videos and photo carousels when present.\n\nUnlike hashtag/keyword video-only scrapers, results can include photo\ncarousels (``contentType: multi_photo`` + ``images[]``). Hashtags are\nlowercase-deduped; ``hashtags`` is always an array (possibly empty).\nTikTok itself may repeat items across pages.","operationId":"tiktok_top_search_v1_tiktok_top_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination cursor. Leave 0 for the first page; then pass the nextCursor from the previous response. TikTok may return duplicates.","default":0,"title":"Cursor"},"description":"Pagination cursor. Leave 0 for the first page; then pass the nextCursor from the previous response. TikTok may return duplicates."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/search/hashtag":{"get":{"tags":["TikTok"],"summary":"TikTok videos posted under a hashtag (tag/challenge feed)","description":"Returns videos from TikTok's /tag/{name} challenge feed — not keyword or username search. Each result must carry the requested hashtag in structured tags or as #tag in the caption; @comedy… accounts without #comedy are dropped. region only chooses the proxy exit country — it does not filter results by country. Cursor pagination via nextCursor / hasMore (nextCursor null = last page). Results are filtered after fetch, so a page can return fewer than limit with hasMore true — keep paging. Envelope includes timings{path,via,nativeMs,apifyMs,totalMs}.","operationId":"tiktok_search_by_hashtag_v1_tiktok_search_hashtag_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Hashtag to search for (with or without the leading #).","title":"Q"},"description":"Hashtag to search for (with or without the leading #)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of videos to return per page.","default":20,"title":"Limit"},"description":"Number of videos to return per page."},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset. Pass the `nextCursor` from the previous response to fetch the next page.","default":0,"title":"Cursor"},"description":"Pagination offset. Pass the `nextCursor` from the previous response to fetch the next page."},{"name":"region","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO 3166-1 alpha-2 country the scraping proxy is routed through. This only sets the proxy location — it does not restrict results to that country.","default":"US","title":"Region"},"description":"ISO 3166-1 alpha-2 country the scraping proxy is routed through. This only sets the proxy location — it does not restrict results to that country."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/search/users":{"get":{"tags":["TikTok"],"summary":"Search TikTok users by keyword","description":"Keyword search over usernames, display names and bios. Native path is TikTok's signed web search (~1 s per page, real cursor pagination via nextCursor — the cursor carries the search session, pass it back verbatim): the dedicated user-search API where the exit allows it, otherwise distinct authors derived from general-search video rankings. Rows are deduped by id, so totalReturned can be below limit with hasMore false (that is the honest count, not padding); a creator ranking with several videos can repeat across a page boundary — dedupe by id when stitching pages. followers/following/videos/likes carry per-counter *IsApproximate flags — search display-rounds big totals. When the signer is unreachable the default is an empty degraded page (0 credits; degradedReason distinguishes native-unavailable from cursor-unsupported); fallback=true opts into the scraper actor (~2 min, capped at 100 s, may return degraded-empty). Envelope includes timings{path,via,nativeMs,apifyMs,totalMs}.","operationId":"tiktok_search_users_v1_tiktok_search_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query matched against usernames, display names and bios.","title":"Q"},"description":"Search query matched against usernames, display names and bios."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of users to return per page.","default":20,"title":"Limit"},"description":"Number of users to return per page."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"Pagination cursor. Pass the `nextCursor` from the previous response verbatim to fetch the next page (it carries the search session, not just an offset). Omit or pass 0 for the first page.","default":"0","title":"Cursor"},"description":"Pagination cursor. Pass the `nextCursor` from the previous response verbatim to fetch the next page (it carries the search session, not just an offset). Omit or pass 0 for the first page."},{"name":"fallback","in":"query","required":false,"schema":{"type":"boolean","description":"Opt into the scraper fallback when native search is unavailable (~2 min, capped at 100 s). Default false — return an empty degraded page instead.","default":false,"title":"Fallback"},"description":"Opt into the scraper fallback when native search is unavailable (~2 min, capped at 100 s). Default false — return an empty degraded page instead."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/song-details":{"get":{"tags":["TikTok"],"summary":"Details of a TikTok sound/song","operationId":"tiktok_song_details_v1_tiktok_song_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok music/sound URL","title":"Url"},"description":"TikTok music/sound URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/trending-feed":{"get":{"tags":["TikTok"],"summary":"TikTok trending feed (For You or Creative Center popular)","description":"Default: For You / recommend feed with engagement, rank, and author. Pass orderBy, period, page, or countryCode to switch to TikTok Creative Center popular videos (SC videos/popular filters) — same rich item shape when hydration succeeds, plus pagination.totalCount (typically 500).","operationId":"tiktok_trending_feed_v1_tiktok_trending_feed_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"ISO country code (alias of countryCode). For You: region-availability hint. Creative Center mode: chart market.","default":"US","title":"Country"},"description":"ISO country code (alias of countryCode). For You: region-availability hint. Creative Center mode: chart market."},{"name":"countryCode","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"description":"Alias of country (SC-compatible). Wins when both are set.","title":"Countrycode"},"description":"Alias of country (SC-compatible). Wins when both are set."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max items (default 20). Creative Center caps at 20/page. Flat 2 credits.","default":20,"title":"Limit"},"description":"Max items (default 20). Creative Center caps at 20/page. Flat 2 credits."},{"name":"orderBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Creative Center sort: hot (views), like, comment, repost. When set (or period/page>1), uses the popular-videos chart instead of For You.","title":"Orderby"},"description":"Creative Center sort: hot (views), like, comment, repost. When set (or period/page>1), uses the popular-videos chart instead of For You."},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Creative Center lookback days: 7, 30, or 120 (180→120). Triggers chart mode.","title":"Period"},"description":"Creative Center lookback days: 7, 30, or 120 (180→120). Triggers chart mode."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Creative Center page (default 1). page>1 triggers chart mode.","default":1,"title":"Page"},"description":"Creative Center page (default 1). page>1 triggers chart mode."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/popular-hashtags":{"get":{"tags":["TikTok"],"summary":"TikTok Creative Center popular hashtags","description":"Official TikTok Creative Center hashtag chart (ads.tiktok.com/business/creativecenter/inspiration/popular/hashtag). videoCount / totalPlays are Creative Center population totals — not sample tallies. Also returns rankDiff, trend[] time series, and growthRate derived from trend. Pass query for legacy co-occurrence related-tag discovery (challenge/detail enrich). Flat 2 credits on the Creative Center path.","operationId":"tiktok_popular_hashtags_v1_tiktok_popular_hashtags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code for the Creative Center chart. Default US.","default":"US","title":"Country"},"description":"Two-letter ISO country code for the Creative Center chart. Default US."},{"name":"period","in":"query","required":false,"schema":{"type":"integer","description":"Lookback window in days: 7, 30, or 120 (180 maps to 120). Default 7.","default":7,"title":"Period"},"description":"Lookback window in days: 7, 30, or 120 (180 maps to 120). Default 7."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Creative Center page (default 1).","default":1,"title":"Page"},"description":"Creative Center page (default 1)."},{"name":"sortBy","in":"query","required":false,"schema":{"type":"string","description":"Chart sort: popular (default).","default":"popular","title":"Sortby"},"description":"Chart sort: popular (default)."},{"name":"newOnBoard","in":"query","required":false,"schema":{"type":"boolean","description":"If true, only hashtags newly on the Top 100 board.","default":false,"title":"Newonboard"},"description":"If true, only hashtags newly on the Top 100 board."},{"name":"industryId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional Creative Center industry_id filter.","title":"Industryid"},"description":"Optional Creative Center industry_id filter."},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional niche seed for legacy co-occurrence discovery. When set (and not \"trending\"), skips the Creative Center chart and finds related tags from seed videos + challenge/detail enrich.","title":"Query"},"description":"Optional niche seed for legacy co-occurrence discovery. When set (and not \"trending\"), skips the Creative Center chart and finds related tags from seed videos + challenge/detail enrich."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok/popular-songs":{"get":{"tags":["TikTok"],"summary":"TikTok Creative Center popular / surging songs","description":"Official TikTok Creative Center sound chart (ads.tiktok.com/business/creativecenter/inspiration/popular/music). Filters: rankType=popular|surging, newOnBoard, commercialMusic (Commercial Music Library / ifCml), country, period (7/30/120), page. Each song includes rankDiff, trend[] time series, and growthRate. Can take up to ~30 seconds. Flat 2 credits.","operationId":"tiktok_popular_songs_v1_tiktok_popular_songs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"period","in":"query","required":false,"schema":{"type":"integer","description":"Lookback days: 7, 30, or 120 (180→120).","default":7,"title":"Period"},"description":"Lookback days: 7, 30, or 120 (180→120)."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}},{"name":"rankType","in":"query","required":false,"schema":{"type":"string","description":"popular (chart) or surging (rising).","default":"popular","title":"Ranktype"},"description":"popular (chart) or surging (rising)."},{"name":"newOnBoard","in":"query","required":false,"schema":{"type":"boolean","description":"Only sounds newly on the Top 100 board.","default":false,"title":"Newonboard"},"description":"Only sounds newly on the Top 100 board."},{"name":"commercialMusic","in":"query","required":false,"schema":{"type":"boolean","description":"Only Commercial Music Library–cleared sounds (brand-safe).","default":false,"title":"Commercialmusic"},"description":"Only Commercial Music Library–cleared sounds (brand-safe)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok-shop/shop-search":{"get":{"tags":["TikTok Shop"],"summary":"Search TikTok Shop products","operationId":"shop_search_v1_tiktok_shop_shop_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Product search query","title":"Q"},"description":"Product search query"},{"name":"region","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Region"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok-shop/shop-products":{"get":{"tags":["TikTok Shop"],"summary":"TikTok Shop store catalog — shopInfo + products with sold/rating","operationId":"shop_products_v1_tiktok_shop_shop_products_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok Shop store URL","title":"Url"},"description":"TikTok Shop store URL"},{"name":"region","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter market region (default US). Non-US catalog coverage depends on TikTok exposing that shop in the selected region — empty results outside the US are often a platform limit, not a Captapi bug.","default":"US","title":"Region"},"description":"Two-letter market region (default US). Non-US catalog coverage depends on TikTok exposing that shop in the selected region — empty results outside the US are often a platform limit, not a Captapi bug."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok-shop/product-details":{"get":{"tags":["TikTok Shop"],"summary":"TikTok Shop product details","operationId":"product_details_v1_tiktok_shop_product_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok Shop product URL","title":"Url"},"description":"TikTok Shop product URL"},{"name":"region","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Market region ISO code for the Apify fallback path (default US).","default":"US","title":"Region"},"description":"Market region ISO code for the Apify fallback path (default US)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok-shop/product-reviews":{"get":{"tags":["TikTok Shop"],"summary":"TikTok Shop product reviews","operationId":"product_reviews_v1_tiktok_shop_product_reviews_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok Shop product URL","title":"Url"},"description":"TikTok Shop product URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tiktok-shop/user-showcase":{"get":{"tags":["TikTok Shop"],"summary":"List products a TikTok creator promotes in their Shop showcase","operationId":"user_showcase_v1_tiktok_shop_user_showcase_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"TikTok username, @handle, or profile URL, e.g. jeffreestar or https://www.tiktok.com/@jeffreestar","title":"Username"},"description":"TikTok username, @handle, or profile URL, e.g. jeffreestar or https://www.tiktok.com/@jeffreestar"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/truth-social/profile":{"get":{"tags":["Truth Social"],"summary":"Truth Social profile","description":"Public Truth Social profile (Mastodon-compatible account fields). As of late 2025, Truth Social only lets you view public profiles/posts of prominent users (e.g. Trump, Vance) without authentication; most other accounts require auth and will 404 here. Flat 1 credit.","operationId":"profile_v1_truth_social_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Truth Social profile URL or @username","title":"Url"},"description":"Truth Social profile URL or @username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/truth-social/user-posts":{"get":{"tags":["Truth Social"],"summary":"Truth Social user posts (cursor-paginated)","description":"Recent public Truth Social posts for a profile (cursor via Mastodon max_id). Full author{} once at the top; each post keeps a slim author {id,username,displayName,avatar,verified}. Post text preserves real URLs (span soft-wraps are not turned into spaces) and links[] lists authoritative <a href> targets. As of late 2025, Truth Social only lets you view public profiles/posts of prominent users (e.g. Trump, Vance) without authentication; most other accounts require auth and will 404 here. Native path is flat 2 credits; Apify fallback ~0.85/post (min 2).","operationId":"user_posts_v1_truth_social_user_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Truth Social profile URL or @username","title":"Url"},"description":"Truth Social profile URL or @username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":80,"minimum":1,"description":"Max posts to return (default 20, max 80). Capped at 80 because Truth Social's statuses page size is ~40 and larger asks still page via cursor.","default":20,"title":"Limit"},"description":"Max posts to return (default 20, max 80). Capped at 80 because Truth Social's statuses page size is ~40 and larger asks still page via cursor."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor (Mastodon max_id). Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor (Mastodon max_id). Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/truth-social/post":{"get":{"tags":["Truth Social"],"summary":"Truth Social post","description":"Public Truth Social post (text, author, engagement, media). As of late 2025, Truth Social only lets you view public profiles/posts of prominent users (e.g. Trump, Vance) without authentication; most other accounts require auth and will 404 here. Flat 1 credit.","operationId":"post_v1_truth_social_post_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Truth Social post URL or post ID","title":"Url"},"description":"Truth Social post URL or post ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/details":{"get":{"tags":["Instagram"],"summary":"Instagram post/reel details","operationId":"instagram_details_v1_instagram_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Instagram post or reel URL","title":"Url"},"description":"Instagram post or reel URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/transcript":{"get":{"tags":["Instagram"],"summary":"Instagram Reel transcript","operationId":"instagram_transcript_v1_instagram_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":5},{"type":"null"}],"description":"Optional ISO-639-1 language hint (e.g. 'tr', 'en'). Pins the transcription language instead of auto-detection; recommended for short clips with little speech.","title":"Language"},"description":"Optional ISO-639-1 language hint (e.g. 'tr', 'en'). Pins the transcription language instead of auto-detection; recommended for short clips with little speech."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/summarize":{"get":{"tags":["Instagram"],"summary":"AI summary of Instagram Reel","operationId":"instagram_summarize_v1_instagram_summarize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":5},{"type":"null"}],"description":"Optional ISO-639-1 code (e.g. 'tr'): pins the speech language and sets the summary output language.","title":"Language"},"description":"Optional ISO-639-1 code (e.g. 'tr'): pins the speech language and sets the summary output language."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/comments":{"get":{"tags":["Instagram"],"summary":"Instagram post/reel comments","operationId":"instagram_comments_v1_instagram_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/channel-details":{"get":{"tags":["Instagram"],"summary":"Instagram profile info","operationId":"instagram_channel_details_v1_instagram_channel_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Instagram profile URL, @handle, or username","title":"Url"},"description":"Instagram profile URL, @handle, or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/basic-profile":{"get":{"tags":["Instagram"],"summary":"Full Instagram profile by user ID","operationId":"instagram_basic_profile_v1_instagram_basic_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"userId","in":"query","required":true,"schema":{"type":"string","description":"Instagram numeric user ID (e.g. 13460080). A profile URL, @handle, or username is also accepted and resolved automatically.","title":"Userid"},"description":"Instagram numeric user ID (e.g. 13460080). A profile URL, @handle, or username is also accepted and resolved automatically."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/channel-posts":{"get":{"tags":["Instagram"],"summary":"Latest posts from an Instagram profile","operationId":"instagram_channel_posts_v1_instagram_channel_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Instagram profile URL, @handle, or username","title":"Url"},"description":"Instagram profile URL, @handle, or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response, e.g. 3937014945555313553_1697296","title":"Cursor"},"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response, e.g. 3937014945555313553_1697296"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/channel-reels":{"get":{"tags":["Instagram"],"summary":"Latest Reels from an Instagram profile","operationId":"instagram_channel_reels_v1_instagram_channel_reels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instagram profile URL, @handle, or username. Omit when userId is set.","title":"Url"},"description":"Instagram profile URL, @handle, or username. Omit when userId is set."},{"name":"userId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Instagram numeric user ID (e.g. 173560420). Skips handle→ID resolve (historically ~80s on the sequential WPI path; prefer this when you already have the ID from basic-profile or profile-search).","title":"Userid"},"description":"Instagram numeric user ID (e.g. 173560420). Skips handle→ID resolve (historically ~80s on the sequential WPI path; prefer this when you already have the ID from basic-profile or profile-search)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response, e.g. 3937014945555313553_1697296. Stop when hasMore is false.","title":"Cursor"},"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response, e.g. 3937014945555313553_1697296. Stop when hasMore is false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/reels-search":{"get":{"tags":["Instagram"],"summary":"Search Instagram Reels by hashtag","description":"Same native hashtag grid as ``/hashtag-search?mediaType=reels`` — flat 2 credits.\n\nReturns the enriched post shape (author.verified/profileImage/followers,\nengagement.views + plays when distinct, music, location, paid flags).","operationId":"instagram_reels_search_v1_instagram_reels_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Hashtag (without #) or keyword","title":"Q"},"description":"Hashtag (without #) or keyword"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"datePosted","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional recency filter: last_24_hours | last_week | last_month | last_year (aliases: today, this_week, this_month, this_year).","title":"Dateposted"},"description":"Optional recency filter: last_24_hours | last_week | last_month | last_year (aliases: today, this_week, this_month, this_year)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/highlights":{"get":{"tags":["Instagram"],"summary":"List Instagram Story Highlights for a profile","description":"Persistent Story Highlight albums (not live 24h Stories). Flat 1 credit.","operationId":"instagram_highlights_v1_instagram_highlights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Profile URL or @handle (e.g. https://instagram.com/nasa or @nasa)","title":"Url"},"description":"Profile URL or @handle (e.g. https://instagram.com/nasa or @nasa)"},{"name":"userId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Numeric Instagram user id (skips handle→ID resolve when known)","title":"Userid"},"description":"Numeric Instagram user id (skips handle→ID resolve when known)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/highlights-details":{"get":{"tags":["Instagram"],"summary":"Instagram Story Highlight album details","description":"Items inside one persistent Highlight album. Flat 1 credit.","operationId":"instagram_highlights_details_v1_instagram_highlights_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","description":"Highlight id from /v1/instagram/highlights (no highlight: prefix)","title":"Id"},"description":"Highlight id from /v1/instagram/highlights (no highlight: prefix)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/trending-reels":{"get":{"tags":["Instagram"],"summary":"Instagram trending Reels from /reels","description":"On-demand trending Reels — videos only, flat 2 credits always.\n\nCache-first (default) amortizes native scrape cost for us; the customer\nalways pays the same flat fee. ``cache=false`` forces live. Concurrent\nsame-country misses share one scrape. Hard deadline 110s (under\nCloudflare). Failures return 502 — never an old snapshot.","operationId":"instagram_trending_reels_v1_instagram_trending_reels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string","description":"Country name or ISO code (e.g. 'United States' or 'US') for Reels localization","default":"United States","title":"Country"},"description":"Country name or ISO code (e.g. 'United States' or 'US') for Reels localization"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":10,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Default true (cache-first): serve the per-country response cache when present (TTL 4 hours). Every successful call costs 2 credits — including cache hits (cache is our margin, not a free tier). Set false to skip the cache read and force a live scrape (typically under 20s, hard cap 110s); the fresh result still refreshes the cache.","default":true,"title":"Cache"},"description":"Default true (cache-first): serve the per-country response cache when present (TTL 4 hours). Every successful call costs 2 credits — including cache hits (cache is our margin, not a free tier). Set false to skip the cache read and force a live scrape (typically under 20s, hard cap 110s); the fresh result still refreshes the cache."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/reels-by-audio-id":{"get":{"tags":["Instagram"],"summary":"Instagram Reels by audio ID","operationId":"instagram_reels_by_audio_id_v1_instagram_reels_by_audio_id_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"audio_id","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Instagram audio/music ID or full audio URL","title":"Audio Id"},"description":"Instagram audio/music ID or full audio URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/tagged-posts":{"get":{"tags":["Instagram"],"summary":"Posts an Instagram user is tagged in","operationId":"instagram_tagged_posts_v1_instagram_tagged_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Instagram profile URL, @handle, or username","title":"Url"},"description":"Instagram profile URL, @handle, or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/hashtag-search":{"get":{"tags":["Instagram"],"summary":"Instagram hashtag Explore posts (not keyword search)","description":"Returns posts from Instagram's hashtag Explore surface (top/recent tag page — Reels-heavy; not keyword or username search). engagement.likes is like_count; play totals go to engagement.views. Optional mediaType=reels filters to Reels only.","operationId":"instagram_hashtag_search_v1_instagram_hashtag_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Hashtag (without #)","title":"Q"},"description":"Hashtag (without #)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"mediaType","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|reels)$","description":"all (default) or reels — filter to Reels/clips only.","default":"all","title":"Mediatype"},"description":"all (default) or reels — filter to Reels/clips only."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/profile-search":{"get":{"tags":["Instagram"],"summary":"Find an Instagram profile by name or @handle","operationId":"instagram_profile_search_v1_instagram_profile_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Q"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Serve from the 24h shared cache when available (0 credits on hit). Default true — resolve answers barely change; set false to always fetch fresh.","default":true,"title":"Cache"},"description":"Serve from the 24h shared cache when available (0 credits on hit). Default true — resolve answers barely change; set false to always fetch fresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/instagram/embed":{"get":{"tags":["Instagram"],"summary":"Embed HTML for an Instagram post, reel, or profile","operationId":"instagram_embed_v1_instagram_embed_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Instagram post, reel, or profile URL (or @handle)","title":"Url"},"description":"Instagram post, reel, or profile URL (or @handle)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/details":{"get":{"tags":["Facebook"],"summary":"Facebook video/post details","operationId":"facebook_details_v1_facebook_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/summarize":{"get":{"tags":["Facebook"],"summary":"AI summary of Facebook video/post","operationId":"facebook_summarize_v1_facebook_summarize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/comments":{"get":{"tags":["Facebook"],"summary":"Facebook post comments","operationId":"facebook_comments_v1_facebook_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Facebook post or Reel URL. Omit when feedbackId is set.","title":"Url"},"description":"Facebook post or Reel URL. Omit when feedbackId is set."},{"name":"feedbackId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Post feedback id from /v1/facebook/details (base64 feedback:POSTID). Prefer when you already have it from details — skips needing the post URL. Also accepts feedback_id.","title":"Feedbackid"},"description":"Post feedback id from /v1/facebook/details (base64 feedback:POSTID). Prefer when you already have it from details — skips needing the post URL. Also accepts feedback_id."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"How many top-level comments to return (1–500). Flat 2 credits per call.","default":50,"title":"Limit"},"description":"How many top-level comments to return (1–500). Flat 2 credits per call."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/page-details":{"get":{"tags":["Facebook"],"summary":"Facebook page info & stats","operationId":"facebook_page_details_v1_facebook_page_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook page URL, @handle, or page name","title":"Url"},"description":"Facebook page URL, @handle, or page name"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/profile-posts":{"get":{"tags":["Facebook"],"summary":"Latest posts from a Facebook profile/page","operationId":"facebook_profile_posts_v1_facebook_profile_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook profile/page URL, @handle, or page name","title":"Url"},"description":"Facebook profile/page URL, @handle, or page name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/profile-reels":{"get":{"tags":["Facebook"],"summary":"Latest Reels from a Facebook profile/page","operationId":"facebook_profile_reels_v1_facebook_profile_reels_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook profile/page URL, @handle, or page name","title":"Url"},"description":"Facebook profile/page URL, @handle, or page name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/group-posts":{"get":{"tags":["Facebook"],"summary":"Posts from a public Facebook group","operationId":"facebook_group_posts_v1_facebook_group_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public Facebook group URL","title":"Url"},"description":"Public Facebook group URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"sortBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Feed sort: TOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL (default) | CHRONOLOGICAL_LISTINGS. Passed to Facebook as sorting_setting.","title":"Sortby"},"description":"Feed sort: TOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL (default) | CHRONOLOGICAL_LISTINGS. Passed to Facebook as sorting_setting."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/comment-replies":{"get":{"tags":["Facebook"],"summary":"Replies to a Facebook comment","operationId":"facebook_comment_replies_v1_facebook_comment_replies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook post URL the comment belongs to","title":"Url"},"description":"Facebook post URL the comment belongs to"},{"name":"commentId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the parent comment.","title":"Commentid"},"description":"ID of the parent comment."},{"name":"comment_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated alias of commentId.","deprecated":true,"title":"Comment Id"},"description":"Deprecated alias of commentId.","deprecated":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"How many direct replies to return (1–500). Flat 2 credits per call.","default":50,"title":"Limit"},"description":"How many direct replies to return (1–500). Flat 2 credits per call."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/profile-photos":{"get":{"tags":["Facebook"],"summary":"Photos from a Facebook profile/page","description":"Returns photo grid items with image URL and accessibilityCaption (Facebook alt-text — not a user-written post caption). Publish time and engagement are usually absent on this surface.","operationId":"facebook_profile_photos_v1_facebook_profile_photos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook profile/page URL, @handle, or page name","title":"Url"},"description":"Facebook profile/page URL, @handle, or page name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/profile-events":{"get":{"tags":["Facebook"],"summary":"Events from a Facebook profile/page","operationId":"facebook_profile_events_v1_facebook_profile_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook profile/page URL, @handle, or page name","title":"Url"},"description":"Facebook profile/page URL, @handle, or page name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/marketplace-item":{"get":{"tags":["Facebook"],"summary":"Facebook Marketplace listing details","operationId":"facebook_marketplace_item_v1_facebook_marketplace_item_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook Marketplace item URL","title":"Url"},"description":"Facebook Marketplace item URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/marketplace-search":{"get":{"tags":["Facebook"],"summary":"Search Facebook Marketplace listings","operationId":"facebook_marketplace_search_v1_facebook_marketplace_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Product/keyword to search for","title":"Q"},"description":"Product/keyword to search for"},{"name":"location","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"City or place name, e.g. 'Austin, TX'","title":"Location"},"description":"City or place name, e.g. 'Austin, TX'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"How many listings to return (1–200). Flat 2 credits when details=false; with details=true billed as 2 + 2 per listing. First SSR/scroll page typically yields ~15–60 cards.","default":20,"title":"Limit"},"description":"How many listings to return (1–200). Flat 2 credits when details=false; with details=true billed as 2 + 2 per listing. First SSR/scroll page typically yields ~15–60 cards."},{"name":"minPrice","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum price in local currency units.","title":"Minprice"},"description":"Minimum price in local currency units."},{"name":"maxPrice","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Maximum price in local currency units.","title":"Maxprice"},"description":"Maximum price in local currency units."},{"name":"sortBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort: suggested (default), distance, creation_time, price_ascend, price_descend.","title":"Sortby"},"description":"Sort: suggested (default), distance, creation_time, price_ascend, price_descend."},{"name":"daysSinceListed","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Recency filter: 1 (24h), 7, or 30 days.","title":"Dayssincelisted"},"description":"Recency filter: 1 (24h), 7, or 30 days."},{"name":"condition","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Item condition: new, like_new, good, fair (comma-separated ok).","title":"Condition"},"description":"Item condition: new, like_new, good, fair (comma-separated ok)."},{"name":"deliveryMethod","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Delivery filter: local_pickup, shipping, or all. Shipped listings (SHIPPING / SHIPPING_ONSITE) can appear nationwide outside radiusMiles — use local_pickup for nearby-only results. Each row includes isLocal / shipsOutsideRadius so you can tell.","title":"Deliverymethod"},"description":"Delivery filter: local_pickup, shipping, or all. Shipped listings (SHIPPING / SHIPPING_ONSITE) can appear nationwide outside radiusMiles — use local_pickup for nearby-only results. Each row includes isLocal / shipsOutsideRadius so you can tell."},{"name":"availability","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Availability: available (default), sold, or all.","title":"Availability"},"description":"Availability: available (default), sold, or all."},{"name":"radiusMiles","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Search radius in miles (1,2,5,10,20,40,60,80,100,250,500). Default ~40. Does not exclude nationwide shipped listings — see deliveryMethod=local_pickup.","title":"Radiusmiles"},"description":"Search radius in miles (1,2,5,10,20,40,60,80,100,250,500). Default ~40. Does not exclude nationwide shipped listings — see deliveryMethod=local_pickup."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Top-level Marketplace category slug, e.g. electronics, vehicles, home.","title":"Category"},"description":"Top-level Marketplace category slug, e.g. electronics, vehicles, home."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from a previous nextCursor (same query + filters).","title":"Cursor"},"description":"Pagination cursor from a previous nextCursor (same query + filters)."},{"name":"details","in":"query","required":false,"schema":{"type":"boolean","description":"When true, enrich each listing with description, condition, coordinates, and the full photo gallery via item pages (2 + 2 credits per listing). Default false → search cards at flat 2 credits (still includes cover photo).","default":false,"title":"Details"},"description":"When true, enrich each listing with description, condition, coordinates, and the full photo gallery via item pages (2 + 2 credits per listing). Default false → search cards at flat 2 credits (still includes cover photo)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/marketplace-location-search":{"get":{"tags":["Facebook"],"summary":"Search Facebook Marketplace locations","description":"Disambiguate a city/place name into Marketplace hubs with lat/lng and Facebook city page id (same value search listings expose as cityPageId). marketplace-search already accepts a city string — use this when the name is ambiguous (Austin TX vs Austin MN) or you need coordinates / id before searching. Bare ambiguous cities resolve from a local table (typically <1s); everywhere else geocodes globally (typically <2s) instead of a ~28s Decodo hub fetch. Each row carries idResolved so callers can see which entries join to search cityPageId. Flat 2 credits.","operationId":"facebook_marketplace_location_search_v1_facebook_marketplace_location_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"City/place query. Include a state for a single hit (e.g. 'Austin, TX'); bare names like 'Austin' may return multiple candidates for disambiguation.","title":"Q"},"description":"City/place query. Include a state for a single hit (e.g. 'Austin, TX'); bare names like 'Austin' may return multiple candidates for disambiguation."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/event-search":{"get":{"tags":["Facebook"],"summary":"Search Facebook events by keyword/location","description":"Search public Facebook events. Upstream discovery (SERP / Facebook) can return past events — use upcoming=true or from=YYYY-MM-DD for a forward window, or filter client-side on isPast. Billing: flat 2 credits on the native path; Apify fallthrough is ~2 credits per returned event (min 4). Latency: native search hydrates event pages via Decodo — set client timeouts ≥130s until typical calls stay under 60s. Response includes timings{serpMs,hydrateMs,hydrateAttempts,discoveryMs,totalMs,path}.","operationId":"facebook_event_search_v1_facebook_event_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Topic keyword, e.g. 'comedy'. Pair with location for city-scoped results.","title":"Q"},"description":"Topic keyword, e.g. 'comedy'. Pair with location for city-scoped results."},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional city/place geo filter (e.g. London, Chicago). Matches resolved timezone, location.city, or coordinates near the city — not a required substring of the event title.","title":"Location"},"description":"Optional city/place geo filter (e.g. London, Chicago). Matches resolved timezone, location.city, or coordinates near the city — not a required substring of the event title."},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive local start date filter YYYY-MM-DD. Prefer over client-side isPast for upcoming-only.","title":"From"},"description":"Inclusive local start date filter YYYY-MM-DD. Prefer over client-side isPast for upcoming-only."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive local start date filter YYYY-MM-DD.","title":"To"},"description":"Inclusive local start date filter YYYY-MM-DD."},{"name":"upcoming","in":"query","required":false,"schema":{"type":"boolean","description":"When true and from is omitted, sets from to today's UTC date so past events are dropped. Facebook/SERP otherwise may return historical hits.","default":false,"title":"Upcoming"},"description":"When true and from is omitted, sets from to today's UTC date so past events are dropped. Facebook/SERP otherwise may return historical hits."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/facebook/event-details":{"get":{"tags":["Facebook"],"summary":"Facebook event details","operationId":"facebook_event_details_v1_facebook_event_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Facebook event URL, e.g. https://facebook.com/events/ID","title":"Url"},"description":"Facebook event URL, e.g. https://facebook.com/events/ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/facebook/search":{"get":{"tags":["Ad Library"],"summary":"Search Meta/Facebook Ad Library","operationId":"facebook_search_v1_ad_library_facebook_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword, brand, or advertiser to search.","title":"Q"},"description":"Keyword, brand, or advertiser to search."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max ads to return per call (default 20, max 200). Native HTML page may return fewer.","default":20,"title":"Limit"},"description":"Max ads to return per call (default 20, max 200). Native HTML page may return fewer."},{"name":"status","in":"query","required":false,"schema":{"enum":["ALL","ACTIVE","INACTIVE"],"type":"string","description":"Ad delivery status filter. Default ACTIVE — use ALL for historical/inactive ads.","default":"ACTIVE","title":"Status"},"description":"Ad delivery status filter. Default ACTIVE — use ALL for historical/inactive ads."},{"name":"media_type","in":"query","required":false,"schema":{"enum":["ALL","IMAGE","VIDEO","MEME","IMAGE_AND_MEME","NONE"],"type":"string","description":"Creative media filter (Meta Ad Library media_type).","default":"ALL","title":"Media Type"},"description":"Creative media filter (Meta Ad Library media_type)."},{"name":"platforms","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated publisher platforms to keep: FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, THREADS. Filters the returned page (Meta's HTML search does not always honor this server-side).","title":"Platforms"},"description":"Comma-separated publisher platforms to keep: FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, THREADS. Filters the returned page (Meta's HTML search does not always honor this server-side)."},{"name":"ad_type","in":"query","required":false,"schema":{"enum":["all","political_and_issue_ads"],"type":"string","description":"Ad type filter. political_and_issue_ads is required for spend/impressions on many markets.","default":"all","title":"Ad Type"},"description":"Ad type filter. political_and_issue_ads is required for spend/impressions on many markets."},{"name":"search_type","in":"query","required":false,"schema":{"enum":["keyword_unordered","keyword_exact_phrase"],"type":"string","description":"Keyword matching: unordered tokens vs exact phrase.","default":"keyword_unordered","title":"Search Type"},"description":"Keyword matching: unordered tokens vs exact phrase."},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"enum":["total_impressions","relevancy_monthly_grouped"],"type":"string"},{"type":"null"}],"description":"Meta sort mode (sort_data[mode]). Omit for Meta default.","title":"Sort By"},"description":"Meta sort mode (sort_data[mode]). Omit for Meta default."},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Only ads with delivery start on/after this date (YYYY-MM-DD).","title":"Start Date"},"description":"Only ads with delivery start on/after this date (YYYY-MM-DD)."},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Only ads with delivery start on/before this date (YYYY-MM-DD).","title":"End Date"},"description":"Only ads with delivery start on/before this date (YYYY-MM-DD)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from a previous nextCursor. Pages through the current Meta HTML result batch (same filters). When nextCursor is null, refine with start_date/status or a narrower query.","title":"Cursor"},"description":"Pagination cursor from a previous nextCursor. Pages through the current Meta HTML result batch (same filters). When nextCursor is null, refine with start_date/status or a narrower query."},{"name":"trim","in":"query","required":false,"schema":{"type":"boolean","description":"SC-compatible. Captapi payloads are already lean vs Meta nested snapshots; when true, omit cards/images/videos typed arrays (media[] stays).","default":false,"title":"Trim"},"description":"SC-compatible. Captapi payloads are already lean vs Meta nested snapshots; when true, omit cards/images/videos typed arrays (media[] stays)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/facebook/company-ads":{"get":{"tags":["Ad Library"],"summary":"Meta/Facebook ads for a page or advertiser","description":"List ads for one Meta page/advertiser. Prefer pageId (or libraryUrl) from /facebook/search-companies — that id is view_all_page_id. A facebook.com/{digits}/ profileId in the page URL is a different namespace and may 404 or miss ads if used alone; vanity URLs (facebook.com/nike/) work when Meta resolves them.","operationId":"facebook_company_ads_v1_ad_library_facebook_company_ads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Page id from search-companies (pageId), libraryUrl, Facebook page URL, or Ad Library URL with view_all_page_id.","title":"Url"},"description":"Page id from search-companies (pageId), libraryUrl, Facebook page URL, or Ad Library URL with view_all_page_id."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/facebook/search-companies":{"get":{"tags":["Ad Library"],"summary":"Find advertisers/pages in Meta Ad Library","description":"Find Meta Ad Library advertisers/pages by brand name. Results are relevance-filtered so the query must appear in the page name (empty beats off-brand pages that merely ran ads near the keyword). Each company exposes pageId / advertiserId (same value — pass to /facebook/company-ads as url=) and profileId when the facebook.com/{digits}/ URL uses a different numeric identity. libraryUrl is the ready view_all_page_id link. Flat 2 credits native.","operationId":"facebook_search_companies_v1_ad_library_facebook_search_companies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Company or brand name to search for","title":"Q"},"description":"Company or brand name to search for"},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/facebook/ad-details":{"get":{"tags":["Ad Library"],"summary":"Meta/Facebook ad details","description":"Fetch one Meta Ad Library ad by URL or archive ID. Creative fields (text/headline/cta/landingUrl/media/advertiser) match a search hit for the same id — use this endpoint for ID lookup without paging search. Delivery extras are returned when Meta publishes them (mostly political/issue and EU AAA ads): platforms / publisherPlatforms, demographicDistribution[], regionDistribution[], ageCountryGenderReachBreakdown / euTransparency, variantCount (collation), isAaaEligible. On commercial ads Meta often withholds those breakdowns — keys stay present as null so the schema is stable. Flat 2 credits on the native path.","operationId":"facebook_ad_details_v1_ad_library_facebook_ad_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Meta Ad Library ad URL or ad ID","title":"Url"},"description":"Meta Ad Library ad URL or ad ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/facebook/ad-transcript":{"get":{"tags":["Ad Library"],"summary":"Meta/Facebook ad transcript / creative text","operationId":"facebook_ad_transcript_v1_ad_library_facebook_ad_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Meta Ad Library ad URL or ad ID","title":"Url"},"description":"Meta Ad Library ad URL or ad ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/tiktok/search":{"get":{"tags":["Ad Library"],"summary":"Search TikTok Ad Library","description":"Search TikTok's Commercial Content Library (library.tiktok.com / EU DSA) as clean JSON. Flat 2 credits on the native path when results are returned (Apify fallback capped at 5); empty results are never charged. Keyword q is case-insensitive whole-word match=any|all on advertiser/title/copy (hair ≠ wheelchair); each hit includes matchedFrom (field names) and the envelope reports candidatesScanned / filteredOut / literalMatches / truncated (true when literalMatches > totalReturned). Ads share a uniform key set (null when withheld). firstShown/lastShown are omitted — DSA list XHR stamps scrape/serve times, not run dates; use /tiktok/ad-details for calendar-day ISO dates. Hard-capped at 110s → 502 scrape_failed (0 credits). Default country GB. For Creative Center Top Ads use /v1/ad-library/tiktok/top-ads.","operationId":"tiktok_search_v1_ad_library_tiktok_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword or advertiser name (min 2 characters).","title":"Q"},"description":"Keyword or advertiser name (min 2 characters)."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code (e.g. GB, DE, FR). Default GB — EU Commercial Content Library; US often empty.","default":"GB","title":"Country"},"description":"Two-letter ISO country code (e.g. GB, DE, FR). Default GB — EU Commercial Content Library; US often empty."},{"name":"match","in":"query","required":false,"schema":{"type":"string","description":"Keyword token mode: \"any\" (default, OR whole-word) or \"all\" (AND). Case-insensitive; hair ≠ wheelchair.","default":"any","title":"Match"},"description":"Keyword token mode: \"any\" (default, OR whole-word) or \"all\" (AND). Case-insensitive; hair ≠ wheelchair."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/tiktok/top-ads":{"get":{"tags":["Ad Library"],"summary":"TikTok Creative Center Top Ads","description":"High-performing TikTok ads from Creative Center Top Ads (ads.tiktok.com/business/creativecenter) as clean JSON — title, brandName, advertiser{id,name}, likes (+likesIsApproximate), ctr, costTier, resolved industry/objective, and video{} (urlHd only when a distinct HD rendition exists). Creative Center does not expose ad run dates on the list surface — use /tiktok/search or /tiktok/ad-details (DSA) for firstShown/lastShown. Keyword q is whole-word match=any|all; each hit includes matchedFrom (field names that matched) and the envelope reports candidatesScanned/filteredOut/literalMatches/matchBasis. Zero literal hits → empty ads (free). Typically 30–60 seconds — set HTTP client timeout ≥120s. Flat 2 credits on the browser path; Apify ~1/returned ad (min 2).","operationId":"tiktok_top_ads_v1_ad_library_tiktok_top_ads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional keyword. Case-insensitive whole-word match on title, brand, tags, industry, objective (hair ≠ wheelchair). Each returned ad includes matchedFrom: which of those fields matched. Envelope candidatesScanned is the pre-filter pool size. Empty ads[] when nothing matches (free).","title":"Q"},"description":"Optional keyword. Case-insensitive whole-word match on title, brand, tags, industry, objective (hair ≠ wheelchair). Each returned ad includes matchedFrom: which of those fields matched. Envelope candidatesScanned is the pre-filter pool size. Empty ads[] when nothing matches (free)."},{"name":"match","in":"query","required":false,"schema":{"type":"string","description":"Keyword token mode: \"any\" (default, OR) or \"all\" (AND).","default":"any","title":"Match"},"description":"Keyword token mode: \"any\" (default, OR) or \"all\" (AND)."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code. Default US.","default":"US","title":"Country"},"description":"Two-letter ISO country code. Default US."},{"name":"period","in":"query","required":false,"schema":{"type":"integer","description":"Lookback window in days: 7, 30, or 180. Default 30.","default":30,"title":"Period"},"description":"Lookback window in days: 7, 30, or 180. Default 30."},{"name":"orderBy","in":"query","required":false,"schema":{"type":"string","description":"Sort: for_you, likes, ctr, impressions, or cost.","default":"for_you","title":"Orderby"},"description":"Sort: for_you, likes, ctr, impressions, or cost."},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional industry: Apify/Creative Center labels (Gaming, Beauty & Personal Care, …) or TikTok keys (label_25000000000). Invalid values return 400 — not a 502.","title":"Industry"},"description":"Optional industry: Apify/Creative Center labels (Gaming, Beauty & Personal Care, …) or TikTok keys (label_25000000000). Invalid values return 400 — not a 502."},{"name":"objective","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional campaign objective: Traffic, App Install, Conversions, Reach, Video Views, Lead Generation, Engagement (aliases: Conversion).","title":"Objective"},"description":"Optional campaign objective: Traffic, App Install, Conversions, Reach, Video Views, Lead Generation, Engagement (aliases: Conversion)."},{"name":"adFormat","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional format filter: spark, non_spark, or actor label.","title":"Adformat"},"description":"Optional format filter: spark, non_spark, or actor label."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/tiktok/ad-details":{"get":{"tags":["Ad Library"],"summary":"TikTok ad details","description":"Fetch one TikTok Commercial Content Library ad by URL or ad ID. Same uniform key set as /tiktok/search (null when withheld) plus calendar-day ISO firstShown/lastShown (search omits those — list XHR dates are not run dates). platform=tiktok, library=dsa, media[] objects (url/type/expiresAt when signed), impressions from Unique users seen when disclosed. advertiser is always {id,name,url,logo,location}. Always 2 credits (success) — native and Apify fallback share one price so billing is budgetable. Response includes fetchPath: \"native\" | \"fallback\" so clients can see which path ran. Default country GB.","operationId":"tiktok_ad_details_v1_ad_library_tiktok_ad_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"TikTok Ad Library URL or ad ID","title":"Url"},"description":"TikTok Ad Library URL or ad ID"},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code. Default GB.","default":"GB","title":"Country"},"description":"Two-letter ISO country code. Default GB."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/google/company-ads":{"get":{"tags":["Ad Library"],"summary":"Google Ads Transparency Center company ads","operationId":"google_company_ads_v1_ad_library_google_company_ads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"advertiser","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Advertiser name, domain (e.g. nike.com), or Google advertiser ID (AR…). Prefer AR… from /google/advertiser-search for a deterministic entity.","title":"Advertiser"},"description":"Advertiser name, domain (e.g. nike.com), or Google advertiser ID (AR…). Prefer AR… from /google/advertiser-search for a deterministic entity."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":8,"description":"Two-letter ISO country / region code (soft filter). Alias: region.","default":"US","title":"Country"},"description":"Two-letter ISO country / region code (soft filter). Alias: region."},{"name":"region","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":8},{"type":"null"}],"description":"Alias for country (ISO code). When set, overrides country.","title":"Region"},"description":"Alias for country (ISO code). When set, overrides country."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from a previous response's nextCursor.","title":"Cursor"},"description":"Pagination cursor from a previous response's nextCursor."},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional YYYY-MM-DD — keep creatives whose shown window overlaps this start.","title":"Start Date"},"description":"Optional YYYY-MM-DD — keep creatives whose shown window overlaps this start."},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional YYYY-MM-DD — keep creatives whose shown window overlaps this end.","title":"End Date"},"description":"Optional YYYY-MM-DD — keep creatives whose shown window overlaps this end."},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"enum":["last_shown","first_shown"],"type":"string"},{"type":"null"}],"description":"Client-side sort before slicing: last_shown (recent activity first) or first_shown. Default is ATC order (often oldest creatives first).","title":"Sort"},"description":"Client-side sort before slicing: last_shown (recent activity first) or first_shown. Default is ATC order (often oldest creatives first)."},{"name":"topic","in":"query","required":false,"schema":{"type":"string","description":"Ad topic filter. Only \"all\" is supported (commercial ATC). \"political\" is not available here.","default":"all","title":"Topic"},"description":"Ad topic filter. Only \"all\" is supported (commercial ATC). \"political\" is not available here."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/google/ad-details":{"get":{"tags":["Ad Library"],"summary":"Google ad details","description":"Fetch one Google Ads Transparency creative by AR… + CR… URL. Adds text/headline/landingUrl/impressions when ATC publishes them (beyond company-ads list rows). Response id + advertiser.id always match the request — different Nike legal entities (Inc. vs Retail BV vs SRL) are not interchangeable. countries[] is ISO-3166 alpha-2; country is a single ISO when unambiguous. textIsTemplate marks Google Ads Dynamic Keyword Insertion macros ({KeyWord:…}). Flat 2 credits native; Apify fallback capped at 5.","operationId":"google_ad_details_v1_ad_library_google_ad_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"creative_id","in":"query","required":true,"schema":{"type":"string","description":"Google Ads Transparency URL containing AR... and CR... IDs","title":"Creative Id"},"description":"Google Ads Transparency URL containing AR... and CR... IDs"},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"default":"US","title":"Country"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/google/advertiser-search":{"get":{"tags":["Ad Library"],"summary":"Search Google Ads advertisers","description":"Search Google Ads Transparency advertisers and return ranked AR… entities. Brand queries are expanded (e.g. nike → Nike, Inc. + NIKE SRL) so country=US surfaces the parent company first. Pass advertisers[].id into /v1/ad-library/google/company-ads?advertiser=AR… for a deterministic creatives chain. Flat 1 credit.","operationId":"google_advertiser_search_v1_ad_library_google_advertiser_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Brand, domain, or advertiser name (min 2 characters).","title":"Q"},"description":"Brand, domain, or advertiser name (min 2 characters)."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter ISO country code used to rank entities (e.g. US prefers Inc. over SRL).","default":"US","title":"Country"},"description":"Two-letter ISO country code used to rank entities (e.g. US prefers Inc. over SRL)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/linkedin/search-ads":{"get":{"tags":["Ad Library"],"summary":"Search LinkedIn Ad Library","description":"Search LinkedIn Ad Library as clean JSON — headline/description, targeting{}, ISO startDate/endDate + adDuration, totalImpressions + impressionsByCountry[], cta/destinationUrl, advertiser{id,name,url,logo}, and carouselImages[]. Supports countries (comma-separated), startDate/endDate, companyId, keyword, and cursor pagination (paginationToken / nextCursor). Flat 2 credits on the native path.","operationId":"linkedin_search_ads_v1_ad_library_linkedin_search_ads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Advertiser / account owner name (LinkedIn accountOwner). Min 2 chars when used.","title":"Q"},"description":"Advertiser / account owner name (LinkedIn accountOwner). Min 2 chars when used."},{"name":"company","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SC alias of q — advertiser / account owner name.","title":"Company"},"description":"SC alias of q — advertiser / account owner name."},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional keyword filter on ad creative copy.","title":"Keyword"},"description":"Optional keyword filter on ad creative copy."},{"name":"companyId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"LinkedIn numeric company id for exact advertiser match.","title":"Companyid"},"description":"LinkedIn numeric company id for exact advertiser match."},{"name":"country","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":2,"description":"Single ISO country code. Ignored when countries is set. Default US.","default":"US","title":"Country"},"description":"Single ISO country code. Ignored when countries is set. Default US."},{"name":"countries","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated ISO country codes (e.g. US,CA,MX). Overrides country.","title":"Countries"},"description":"Comma-separated ISO country codes (e.g. US,CA,MX). Overrides country."},{"name":"startDate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom range start (YYYY-MM-DD). Use with endDate.","title":"Startdate"},"description":"Custom range start (YYYY-MM-DD). Use with endDate."},{"name":"endDate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom range end (YYYY-MM-DD). Use with startDate.","title":"Enddate"},"description":"Custom range end (YYYY-MM-DD). Use with startDate."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination token from a previous response (paginationToken / nextCursor).","title":"Cursor"},"description":"Pagination token from a previous response (paginationToken / nextCursor)."},{"name":"paginationToken","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SC alias of cursor — pagination token from a previous response.","title":"Paginationtoken"},"description":"SC alias of cursor — pagination token from a previous response."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ad-library/linkedin/ad-details":{"get":{"tags":["Ad Library"],"summary":"LinkedIn ad details","description":"Fetch one LinkedIn Ad Library ad by URL or ID. Adds headline, destination/landingUrl, targeting{}, impressionsByCountry[], and advertiser.url when the detail page publishes them. advertiser.id is extracted from /company/{id} for joins with LinkedIn Company endpoints. Schema keeps null keys for fields search may have (country, logo) so details is never thinner by omission. Flat 2 credits native; Apify fallback capped at 5.","operationId":"linkedin_ad_details_v1_ad_library_linkedin_ad_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn Ad Library URL or ad ID","title":"Url"},"description":"LinkedIn Ad Library URL or ad ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/user":{"get":{"tags":["GitHub"],"summary":"GitHub user profile","description":"Public profile from GitHub's REST /users/{username} API as clean camelCase JSON (login, name, email when public, bio, followers, repos, twitterUsername, …). Flat 1 credit. The same payload is available free from api.github.com with a personal access token (5,000 req/hour) — use Captapi when you want one key and the same shape as other platforms; call GitHub directly for GitHub-only workloads.","operationId":"github_user_v1_github_user_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL","title":"Username"},"description":"GitHub username or profile URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/repositories":{"get":{"tags":["GitHub"],"summary":"List a GitHub user's repositories (cursor-paginated)","description":"List repos from GitHub REST /users/{login}/repos. Supports sort=created|updated|pushed|full_name (default updated), direction=asc|desc, and type=owner|member|all — all echoed in the response. Opaque nextCursor from the Link header. parent is omitted on this list (GitHub's list payload has no parent object) — call github/repository for fork upstream. watchers omitted here (no subscribers_count). ~0.4 credits/repo (min 3).","operationId":"repositories_v1_github_repositories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL","title":"Username"},"description":"GitHub username or profile URL"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(created|updated|pushed|full_name)$","description":"created | updated | pushed | full_name. Not stars — GitHub's user-repos API has no stars sort.","default":"updated","title":"Sort"},"description":"created | updated | pushed | full_name. Not stars — GitHub's user-repos API has no stars sort."},{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"Sort direction. Default desc.","default":"desc","title":"Direction"},"description":"Sort direction. Default desc."},{"name":"type","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|owner|member)$","description":"owner (default) | member | all — affiliation filter from GitHub.","default":"owner","title":"Type"},"description":"owner (default) | member | all — affiliation filter from GitHub."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page.","title":"Cursor"},"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/repository":{"get":{"tags":["GitHub"],"summary":"GitHub repository details","description":"Public repository metadata from GitHub REST /repos/{owner}/{repo} as camelCase JSON: stars, forks, watchers (subscribers_count — not the legacy watchers_count star alias), openIssuesAndPrs (issues + open PRs), license/licenseName (NOASSERTION → null SPDX), parent when isFork, size, visibility, hasIssues/hasDiscussions, ownerType. Flat 1 credit.","operationId":"repository_v1_github_repository_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"repo","in":"query","required":true,"schema":{"type":"string","description":"Repository URL or owner/name","title":"Repo"},"description":"Repository URL or owner/name"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/pull-requests":{"get":{"tags":["GitHub"],"summary":"List repository pull requests (cursor-paginated)","description":"List PRs from GitHub REST /repos/{owner}/{repo}/pulls. Default state=open (pass state=closed|all to override — echoed in the response). Each row includes draft, labels, author{id,login,avatar,url}, head/base, assignees, requestedReviewers, closedAt/mergedAt. Opaque nextCursor from GitHub's Link header (not a bare page number).","operationId":"pull_requests_v1_github_pull_requests_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"repo","in":"query","required":true,"schema":{"type":"string","description":"Repository URL or owner/name","title":"Repo"},"description":"Repository URL or owner/name"},{"name":"state","in":"query","required":false,"schema":{"type":"string","pattern":"^(open|closed|all)$","description":"open (default), closed, or all. Echoed as data.state.","default":"open","title":"State"},"description":"open (default), closed, or all. Echoed as data.state."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page.","title":"Cursor"},"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/activity":{"get":{"tags":["GitHub"],"summary":"GitHub user public activity (cursor-paginated)","description":"Recent public events from /users/{login}/events/public with normalized payload per type (PushEvent commits/ref/size, PullRequestEvent action+PR, IssuesEvent action+issue, …). GitHub caps this feed at 90 events (also ~90 days) — eventCeiling is echoed and hasMore stops at that limit. Opaque nextCursor from the Link header. Actor is omitted (identical to username on this endpoint).","operationId":"activity_v1_github_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL, e.g. getify","title":"Username"},"description":"GitHub username or profile URL, e.g. getify"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"description":"Max events per page (1–90; upstream ceiling).","default":30,"title":"Limit"},"description":"Max events per page (1–90; upstream ceiling)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous nextCursor. Leave empty for the first page. Pagination stops after 90 events.","title":"Cursor"},"description":"Opaque pagination cursor from a previous nextCursor. Leave empty for the first page. Pagination stops after 90 events."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/followers":{"get":{"tags":["GitHub"],"summary":"List GitHub followers (cursor-paginated)","description":"Followers from /users/{login}/followers as {id, login, type, url, avatar}. ~0.1 credits/row (min 3). Opaque Link cursor. No sampling parameter — paging a mega-account (e.g. ~250k followers) costs ~25k credits at this rate; for full archives call api.github.com directly. type is User or Organization.","operationId":"followers_v1_github_followers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL","title":"Username"},"description":"GitHub username or profile URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page.","title":"Cursor"},"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/following":{"get":{"tags":["GitHub"],"summary":"List accounts a GitHub user follows (cursor-paginated)","description":"Same shape and pricing as github/followers — /users/{login}/following as {id, login, type, url, avatar}. ~0.1 credits/row (min 3). Opaque Link cursor. No sampling parameter; large following lists are expensive to page fully.","operationId":"following_v1_github_following_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL","title":"Username"},"description":"GitHub username or profile URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page.","title":"Cursor"},"description":"Opaque pagination cursor from a previous nextCursor (wraps GitHub Link page=). Leave empty for the first page."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/contributions":{"get":{"tags":["GitHub"],"summary":"GitHub contribution graph","description":"Last-year contribution calendar from github.com/users/{login}/contributions — totalContributions, from/to, currentStreak (today grace), longestStreak, and days[{date,count,level}] sorted ascending by date. This is the heatmap graph, not /users/{u}/events/public (that feed caps at 90 events / 90 days and is not a contribution metric). Flat 2 credits.","operationId":"contributions_v1_github_contributions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"username","in":"query","required":true,"schema":{"type":"string","description":"GitHub username or profile URL, e.g. getify","title":"Username"},"description":"GitHub username or profile URL, e.g. getify"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/trending-repositories":{"get":{"tags":["GitHub"],"summary":"GitHub trending repositories","description":"Repos from github.com/trending ranked by stars gained in a window (since=daily|weekly|monthly) — not REST /search/repositories sorted by all-time stars. Each row includes starsGained and source \"github.com/trending\". Optional language slug (e.g. python). Flat 2 credits. The HTML page typically lists ~25 repos (no cursor; not the Search API 1000 cap).","operationId":"trending_repositories_v1_github_trending_repositories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|weekly|monthly)$","description":"Trending window on github.com/trending: daily, weekly, or monthly.","default":"daily","title":"Since"},"description":"Trending window on github.com/trending: daily, weekly, or monthly."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional programming-language slug for /trending/{language} (e.g. python, typescript).","title":"Language"},"description":"Optional programming-language slug for /trending/{language} (e.g. python, typescript)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows to return (GitHub's page usually has ≤25).","default":25,"title":"Limit"},"description":"Max rows to return (GitHub's page usually has ≤25)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/github/trending-developers":{"get":{"tags":["GitHub"],"summary":"GitHub trending developers","description":"Developers from github.com/trending/developers ranked for a time window (since=daily|weekly|monthly) — not REST /search/users with followers:>1000. Each row: rank, login, name, avatar, popularRepo, plus followers/bio/company/location/publicRepos hydrated from GET /users/{login}. source is always \"github.com/trending/developers\". Flat 2 credits. No Search relevance score.","operationId":"trending_developers_v1_github_trending_developers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|weekly|monthly)$","description":"Trending window on github.com/trending/developers: daily, weekly, or monthly.","default":"daily","title":"Since"},"description":"Trending window on github.com/trending/developers: daily, weekly, or monthly."},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional programming-language slug for /trending/developers/{language}.","title":"Language"},"description":"Optional programming-language slug for /trending/developers/{language}."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max rows (GitHub's page usually has ≤25).","default":25,"title":"Limit"},"description":"Max rows (GitHub's page usually has ≤25)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/tweet-details":{"get":{"tags":["Twitter"],"summary":"Tweet metadata + engagement (likes/replies/retweets/quotes when exposed)","description":"Public tweet as clean JSON: text, author (followers when exposed), engagement (likes, replies, retweets, quotes; views/bookmarks when Twitter exposes them), isReply / isRetweet, hashtags[], media[], ISO-8601 publishedAt. Flat 1 credit.","operationId":"twitter_tweet_details_v1_twitter_tweet_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public tweet URL, e.g. https://x.com/user/status/ID","title":"Url"},"description":"Public tweet URL, e.g. https://x.com/user/status/ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/transcript":{"get":{"tags":["Twitter"],"summary":"Twitter/X tweet transcript / text extraction","operationId":"twitter_transcript_v1_twitter_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public tweet URL, e.g. https://x.com/user/status/ID","title":"Url"},"description":"Public tweet URL, e.g. https://x.com/user/status/ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/profile":{"get":{"tags":["Twitter"],"summary":"Twitter/X profile — blue/legacy/identity verification, tipjar, fastFollowers","operationId":"twitter_profile_v1_twitter_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Profile URL or @handle, e.g. https://x.com/username","title":"Url"},"description":"Profile URL or @handle, e.g. https://x.com/username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/user-tweets":{"get":{"tags":["Twitter"],"summary":"Most popular public tweets for a profile (not chronological)","description":"Returns the tweets Twitter's public timeline embed exposes for a profile — typically up to ~100 of the account's most popular posts, not a chronological / latest feed. Do not use this endpoint to detect new tweets. publishedAt is ISO-8601 UTC. Flat 2 credits per call.","operationId":"twitter_user_tweets_v1_twitter_user_tweets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Profile URL or @handle","title":"Url"},"description":"Profile URL or @handle"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max tweets to return (default 20, max 200). Twitter's public surface usually caps around ~100 popular posts — not latest.","default":20,"title":"Limit"},"description":"Max tweets to return (default 20, max 200). Twitter's public surface usually caps around ~100 popular posts — not latest."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/community":{"get":{"tags":["Twitter"],"summary":"X (Twitter) community details","operationId":"twitter_community_v1_twitter_community_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Community URL (x.com/i/communities/ID) or community ID","title":"Url"},"description":"Community URL (x.com/i/communities/ID) or community ID"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitter/community-tweets":{"get":{"tags":["Twitter"],"summary":"Tweets posted in an X community","description":"List recent posts in a public X Community. Same tweet contract as search (ISO publishedAt, engagement 6-key shape, hashtags[]). Flat 2 credits on the native GraphQL path; Apify fallback bills about 0.7 credits per returned tweet (min 2).","operationId":"twitter_community_tweets_v1_twitter_community_tweets_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"X community URL (x.com/i/communities/ID) or community ID — not a tweet/status URL","title":"Url"},"description":"X community URL (x.com/i/communities/ID) or community ID — not a tweet/status URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/subreddit-posts":{"get":{"tags":["Reddit"],"summary":"List posts in a subreddit (cursor-paginated)","operationId":"subreddit_posts_v1_reddit_subreddit_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Subreddit URL, r/name, or bare name","title":"Url"},"description":"Subreddit URL, r/name, or bare name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Feed sort: best|hot|new|top|rising (default new).","default":"new","title":"Sort"},"description":"Feed sort: best|hot|new|top|rising (default new)."},{"name":"timeframe","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"For sort=top (or controversial): hour|day|week|month|year|all. Default day when sort=top and timeframe is omitted.","title":"Timeframe"},"description":"For sort=top (or controversial): hour|day|week|month|year|all. Default day when sort=top and timeframe is omitted."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (Reddit's after fullname).","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (Reddit's after fullname)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/subreddit-details":{"get":{"tags":["Reddit"],"summary":"Subreddit info, rules, and member stats","description":"Public subreddit card: id (t5_…), title, description, members, activeUsers (currently online), rules[], submitText, ISO createdAt, nsfw/type/language/category, icon/banner. Flat 1 credit. Subreddit names are case-insensitive (AskReddit and askreddit both resolve).","operationId":"subreddit_details_v1_reddit_subreddit_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Subreddit URL, r/name, or bare name (case-insensitive), e.g. r/technology or AskReddit.","title":"Url"},"description":"Subreddit URL, r/name, or bare name (case-insensitive), e.g. r/technology or AskReddit."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/post-details":{"get":{"tags":["Reddit"],"summary":"Reddit post metadata + stats","operationId":"post_details_v1_reddit_post_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Reddit post URL","title":"Url"},"description":"Reddit post URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/post-comments":{"get":{"tags":["Reddit"],"summary":"Comments on a Reddit post","operationId":"post_comments_v1_reddit_post_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Reddit post URL","title":"Url"},"description":"Reddit post URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/post-transcript":{"get":{"tags":["Reddit"],"summary":"Reddit post transcript / discussion text","operationId":"post_transcript_v1_reddit_post_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Reddit post URL","title":"Url"},"description":"Reddit post URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":0,"description":"Max comments to include in the transcript","default":50,"title":"Limit"},"description":"Max comments to include in the transcript"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/subreddit-search":{"get":{"tags":["Reddit"],"summary":"Search posts within a specific subreddit (cursor-paginated)","operationId":"subreddit_search_v1_reddit_subreddit_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Subreddit URL, r/name, or bare name","title":"Url"},"description":"Subreddit URL, r/name, or bare name"},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Search sort: relevance|new|top|hot|comments (alias: comment_count). Default relevance.","default":"relevance","title":"Sort"},"description":"Search sort: relevance|new|top|hot|comments (alias: comment_count). Default relevance."},{"name":"timeframe","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time window for sort=top or sort=comments: hour|day|week|month|year|all. Default all when those sorts are used and timeframe is omitted.","title":"Timeframe"},"description":"Time window for sort=top or sort=comments: hour|day|week|month|year|all. Default all when those sorts are used and timeframe is omitted."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reddit/search":{"get":{"tags":["Reddit"],"summary":"Search Reddit posts site-wide by keyword (cursor-paginated)","operationId":"reddit_search_v1_reddit_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword or phrase to search Reddit posts site-wide","title":"Q"},"description":"Keyword or phrase to search Reddit posts site-wide"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Search sort: relevance|new|top|hot|comments (alias: comment_count). Default relevance.","default":"relevance","title":"Sort"},"description":"Search sort: relevance|new|top|hot|comments (alias: comment_count). Default relevance."},{"name":"timeframe","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Time window for sort=top or sort=comments: hour|day|week|month|year|all. Default all when those sorts are used and timeframe is omitted. Example: sort=new for chronology, or sort=top&timeframe=week for last week.","title":"Timeframe"},"description":"Time window for sort=top or sort=comments: hour|day|week|month|year|all. Default all when those sorts are used and timeframe is omitted. Example: sort=new for chronology, or sort=top&timeframe=week for last week."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response.","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/profile":{"get":{"tags":["Threads"],"summary":"Threads profile details & stats","description":"Public Threads profile as clean JSON: username, displayName, bio, followers, verified, profileImage, isPrivate, plus isThreadsOnlyUser, bioLinks[] (url + Meta verified + linkId), bioFragments[], transparencyLabel, profileImageVersions[], and hasOnboarded. Flat 1 credit. No deprecated twins (handle/name/avatar/private). isThreadsOnlyUser / transparencyLabel are null when Meta omits them on web hydrate.","operationId":"threads_profile_v1_threads_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Threads profile URL or @handle","title":"Url"},"description":"Threads profile URL or @handle"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/user-posts":{"get":{"tags":["Threads"],"summary":"List recent posts for a Threads profile","description":"Recent public Threads posts for a profile. Meta no longer hydrates logged-out profile feeds, so this surface uses Apify (~0.7/post, min 2). Response includes ``timings.path`` / ``timings.totalMs`` so the billable path is auditable. Meta only exposes the last ~20–30 posts on this surface. Same-author multi-part threads get ``threadId`` / ``replyToId`` / ``isReply`` chained like ``/search``.","operationId":"threads_user_posts_v1_threads_user_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Threads profile URL or @handle","title":"Url"},"description":"Threads profile URL or @handle"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max items to return (default 20, max 100). Threads only exposes the last ~20–30 public posts on this surface — asking for 100 will not return 100.","default":20,"title":"Limit"},"description":"Max items to return (default 20, max 100). Threads only exposes the last ~20–30 public posts on this surface — asking for 100 will not return 100."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/search":{"get":{"tags":["Threads"],"summary":"Search public Threads posts by keyword","description":"Public Threads post search via Meta Top SERP hydrate. Flat 2 credits. No sort or date filter — Meta ranks the page.","operationId":"threads_search_v1_threads_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword or phrase to search public Threads posts","title":"Q"},"description":"Keyword or phrase to search public Threads posts"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/search-users":{"get":{"tags":["Threads"],"summary":"Find Threads users / creators by keyword","description":"Distinct authors from Threads keyword search hydrate. Flat 1 credit (TikTok/SC parity). Returns id + profileImage when Meta embeds them. ``followers`` is omitted on this surface (use ``/profile``) — SERP hydrate never ships it.","operationId":"threads_search_users_v1_threads_search_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword to find Threads users or creators","title":"Q"},"description":"Keyword to find Threads users or creators"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/threads/post-details":{"get":{"tags":["Threads"],"summary":"Threads post metadata, comments, and suggested posts when exposed","description":"Public Threads post as clean JSON: same card as user-posts (text, author, engagement, threadId/replyToId/isReply/isQuote, media). When Meta embeds them: ``comments[]`` (other-author replies on the permalink) and ``suggestedPosts[]`` (algorithmic BarcelonaLoggedOutRelatedPosts — not thread context). Both keys are omitted when empty. Flat 1 credit.","operationId":"threads_post_details_v1_threads_post_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Threads post URL","title":"Url"},"description":"Threads post URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bluesky/profile":{"get":{"tags":["Bluesky"],"summary":"Bluesky profile details & stats","description":"Public Bluesky profile via AT Protocol app.bsky.actor.getProfile. Canonical profile core (displayName, avatar, postCount, …) plus deprecated name/posts aliases for one release; did, verification{} with issuer DIDs resolved to handle/display name, moderation labels[], associated{}, pinnedPost, and joinedViaStarterPack when present. Accepts cache / cacheMaxAge. Flat 1 credit.","operationId":"bluesky_profile_v1_bluesky_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Bluesky profile URL, @handle, or handle","title":"Url"},"description":"Bluesky profile URL, @handle, or handle"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bluesky/user-posts":{"get":{"tags":["Bluesky"],"summary":"Author feed from a Bluesky profile (posts + reposts, cursor-paginated)","description":"Public author feed via app.bsky.feed.getAuthorFeed — the account's posts and reposts. Each row has isRepost / repostedBy / repostedAt when the item is a repost (author is then the original poster). Pass includeReposts=false to drop reposts. filter maps to Bluesky's feed filter (replies/media/threads — does not remove reposts). nextCursor is Bluesky's opaque cursor — pass it through; do not derive from publishedAt. ~0.1 credits per returned row.","operationId":"bluesky_user_posts_v1_bluesky_user_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Bluesky profile URL, @handle, or handle, e.g. https://bsky.app/profile/handle.bsky.social","title":"Url"},"description":"Bluesky profile URL, @handle, or handle, e.g. https://bsky.app/profile/handle.bsky.social"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from the previous response's nextCursor. Leave empty for the first page. Do not invent a cursor from publishedAt — the feed is ordered by feed time (reposts sort by repost time).","title":"Cursor"},"description":"Opaque pagination cursor from the previous response's nextCursor. Leave empty for the first page. Do not invent a cursor from publishedAt — the feed is ordered by feed time (reposts sort by repost time)."},{"name":"filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Bluesky getAuthorFeed filter: posts_with_replies (default), posts_no_replies, posts_with_media, posts_and_author_threads, or posts_with_video. Controls replies/media/threads — not reposts. Use includeReposts=false to drop reposts.","title":"Filter"},"description":"Bluesky getAuthorFeed filter: posts_with_replies (default), posts_no_replies, posts_with_media, posts_and_author_threads, or posts_with_video. Controls replies/media/threads — not reposts. Use includeReposts=false to drop reposts."},{"name":"includeReposts","in":"query","required":false,"schema":{"type":"boolean","description":"When false, omit feed items that are reposts (reasonRepost). Default true — reposts are included and marked with isRepost / repostedBy / repostedAt.","default":true,"title":"Includereposts"},"description":"When false, omit feed items that are reposts (reasonRepost). Default true — reposts are included and marked with isRepost / repostedBy / repostedAt."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bluesky/post-details":{"get":{"tags":["Bluesky"],"summary":"Bluesky post + reply thread (getPostThread)","description":"Public post thread via app.bsky.feed.getPostThread — not a duplicate of a user-posts row. Returns the post with rich author (verification/labels/createdAt), facet-derived links/mentions/hashtags, post labels + langs, parentUri/rootUri, and nested replies[] (depth, default 1). Flat 1 credit.","operationId":"bluesky_post_details_v1_bluesky_post_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Bluesky post URL, e.g. https://bsky.app/profile/handle/post/RKEY","title":"Url"},"description":"Bluesky post URL, e.g. https://bsky.app/profile/handle/post/RKEY"},{"name":"depth","in":"query","required":false,"schema":{"type":"integer","maximum":6,"minimum":0,"description":"How many reply levels to include under the post (0 = post only, no replies[]. Default 1. Max 6 — Bluesky getPostThread depth).","default":1,"title":"Depth"},"description":"How many reply levels to include under the post (0 = post only, no replies[]. Default 1. Max 6 — Bluesky getPostThread depth)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pinterest/pin-details":{"get":{"tags":["Pinterest"],"summary":"Pinterest pin metadata + stats","description":"Returns title, description, seoAltText, link, ISO createdAt, board, author (pinner), originAuthor (native creator), saves/repin/share/reaction counts, and image plus sized images including originals. Flat 1 credit.","operationId":"pin_details_v1_pinterest_pin_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Pinterest pin URL","title":"Url"},"description":"Pinterest pin URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pinterest/user-pins":{"get":{"tags":["Pinterest"],"summary":"List pins for a Pinterest profile","operationId":"user_pins_v1_pinterest_user_pins_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Pinterest profile URL or username","title":"Url"},"description":"Pinterest profile URL or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pinterest/user-boards":{"get":{"tags":["Pinterest"],"summary":"List the boards on a Pinterest profile","operationId":"pinterest_user_boards_v1_pinterest_user_boards_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Pinterest profile URL or username","title":"Url"},"description":"Pinterest profile URL or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pinterest/board":{"get":{"tags":["Pinterest"],"summary":"List pins inside a Pinterest board","description":"Pins on a public board: saves (repin metric), title when exposed, image + imageOriginal + images{}, destinationUrl, top-level author{} (pinner) with slim per-pin author. Flat ~0.5 credits/pin (min 2). Native pidgets soft-cap ~50–100 pins; no cursor yet.","operationId":"pinterest_board_v1_pinterest_board_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Pinterest board URL (.../username/board-name/), not a /pin/ URL.","title":"Url"},"description":"Pinterest board URL (.../username/board-name/), not a /pin/ URL."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pinterest/search":{"get":{"tags":["Pinterest"],"summary":"Search Pinterest pins by keyword","operationId":"pinterest_search_v1_pinterest_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/profile":{"get":{"tags":["LinkedIn"],"summary":"LinkedIn person profile — experience, education, similarProfiles","operationId":"linkedin_profile_v1_linkedin_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn profile URL, e.g. https://linkedin.com/in/slug","title":"Url"},"description":"LinkedIn profile URL, e.g. https://linkedin.com/in/slug"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the default cache TTL. Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the default cache TTL. Default false — always fetch fresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/company":{"get":{"tags":["LinkedIn"],"summary":"LinkedIn company page — funding, similarPages, specialties","operationId":"linkedin_company_v1_linkedin_company_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn company URL, e.g. https://linkedin.com/company/slug","title":"Url"},"description":"LinkedIn company URL, e.g. https://linkedin.com/company/slug"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/post-details":{"get":{"tags":["LinkedIn"],"summary":"LinkedIn post metadata + engagement","operationId":"linkedin_post_details_v1_linkedin_post_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn post/activity URL","title":"Url"},"description":"LinkedIn post/activity URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/post-transcript":{"get":{"tags":["LinkedIn"],"summary":"LinkedIn post transcript / text extraction","operationId":"linkedin_post_transcript_v1_linkedin_post_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn post/activity URL","title":"Url"},"description":"LinkedIn post/activity URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/company-posts":{"get":{"tags":["LinkedIn"],"summary":"LinkedIn company posts","operationId":"linkedin_company_posts_v1_linkedin_company_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"LinkedIn company URL, e.g. https://linkedin.com/company/slug","title":"Url"},"description":"LinkedIn company URL, e.g. https://linkedin.com/company/slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 20). A null nextCursor means the end of the list (max 100 posts).","title":"Cursor"},"description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 20). A null nextCursor means the end of the list (max 100 posts)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkedin/search-posts":{"get":{"tags":["LinkedIn"],"summary":"Search LinkedIn posts","operationId":"linkedin_search_posts_v1_linkedin_search_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Keyword to search in public LinkedIn posts","title":"Q"},"description":"Keyword to search in public LinkedIn posts"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(relevance|date)$","default":"relevance","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rumble/video-details":{"get":{"tags":["Rumble"],"summary":"Rumble video metadata + stats (null engagement when unknown; streams + captions[])","operationId":"video_details_v1_rumble_video_details_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Rumble video URL","title":"Url"},"description":"Rumble video URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rumble/video/transcript":{"get":{"tags":["Rumble"],"summary":"Rumble video caption transcript (published .vtt, not STT)","description":"Fetches the caption track Rumble already exposes on video-details, parses the .vtt, and returns timed segments. Does not run speech-to-text. Missing captions or a language mismatch return 404 and cost 0 credits. Flat 1 credit on success.","operationId":"video_transcript_v1_rumble_video_transcript_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Rumble video URL","title":"Url"},"description":"Rumble video URL"},{"name":"language","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Caption language code (e.g. en or en-auto). When set, that track (or a matching base language like en → en-auto) is required — never a silent fallback. Missing language → 404 language_not_available with availableLanguages. Omit to use the first track and report which one was used.","title":"Language"},"description":"Caption language code (e.g. en or en-auto). When set, that track (or a matching base language like en → en-auto) is required — never a silent fallback. Missing language → 404 language_not_available with availableLanguages. Omit to use the first track and report which one was used."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rumble/channel-videos":{"get":{"tags":["Rumble"],"summary":"List videos for a Rumble channel","operationId":"channel_videos_v1_rumble_channel_videos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Rumble channel URL, e.g. https://rumble.com/c/name","title":"Url"},"description":"Rumble channel URL, e.g. https://rumble.com/c/name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rumble/comments":{"get":{"tags":["Rumble"],"summary":"Rumble video comments","operationId":"comments_v1_rumble_comments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Rumble video URL","title":"Url"},"description":"Rumble video URL"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"How many top-level comments to return (1–500). Flat 2 credits per call.","default":50,"title":"Limit"},"description":"How many top-level comments to return (1–500). Flat 2 credits per call."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/rumble/search":{"get":{"tags":["Rumble"],"summary":"Search Rumble videos by keyword","operationId":"rumble_search_v1_rumble_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/kick/clip":{"get":{"tags":["Kick"],"summary":"Kick clip metadata","description":"Two modes: Kick clip URL → {channelUrl, clip}; channel URL/@username → {channelUrl, totalReturned, clips[]} (no top-level clip, no cursor). Clip mode includes creator vs channel, maturity, VOD url/urlWithOffset, and HLS playback (videoType=hls).","operationId":"kick_clip_v1_kick_clip_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Kick clip URL for one enriched clip, or channel URL/@username for recent clips[]. Clip example: https://kick.com/{channel}/clips/clip_…","title":"Url"},"description":"Kick clip URL for one enriched clip, or channel URL/@username for recent clips[]. Clip example: https://kick.com/{channel}/clips/clip_…"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Channel mode only — how many recent clips to return (default 30, max 100). Ignored for clip URLs.","default":30,"title":"Limit"},"description":"Channel mode only — how many recent clips to return (default 30, max 100). Ignored for clip URLs."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/kwai/profile":{"get":{"tags":["Kwai"],"summary":"Kwai profile","description":"Fetch a Kwai profile — display name, bio, counts, and verification as structured JSON. Parsed from Kwai's public web page (JSON-LD + Nuxt SSR state). verifiedDescription, gender, and privatePostCount are always present (null when unknown). postCount = publicPostCount + privatePostCount when both are known; publicPostCount can diverge from postCount when private posts exist. No videoCount (posts are videos). No verifiedNumber (undocumented enum — use verified + verifiedDescription).","operationId":"profile_v1_kwai_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Kwai profile URL or @handle (e.g. https://www.kwai.com/@topfilmeseseriesnatv)","title":"Url"},"description":"Kwai profile URL or @handle (e.g. https://www.kwai.com/@topfilmeseseriesnatv)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/kwai/user-posts":{"get":{"tags":["Kwai"],"summary":"Kwai user posts","description":"Public posts for a Kwai profile as clean JSON. text is the post caption only (empty string when none — never SEO title / meta boilerplate), hashtags[] always present ([] when none), engagement, mp4 videoUrl + videoType, mediaUrlsExpireAt from the signed CDN tag, and transcript when Kwai's JSON-LD exposes auto-captions (deduped). Author{} is hoisted once at the top. HARD PAGE LIMIT: Kwai's public web only SSR-embeds a first-page window of posts (typically a handful — not the full postCount from /kwai/profile). hasMore/nextCursor page within that window only; hasMore=false means the window is exhausted, not that the account has no more posts upstream. ~1 credit per post returned (min 2). Shares _normalize_post with /kwai/post.","operationId":"user_posts_v1_kwai_user_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Kwai profile URL or @handle (e.g. https://www.kwai.com/@topfilmeseseriesnatv)","title":"Url"},"description":"Kwai profile URL or @handle (e.g. https://www.kwai.com/@topfilmeseseriesnatv)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from the previous nextCursor. Leave empty for the first page. Pages only within Kwai's SSR first-page window — not the full account archive (see endpoint description).","title":"Cursor"},"description":"Opaque pagination cursor from the previous nextCursor. Leave empty for the first page. Pages only within Kwai's SSR first-page window — not the full account archive (see endpoint description)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/kwai/post":{"get":{"tags":["Kwai"],"summary":"Kwai post","description":"Single Kwai video as clean JSON: text is the post caption only (\"\" when none — never SEO title / author boilerplate), hashtags[] always present ([] when none), author{}, engagement, videoUrl/videoType=mp4, mediaUrlsExpireAt from the signed CDN tag, and transcript when Kwai JSON-LD exposes auto-captions (deduped). Same core card as user-posts rows via shared _normalize_post. Flat 2 credits.","operationId":"post_v1_kwai_post_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Kwai video URL (e.g. https://www.kwai.com/@handle/video/5238962376325675745)","title":"Url"},"description":"Kwai video URL (e.g. https://www.kwai.com/@handle/video/5238962376325675745)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/komi/page":{"get":{"tags":["Creator Pages"],"summary":"Komi page","description":"Public Komi page as clean JSON — identity (id, displayName, bio), socials{} (incl. website), and content links[] with id/thumbnail/order/visible plus price/currency on PRODUCT rows. Flat 1 credit (direct Komi JSON APIs).","operationId":"komi_page_v1_komi_page_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Komi page URL or username (komi.io/user or user.komi.io)","title":"Url"},"description":"Komi page URL or username (komi.io/user or user.komi.io)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pillar/page":{"get":{"tags":["Creator Pages"],"summary":"Pillar page","description":"Public Pillar page as clean JSON — identity (id, displayName, bio, location, email), socials{} (instagram/tiktok/youtube/twitter/spotify/patreon/discord/twitch/…), links[] with per-link clicks/id/type/order, and products[] (title, price, url, image). Flat 1 credit via Pillar's public GraphQL API (not HTML scrape).","operationId":"pillar_page_v1_pillar_page_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Pillar page URL or username","title":"Url"},"description":"Pillar page URL or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkbio/page":{"get":{"tags":["Creator Pages"],"summary":"Linkbio page","description":"Public lnk.bio page as clean JSON — id, handle, avatar, email/website/whatsapp when published, socials{} (incl. triller/website; SC often leaves these null), other[] for unmapped social networks, and links[] with titles from icon labels + content buttons. displayName/name are omitted when lnk.bio only exposes @handle. Flat 1 credit.","operationId":"linkbio_page_v1_linkbio_page_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Linkbio (lnk.bio) page URL or username","title":"Url"},"description":"Linkbio (lnk.bio) page URL or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linkme/profile":{"get":{"tags":["Creator Pages"],"summary":"Linkme profile","description":"Public Linkme profile as clean JSON from the dehydrated SSR profile payload (not HTML meta/footer). Returns displayName/bio, avatar + isDefaultProfilePicture, profileVisitCount, totalLinks, verifiedAccount/isAmbassador/isPrivate, createdAt/updatedAt, featured links[], webLinks[] (social icons), infoLinks[] (email/contact), stripeStatus{tipsEnabled,stripeEnabled}, socials{}, and other[]. Flat 1 credit. Example: https://link.me/danucd.","operationId":"linkme_profile_v1_linkme_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Linkme profile URL or username (e.g. link.me/danucd)","title":"Url"},"description":"Linkme profile URL or username (e.g. link.me/danucd)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitch/profile":{"get":{"tags":["Twitch"],"summary":"Twitch channel profile","operationId":"profile_v1_twitch_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Twitch channel URL or username","title":"Url"},"description":"Twitch channel URL or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitch/user-videos":{"get":{"tags":["Twitch"],"summary":"Twitch channel videos","operationId":"user_videos_v1_twitch_user_videos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Twitch channel URL or username","title":"Url"},"description":"Twitch channel URL or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max items to return (default 20, max 100). Flat 2 credits per call. Twitch's anonymous surface only exposes the first 100 matching videos — deeper history is not available.","default":20,"title":"Limit"},"description":"Max items to return (default 20, max 100). Flat 2 credits per call. Twitch's anonymous surface only exposes the first 100 matching videos — deeper history is not available."},{"name":"filterBy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Video type filter: ARCHIVE | HIGHLIGHT | UPLOAD. Omit (or null) for all types — there is no default filter.","title":"Filterby"},"description":"Video type filter: ARCHIVE | HIGHLIGHT | UPLOAD. Omit (or null) for all types — there is no default filter."},{"name":"sortBy","in":"query","required":false,"schema":{"type":"string","description":"Sort: TIME (default, newest first) or VIEWS.","default":"TIME","title":"Sortby"},"description":"Sort: TIME (default, newest first) or VIEWS."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor = the last video id from the previous page (nextCursor). Leave empty for the first page. Pages within the first 100 matching videos only — Twitch rejects GQL after-cursors on this surface.","title":"Cursor"},"description":"Opaque pagination cursor = the last video id from the previous page (nextCursor). Leave empty for the first page. Pages within the first 100 matching videos only — Twitch rejects GQL after-cursors on this surface."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitch/user-schedule":{"get":{"tags":["Twitch"],"summary":"Twitch channel schedule","operationId":"user_schedule_v1_twitch_user_schedule_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Twitch channel URL or username","title":"Url"},"description":"Twitch channel URL or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max schedule segments to return (default 50, max 100). Flat 1 credit per call.","default":50,"title":"Limit"},"description":"Max schedule segments to return (default 50, max 100). Flat 1 credit per call."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/twitch/clip":{"get":{"tags":["Twitch"],"summary":"Twitch clip metadata","description":"Fetch a Twitch clip as clean JSON — curator vs channel (broadcaster), followers/isPartner, lowercase language, multi-quality videoQualities, signedVideoUrl, and playbackAccessToken.expiresAt. Not the raw GraphQL envelope.","operationId":"clip_v1_twitch_clip_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Twitch clip URL, channel URL, or username","title":"Url"},"description":"Twitch clip URL, channel URL, or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL. Envelope includes cached + cachedAt."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/artist":{"get":{"tags":["Spotify"],"summary":"Spotify artist details","description":"Artist profile from Spotify's web-player GraphQL as clean JSON: followers, monthlyListeners, worldRank, topCities, externalLinks, verified, topTracks (with playCount), concerts, relatedArtists, and albums/singles samples. Flat 1 credit. monthlyListeners / topCities / worldRank are not on Spotify's public Web API. albums[]/singles[] are overview samples — albumsCount/singlesCount plus albumsHasMore/singlesHasMore tell you when the catalog is larger; chain each release URI into /spotify/album. Pass raw=true only when you need the full GraphQL payload (omitted by default).","operationId":"artist_v1_spotify_artist_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Spotify artist URL, URI, or ID","title":"Url"},"description":"Spotify artist URL, URI, or ID"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Include the upstream GraphQL payload as data.raw. Default false.","default":false,"title":"Raw"},"description":"Include the upstream GraphQL payload as data.raw. Default false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/track":{"get":{"tags":["Spotify"],"summary":"Spotify track details","description":"Track from Spotify's web-player GraphQL as clean JSON: id, playCount (stream count), trackNumber, contentRating/explicit, durationMs, artists[{id,uri,name,url}], album{id,uri,name,url,releaseDate}, releaseDate, and previewUrl/isrc/popularity when Spotify exposes them on this surface. Flat 1 credit (same as artist). Pass raw=true only for the full GraphQL payload (omitted by default — getTrack embeds bulky artist discography). Note: Pathfinder getTrack often omits Web API popularity (0–100) and ISRC — playCount is the listen metric here.","operationId":"track_v1_spotify_track_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Spotify track URL, URI, or ID","title":"Url"},"description":"Spotify track URL, URI, or ID"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Include the upstream GraphQL payload as data.raw. Default false.","default":false,"title":"Raw"},"description":"Include the upstream GraphQL payload as data.raw. Default false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/album":{"get":{"tags":["Spotify"],"summary":"Spotify album details","description":"Album from Spotify's web-player GraphQL as clean JSON: name, artists[{id,uri,name,url}], tracks[{trackNumber,discNumber,name,uri,url,durationMs,playCount,explicit,artists}], totalTracks, releaseDate, releaseYear, explicit, and cover image. Flat 1 credit (same as artist/track). Pass raw=true only when you need the full GraphQL payload (omitted by default).","operationId":"album_v1_spotify_album_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Spotify album URL, URI, or ID","title":"Url"},"description":"Spotify album URL, URI, or ID"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Include the upstream GraphQL payload as data.raw. Default false.","default":false,"title":"Raw"},"description":"Include the upstream GraphQL payload as data.raw. Default false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/podcast":{"get":{"tags":["Spotify"],"summary":"Spotify podcast/show details","description":"Podcast/show from Spotify's web-player GraphQL as clean JSON: id, name, description, publisher{name}, rating{average, totalRatings}, topics[], contentRating/explicit, mediaType, showTypes, totalEpisodes, and cover image. Flat 1 credit per call. Does not ship Spotify's UI color palette (visualIdentity) or a bulky raw dump. Chain into /spotify/podcast-episodes for the episode archive (cursor pagination).","operationId":"podcast_v1_spotify_podcast_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Spotify show/podcast URL, URI, or ID (not an artist URL)","title":"Url"},"description":"Spotify show/podcast URL, URI, or ID (not an artist URL)"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/podcast-episodes":{"get":{"tags":["Spotify"],"summary":"Spotify podcast episodes","description":"Paginated episode archive for a Spotify show: id, name, description, releaseDate (full ISO), durationMs, previewUrl, audioUrls[], mediaTypes/hasVideo, contentRating/explicit, hasTranscripts, paywallContent, showTypes. Same show object as /spotify/podcast (totalEpisodes from this episodes query — no drift). Flat 2 credits per call on native Pathfinder. Cursor pagination via nextCursor/hasMore (offset into the archive; limit max 50). Pass raw=true only for a slimmed upstream payload — visualIdentity color dumps, playedState, and per-episode podcastV2 show copies are never shipped (same decision as /spotify/podcast).","operationId":"podcast_episodes_v1_spotify_podcast_episodes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Spotify show/podcast URL, URI, or ID (not an artist URL)","title":"Url"},"description":"Spotify show/podcast URL, URI, or ID (not an artist URL)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max episodes per page (default 20, max 50). Flat 2 credits per call on native Pathfinder.","default":20,"title":"Limit"},"description":"Max episodes per page (default 20, max 50). Flat 2 credits per call on native Pathfinder."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination offset from a prior nextCursor (e.g. \"20\"). Omit for the newest page.","title":"Cursor"},"description":"Pagination offset from a prior nextCursor (e.g. \"20\"). Omit for the newest page."},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Include slimmed per-episode upstream payload as episodes[].raw. Default false.","default":false,"title":"Raw"},"description":"Include slimmed per-episode upstream payload as episodes[].raw. Default false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/spotify/search":{"get":{"tags":["Spotify"],"summary":"Search Spotify","description":"Search Spotify tracks, albums, artists, podcasts, or episodes. Primary path is web-player Pathfinder GraphQL (same family as /spotify/artist|track|album); Apify scraper is fallthrough only — its raw shape differs (flat albumName/isExplicit vs GraphQL __typename). Each result ships a canonical spotify:{type}:{id} URI, url, name, explicit, and contentRating when known. Envelope includes fetchedAt (not duplicated per row). Pathfinder search (decorateContextTracks) does not expose playCount or playable — use /spotify/track. Flat 2 credits on native; Apify fallthrough scales per result. No cursor (max limit 50). Pass raw=true to include per-result upstream payloads (omitted by default).","operationId":"search_v1_spotify_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"title":"Q"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","pattern":"^(tracks|albums|artists|podcasts|episodes)$","default":"tracks","title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Max results (default 20, max 50). Flat 2 credits on native Pathfinder.","default":20,"title":"Limit"},"description":"Max results (default 20, max 50). Flat 2 credits on native Pathfinder."},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","description":"Include per-result upstream payload as results[].raw. Default false.","default":false,"title":"Raw"},"description":"Include per-result upstream payload as results[].raw. Default false."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/soundcloud/artist":{"get":{"tags":["SoundCloud"],"summary":"SoundCloud artist profile","description":"SoundCloud artist as clean JSON: id, handle (permalink slug), username, name, description, avatar, city/countryCode, verified, subscriptionTier (pro-unlimited|pro|mid-tier|free), followers/followings/trackCount/playlistCount/likesCount, externalLinks[{url,network,title}], createdAt when SoundCloud exposes it, and lastModified. Flat 1 credit. Accepts cache / cacheMaxAge.","operationId":"artist_v1_soundcloud_artist_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"SoundCloud artist URL or username","title":"Url"},"description":"SoundCloud artist URL or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/soundcloud/artist-tracks":{"get":{"tags":["SoundCloud"],"summary":"SoundCloud artist tracks (cursor-paginated)","description":"Tracks for one SoundCloud artist as clean JSON. Track rows match /soundcloud/track (title, plays/likes/…, license, artwork, tags) — without per-row artist{} (single-artist list). Top-level artistId + artist{} join to /soundcloud/artist. Opaque nextCursor (not an upstream URL). Flat 2 credits per call.","operationId":"artist_tracks_v1_soundcloud_artist_tracks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"SoundCloud artist URL or username","title":"Url"},"description":"SoundCloud artist URL or username"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque pagination cursor from the previous response's nextCursor. Leave empty for the first page. Do not edit or invent values.","title":"Cursor"},"description":"Opaque pagination cursor from the previous response's nextCursor. Leave empty for the first page. Do not edit or invent values."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/soundcloud/track":{"get":{"tags":["SoundCloud"],"summary":"SoundCloud track details","description":"SoundCloud track as clean JSON: title, artist{id,handle,name,url,avatar,followers,verified}, plays/likes/reposts/comments/downloads, license, genre/tags, publishedAt, streamable/downloadable permission flags, and when the public api-v2 allows it — streamUrl (progressive MP3), hlsUrl, downloadUrl, plus mediaUrlsExpireAt for signed CDN links. waveformUrl is the waveform JSON, not audio. Flat 1 credit. Accepts cache / cacheMaxAge.","operationId":"track_v1_soundcloud_track_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"SoundCloud track URL","title":"Url"},"description":"SoundCloud track URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/linktree/page":{"get":{"tags":["Linktree"],"summary":"Linktree page","description":"Public Linktree page as clean JSON — typed links (incl. PRODUCT destinations), socials[] + socialAccounts{} for catalog joins, email, verticals. YouTube watch URLs in socialAccounts are resolved to the channel via oEmbed.","operationId":"linktree_page_v1_linktree_page_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Linktree profile URL or username","title":"Url"},"description":"Linktree profile URL or username"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control.","default":false,"title":"Cache"},"description":"Set true to serve from the response cache (default TTL). Default false — always fetch fresh. Prefer cacheMaxAge when you need 1d–30d freshness control."},{"name":"cacheMaxAge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits.","title":"Cachemaxage"},"description":"Max age of a cached response: 1d, 3d, 7d, 14d, or 30d. When set, enables caching with that TTL (SC cache_max_age). Envelope includes cached + cachedAt on hits."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/snapchat/user-profile":{"get":{"tags":["Snapchat"],"summary":"Snapchat public user profile","operationId":"user_profile_v1_snapchat_user_profile_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Snapchat username or profile URL","title":"Url"},"description":"Snapchat username or profile URL"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/amazon-shop/page":{"get":{"tags":["Amazon Shop"],"summary":"Amazon seller storefront page","operationId":"amazon_shop_page_v1_amazon_shop_page_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Amazon seller storefront URL (/sp?seller=… or /s?me=…) or raw seller ID (e.g. A294P4X9EWVXLJ). Not influencer Amazon Shops (/shop/<handle>) — those are a different surface.","title":"Url"},"description":"Amazon seller storefront URL (/sp?seller=… or /s?me=…) or raw seller ID (e.g. A294P4X9EWVXLJ). Not influencer Amazon Shops (/shop/<handle>) — those are a different surface."},{"name":"marketplace","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":5,"default":"US","title":"Marketplace"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":0,"description":"Max products to include on this page fetch. Use 0 for seller metadata only.","default":20,"title":"Limit"},"description":"Max products to include on this page fetch. Use 0 for seller metadata only."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor from a previous nextCursor (storefront page number).","title":"Cursor"},"description":"Pagination cursor from a previous nextCursor (storefront page number)."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/post":{"get":{"tags":["Analytics"],"summary":"Cross-platform post analytics (unified metrics)","description":"Cross-platform post analytics for 11 networks (YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble) — not the full Captapi catalog (Kwai, Twitch, Spotify, Snapchat, and others are out of scope). Platform is auto-detected from the URL; mix freely. Returns one normalized metrics object including engagementRate with engagementRateBasis=interactions/views. Compact UI counts (e.g. YouTube '2.4M' comments) set commentsIsApproximate / interactionsIsApproximate. Costs 1 credit.","operationId":"post_analytics_v1_analytics_post_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"Public post/video/reel URL from one of 11 supported platforms (YouTube, TikTok, Instagram, Facebook, X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble). Platform is auto-detected — cross-platform URLs are the point of this endpoint.","title":"Url"},"description":"Public post/video/reel URL from one of 11 supported platforms (YouTube, TikTok, Instagram, Facebook, X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble). Platform is auto-detected — cross-platform URLs are the point of this endpoint."},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h cache. Default false — always fetch fresh data.","default":false,"title":"Cache"},"description":"Set true to use the 24h cache. Default false — always fetch fresh data."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/compare":{"get":{"tags":["Analytics"],"summary":"Compare metrics across multiple posts and platforms","description":"Fetches the same unified metrics object as /v1/analytics/post for up to 10 comma-separated URLs in one call (any mix of platforms). Each result includes platform, status (ok|error), and metrics.views/likes/comments/shares/saves/interactions/engagementRate (engagementRateBasis=interactions/views). Failed URLs also appear in failed[] with a reason. Bills 1 credit per successfully resolved URL that is not served from cache (same per-URL cache as post analytics). No bulk discount vs calling /post N times — the win is one HTTP round-trip.","operationId":"compare_analytics_v1_analytics_compare_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"urls","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated post URLs (up to 10), any mix of platforms","title":"Urls"},"description":"Comma-separated post URLs (up to 10), any mix of platforms"},{"name":"cache","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to use the 24h per-URL cache (shared with /v1/analytics/post). Default false — always fetch fresh.","default":false,"title":"Cache"},"description":"Set true to use the 24h per-URL cache (shared with /v1/analytics/post). Default false — always fetch fresh."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/video/transcript":{"post":{"tags":["Video Files"],"summary":"Transcribe an uploaded video/audio file via Whisper","description":"POST multipart form field `file`. 1 credit per minute of audio (rounded up, minimum 1) — see durationSeconds / creditsCharged in the response. Max upload 200MB / 60 minutes (server config). Optional language (ISO-639-1 hint), translate=true (English), timestampGranularity=segment|word. Empty/no-speech audio returns transcript=\"\" with noSpeech=true (still billed for duration).","operationId":"video_transcript_v1_video_transcript_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_video_transcript_v1_video_transcript_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/video/summarize":{"post":{"tags":["Video Files"],"summary":"Transcribe + AI summary of an uploaded video/audio file","description":"POST multipart form field `file` (not a query string). Returns AI summary/keyPoints/topics/sentiment PLUS the full Whisper transcript (transcript, transcriptSegments, language, durationSeconds, creditsCharged). Summary length scales with the transcript — short clips may be one paragraph / fewer bullets; longer audio aims for 2–3 paragraphs and 4–8 key points (GPT-4o-mini). Billing: 1 credit per minute of audio (rounded up) + 1 for the summary. Same 200MB / 60 min limits and Whisper controls as /v1/video/transcript. Empty/no-speech audio → HTTP 422.","operationId":"video_summarize_v1_video_summarize_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_video_summarize_v1_video_summarize_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/usage":{"get":{"tags":["Account"],"summary":"Current credit balance + recent requests","operationId":"get_usage_v1_account_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/balance":{"get":{"tags":["Account"],"summary":"Get credit balance","description":"Live credit balance for the calling API key — never cached. camelCase fields are canonical; snake_case aliases are emitted for one release. Includes usedThisMonth, quotaResetsAt, keyName, and rateLimitPerMinute for usage alerting. 0 credits.","operationId":"get_credit_balance_v1_account_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/request-history":{"get":{"tags":["Account"],"summary":"Get request history","description":"Live (never cached) request log for the calling key owner — 0 credits. Each row includes requestId (same UUID as the response envelope / x-captapi-request-id header) for support matching. Filter with endpoint, statusCode, since, and until. resource is a URL or an internal cache key — not always a URL.","operationId":"get_request_history_v1_account_request_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max rows (default 50, max 500). Free.","default":50,"title":"Limit"},"description":"Max rows (default 50, max 500). Free."},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact Captapi path filter, e.g. /v1/instagram/basic-profile","title":"Endpoint"},"description":"Exact Captapi path filter, e.g. /v1/instagram/basic-profile"},{"name":"statusCode","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":599,"minimum":100},{"type":"null"}],"description":"Filter by HTTP status code (e.g. 500 for 5xx investigation).","title":"Statuscode"},"description":"Filter by HTTP status code (e.g. 500 for 5xx investigation)."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive lower bound on createdAt (ISO date or datetime).","title":"Since"},"description":"Inclusive lower bound on createdAt (ISO date or datetime)."},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exclusive upper bound on createdAt (ISO date or datetime).","title":"Until"},"description":"Exclusive upper bound on createdAt (ISO date or datetime)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/daily-usage":{"get":{"tags":["Account"],"summary":"Get daily credit usage","operationId":"get_daily_usage_v1_account_daily_usage_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/most-used-routes":{"get":{"tags":["Account"],"summary":"Get most used API routes","operationId":"get_most_used_routes_v1_account_most_used_routes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/welcome":{"post":{"tags":["Account"],"summary":"Send the one-time welcome email (idempotent)","description":"Sends a welcome email once per user. Safe to call on every dashboard load.","operationId":"send_welcome_v1_account_welcome_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/limits":{"get":{"tags":["Account"],"summary":"Plan quotas + remaining credits","operationId":"get_limits_v1_account_limits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/auth/keys":{"post":{"tags":["API Keys"],"summary":"Create a new API key (returns plaintext ONCE)","operationId":"create_api_key_v1_auth_keys_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["API Keys"],"summary":"List active API keys for the authenticated user","operationId":"list_api_keys_v1_auth_keys_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/keys/{key_id}":{"delete":{"tags":["API Keys"],"summary":"Revoke an API key","operationId":"revoke_api_key_v1_auth_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create a checkout session","operationId":"create_checkout_v1_billing_checkout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/portal":{"post":{"tags":["Billing"],"summary":"Create a customer billing portal session","operationId":"create_portal_v1_billing_portal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/subscription":{"get":{"tags":["Billing"],"summary":"Current subscription status","operationId":"get_subscription_v1_billing_subscription_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/subscription/cancel":{"post":{"tags":["Billing"],"summary":"Cancel at end of billing period","operationId":"cancel_subscription_v1_billing_subscription_cancel_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/subscription/reactivate":{"post":{"tags":["Billing"],"summary":"Undo a scheduled cancellation","operationId":"reactivate_subscription_v1_billing_subscription_reactivate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/subscription/change-plan":{"post":{"tags":["Billing"],"summary":"Upgrade or downgrade the plan","operationId":"change_plan_v1_billing_subscription_change_plan_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePlanBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/monitors":{"get":{"tags":["Monitors"],"summary":"List your monitors","operationId":"list_monitors_v1_monitors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Monitors"],"summary":"Create a monitor","operationId":"create_monitor_v1_monitors_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/monitors/{monitor_id}":{"get":{"tags":["Monitors"],"summary":"Get one monitor (includes webhook secret)","operationId":"get_monitor_v1_monitors__monitor_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Monitors"],"summary":"Update a monitor","operationId":"update_monitor_v1_monitors__monitor_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Monitors"],"summary":"Delete a monitor","operationId":"delete_monitor_v1_monitors__monitor_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/monitors/{monitor_id}/test":{"post":{"tags":["Monitors"],"summary":"Send a signed test payload to your webhook","operationId":"test_monitor_v1_monitors__monitor_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/history":{"get":{"tags":["History"],"summary":"Metric time series for a profile or post","operationId":"metric_history_v1_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"endpoint","in":"query","required":true,"schema":{"type":"string","description":"Tracked endpoint path, e.g. /v1/youtube/channel-details","title":"Endpoint"},"description":"Tracked endpoint path, e.g. /v1/youtube/channel-details"},{"name":"url","in":"query","required":true,"schema":{"type":"string","description":"The same URL you pass to that endpoint","title":"Url"},"description":"The same URL you pass to that endpoint"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/batch":{"post":{"tags":["Batch"],"summary":"Run up to 20 endpoint calls in one request","operationId":"run_batch_v1_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/status":{"get":{"tags":["Status"],"summary":"Public API health (live, based on latest requests, no auth required)","operationId":"api_status_v1_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Status V1 Status Get"}}}}}}}},"components":{"schemas":{"ApiResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true},"data":{"title":"Data"},"cached":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cached"},"creditsUsed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Creditsused"},"requestId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requestid"},"fetchedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fetchedat"},"cachedAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cachedat"}},"type":"object","required":["data"],"title":"ApiResponse"},"BatchItem":{"properties":{"path":{"type":"string","title":"Path","description":"Captapi GET path, e.g. /v1/youtube/video-details"},"params":{"additionalProperties":true,"type":"object","title":"Params"}},"type":"object","required":["path"],"title":"BatchItem"},"BatchRequest":{"properties":{"requests":{"items":{"$ref":"#/components/schemas/BatchItem"},"type":"array","maxItems":20,"minItems":1,"title":"Requests"}},"type":"object","required":["requests"],"title":"BatchRequest"},"Body_video_summarize_v1_video_summarize_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Video or audio file to transcribe and summarize"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"ISO-639-1 language hint for Whisper, e.g. \"en\" or \"tr\". Omit to auto-detect."},"translate":{"type":"boolean","title":"Translate","description":"When true, translate speech to English before summarizing.","default":false},"timestampGranularity":{"type":"string","enum":["segment","word"],"title":"Timestampgranularity","description":"segment (default) or word.","default":"segment"}},"type":"object","required":["file"],"title":"Body_video_summarize_v1_video_summarize_post"},"Body_video_transcript_v1_video_transcript_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Video or audio file to transcribe"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"ISO-639-1 language hint for Whisper, e.g. \"en\" or \"tr\". Omit to auto-detect."},"translate":{"type":"boolean","title":"Translate","description":"When true, translate speech to English (Whisper translations API).","default":false},"timestampGranularity":{"type":"string","enum":["segment","word"],"title":"Timestampgranularity","description":"segment (default) or word — word-level timings when Whisper exposes them.","default":"segment"}},"type":"object","required":["file"],"title":"Body_video_transcript_v1_video_transcript_post"},"ChangePlanBody":{"properties":{"plan":{"type":"string","title":"Plan"},"cycle":{"type":"string","title":"Cycle","default":"monthly"}},"type":"object","required":["plan"],"title":"ChangePlanBody"},"CheckoutBody":{"properties":{"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"cycle":{"type":"string","title":"Cycle","default":"monthly"},"pack":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"}},"type":"object","title":"CheckoutBody"},"CreateKeyBody":{"properties":{"name":{"type":"string","title":"Name","default":"Default"}},"type":"object","title":"CreateKeyBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MonitorCreate":{"properties":{"name":{"type":"string","maxLength":120,"title":"Name","default":""},"endpoint":{"type":"string","title":"Endpoint","description":"Captapi GET path, e.g. /v1/reddit/subreddit-posts"},"params":{"additionalProperties":true,"type":"object","title":"Params"},"interval_minutes":{"type":"integer","maximum":1440.0,"minimum":15.0,"title":"Interval Minutes","default":60},"webhook_url":{"type":"string","title":"Webhook Url","description":"HTTPS URL that receives new-item payloads"},"secret":{"anyOf":[{"type":"string","maxLength":128,"minLength":16},{"type":"null"}],"title":"Secret","description":"HMAC secret; generated if omitted"}},"type":"object","required":["endpoint","webhook_url"],"title":"MonitorCreate"},"MonitorUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Name"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"interval_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":15.0},{"type":"null"}],"title":"Interval Minutes"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"MonitorUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","description":"Your API key (capt_live_… / capt_test_…) or a dashboard session token.","scheme":"bearer"}}}}