Transcript Bunny documentation
Transcript export and search
Creator and team workflow in the dashboard. Search your library and export TXT, JSON, or SRT.
YouTube Transcript API
REST endpoints, API keys, code examples, and rate limits for scripts and apps.
MCP server
Connect Claude, Cursor, and other MCP clients to fetch YouTube transcripts in chat.
YouTube Transcript API
Endpoints, authentication, examples, and rate limits for fetching YouTube transcripts as JSON.
API Keys
Transcript Bunny uses API keys to authenticate requests. All API requests must include your API key in the Authorization header.
Available on All Plans
API keys are available on every plan, including Free. Free plan usage is limited to 5 requests/minute and your monthly credit balance. Upgrade for higher limits.
Creating an API Key
- 1. Navigate to API Keys page
- 2. Enter a name for your API key
- 3. Click "Create API Key"
- 4. Copy your key immediately (it won't be shown again)
API Key Format: Your API keys will look like this:
tb_live_...
API Key Management
You can revoke your API keys at any time from the API Keys page. API keys use your account credits.
Using Your API Key
Include your API key in the Authorization header of every request:
Security Best Practices
- • Never share your API keys publicly
- • Store keys securely as environment variables
- • Rotate keys regularly
- • Delete unused keys immediately
Get Transcript Endpoint
Retrieve transcripts for public YouTube videos that have captions, programmatically.
Endpoint
Request Body
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| videoUrl | string | Yes | YouTube video URL |
| timestamps | boolean | No | Set true to also receive transcript.timestampedText — the transcript as lines prefixed with [mm:ss] timestamps, ready to paste into an LLM prompt |
Code Examples
Other Endpoints
Get a stored transcript
Returns a transcript this account already owns. Optional query timestamps=true adds transcript.timestampedText. Does not charge credits. 404 if this account has not transcribed the video.
Usage
Returns plan, credits.total/used/remaining, request counts, and billingPeriod. Same Bearer authentication as transcribe.
Response Format
Understanding the API response structure.
Success Response
When a transcript is successfully retrieved, you'll receive 200 OK for an account replay (0 credits) or a global cache hit (1 credit if this account has not acquired it yet), or 201 Created for a fresh upstream fetch:
Response Fields
| Field | Type | Description |
|---|---|---|
| transcript | object | Transcript data with segments |
| transcript.text | string | Complete transcript as plain text |
| transcript.segments | array | Array of transcript segments with timestamps |
| transcript.timestampedText | string | Only when timestamps=true: transcript as [mm:ss]-prefixed lines (also on GET /api/v1/transcripts/:videoId?timestamps=true) |
| video | object | Video id, url, title, and channel name when available |
| source | string | fetched (new upstream fetch), global_cache (already stored for another account), or account_replay (this account already owns it) |
| creditsCharged | number | 0 for an account replay. 1 for a fresh fetch or a global cache hit for an account that has not requested this video before. |
| creditsRemaining | number | Your remaining credits after this request (only included when credits are charged) |
Segment Object Structure
| Field | Type | Description |
|---|---|---|
| text | string | Transcript text for this segment |
| start | number | Start time in seconds |
| end | number | End time in seconds |
| timestamp | string | Formatted timestamp (MM:SS) |
Special Cases
Account replay
If this account already owns the transcript, you receive 200 OK with no credit charge:
A global cache hit is different: the transcript already exists on Transcript Bunny, but this account has never requested it. That still costs 1 credit and returns source: "global_cache".
Error Handling
Learn about error codes and how to handle them.
Error Response Format
When an error occurs, the API returns an appropriate HTTP status code and error details:
Common Error Codes
401 Unauthorized
Invalid or missing API key.
Or: { "error": "Invalid API key" }
400 Bad Request
Invalid YouTube URL or missing parameters.
Or validation error: { "success": false, "error": { "issues": [...] } }
402 Payment Required
Insufficient credits to process the request.
404 Not Found
Video not found or transcript not available.
Or: { "error": "Transcript not available", "message": "...", "creditsCharged": 0 }
429 Too Many Requests
Rate limit exceeded.
500 Internal Server Error
Server error processing your request.
Best Practices
- Always check the HTTP status code first
- Implement exponential backoff for rate limit errors
- Log error responses for debugging
- Check credits before making requests
- Handle network errors gracefully
Rate Limits
Understanding API rate limits and best practices.
Rate Limit Rules
To ensure fair usage and system stability, we implement per-minute rate limits that vary by plan:
Free
5
requests per minute
Starter
50
requests per minute
Pro
100
requests per minute
Business
200
requests per minute
Credit Limits
Rate limits are separate from your credit allocation. Even with available credits, you must respect rate limits.
Response Headers
Successful API responses include rate limit information in the headers:
Note: Values shown are for Starter plan. Limits vary by plan. Headers are included on successful responses (200 OK). Rate limit errors (429) return error details in the JSON response body instead.
Header Descriptions
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests allowed in current window |
| X-RateLimit-Remaining | Requests remaining in current window |
| X-RateLimit-Reset | Unix timestamp in milliseconds when the rate limit resets |
Handling Rate Limits
Example code for handling rate limits with exponential backoff:
Note: Rate limit errors return a 429 status with error details in the JSON response body, including retryAfter (seconds until the rate limit window resets).
Automation & Integration Tools
Use Transcript Bunny with popular automation platforms.
No-Code Integrations
Call the Transcript Bunny REST API from HTTP modules in Zapier, Make, n8n, or Pipedream. There is no native Zapier/Make app; you send POST /api/v1/transcribe with a Bearer token.
Zapier
Integrate with 5000+ apps using Zapier's Webhooks module.
Quick Setup:
- 1. Create a new Zap in Zapier
- 2. Choose "Webhooks by Zapier" as action
- 3. Select "POST" method
- 4. URL:
https://transcriptbunny.com/api/v1/transcribe - 5. Add header:
Authorization: Bearer YOUR_API_KEY - 6. Body:
{"videoUrl": "YOUR_VIDEO_URL"}
Make (Integromat)
Build advanced automations with Make's visual builder.
Quick Setup:
- 1. Create a new scenario in Make
- 2. Add "HTTP" module
- 3. Choose "Make a request"
- 4. Method: POST
- 5. URL:
https://transcriptbunny.com/api/v1/transcribe - 6. Headers: Authorization with Bearer token
- 7. Body: JSON with video URL
n8n
Self-hosted workflow automation with full API control.
Quick Setup:
- 1. Create new workflow in n8n
- 2. Add "HTTP Request" node
- 3. Method: POST
- 4. URL:
https://transcriptbunny.com/api/v1/transcribe - 5. Authentication: Header Auth
- 6. Header Name: Authorization
- 7. Header Value: Bearer YOUR_API_KEY
Pipedream
Low-code integration platform with built-in triggers.
Quick Setup:
- 1. Create new workflow in Pipedream
- 2. Add HTTP request step
- 3. Configure POST request
- 4. Add Authorization header
- 5. Use Node.js code for advanced parsing
Example Workflows
Content Creation Workflow
Trigger: New video uploaded to YouTube → Get transcript → Generate summary with ChatGPT → Create blog post draft → Save to Notion
Educational Workflow
Trigger: New video in playlist → Get transcript → Extract key concepts → Create flashcards → Add to Anki deck
Research Workflow
Trigger: Manual trigger with URL → Get transcript → Analyze with AI → Extract citations → Save to Zotero