{"openapi": "3.0.3", "info": {"title": "BulkTranscripts API", "version": "1.0.0", "description": "YouTube transcripts, search, and channel/playlist listings. Keyless requests use the free per-IP allowance; a BulkTranscripts license key sent as a Bearer token unlocks purchased credits. Docs: https://bulktranscripts.co/docs"}, "servers": [{"url": "https://bulktranscripts.co"}], "components": {"securitySchemes": {"bearerAuth": {"type": "http", "scheme": "bearer", "description": "Your BulkTranscripts license key."}}}, "paths": {"/api/v1/transcript": {"get": {"summary": "Get a video's transcript", "description": "Get a video's transcript Cost: 1 credit; cached transcripts are free.", "parameters": [{"name": "video", "in": "query", "required": true, "schema": {"type": "string"}, "description": "YouTube URL or 11-char video id (TikTok video URLs also work)."}, {"name": "language", "in": "query", "required": false, "schema": {"type": "string"}, "description": "Preferred caption language codes, comma-separated. Default en."}, {"name": "format", "in": "query", "required": false, "schema": {"type": "string"}, "description": "json (default), txt, md, srt, vtt, csv, or ai."}, {"name": "segments", "in": "query", "required": false, "schema": {"type": "string"}, "description": "0 to omit the timestamped segment array."}, {"name": "fresh", "in": "query", "required": false, "schema": {"type": "string"}, "description": "1 to bypass the cache (charges a credit)."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/search": {"get": {"summary": "Search YouTube videos, channels, or playlists", "description": "Search YouTube videos, channels, or playlists Cost: 1 credit.", "parameters": [{"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Search query."}, {"name": "type", "in": "query", "required": false, "schema": {"type": "string"}, "description": "video (default), channel, or playlist."}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Max results 1-50, default 10."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/channel/search": {"get": {"summary": "Search within one channel's uploads", "description": "Search within one channel's uploads Cost: 1 credit.", "parameters": [{"name": "channel", "in": "query", "required": true, "schema": {"type": "string"}, "description": "@handle, channel URL, or UC… id."}, {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Topic to search for within the channel."}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Max results 1-50, default 10."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/channel/videos": {"get": {"summary": "List a channel's videos", "description": "List a channel's videos Cost: 1 credit.", "parameters": [{"name": "channel", "in": "query", "required": true, "schema": {"type": "string"}, "description": "@handle, channel URL, or UC… id."}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Max videos 1-1000, default 100."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/channel/latest": {"get": {"summary": "Latest uploads from a channel (RSS)", "description": "Latest uploads from a channel (RSS) Cost: free.", "parameters": [{"name": "channel", "in": "query", "required": true, "schema": {"type": "string"}, "description": "@handle, channel URL, or UC… id."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/playlist/videos": {"get": {"summary": "List a playlist's videos in order", "description": "List a playlist's videos in order Cost: 1 credit.", "parameters": [{"name": "playlist", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Playlist URL or id."}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer"}, "description": "Max videos 1-1000, default 100."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}, "/api/v1/account": {"get": {"summary": "Current credit balance for the caller", "description": "Current credit balance for the caller Cost: free.", "parameters": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "402": {"description": "Out of credits"}}, "security": [{}, {"bearerAuth": []}]}}}}