Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/transcriptout-com:transcriptout-com-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.1.0
info:
title: transcriptout-com API
version: '2026-10-31'
description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-31: 19 operation(s) read from 2 public documentation page(s) (each operation
names its page in x-source). This is not the provider''s published contract; transcriptout-com has published no machine-readable contract
that the pipeline could find. Engine: anthropic.'
x-evidence-tiers:
code-example: 4
documentation: 15
pages-with-code: 2
pages-read: 2
x-generated-from: documentation
x-provenance: generated
x-authored-by: API Evangelist
x-generated: '2026-10-31'
x-generator: generate-contract-from-docs.py
x-engine: anthropic
x-sources:
- https://transcriptout.com/docs
- https://transcriptout.com/mcp
servers:
- url: https://api.transcriptout.com
paths:
/auth/register-cli:
get:
operationId: get_auth_register_cli
tags:
- Auth
summary: Request a registration code to be sent to an email address.
x-source: https://transcriptout.com/mcp
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetAuthRegisterCliResponse'
x-evidence:
kind: documentation
post:
operationId: post_auth_register_cli
tags:
- Auth
summary: POST /auth/register-cli
x-source: https://transcriptout.com/mcp
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostAuthRegisterCliRequest'
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: code-example
language: curl
snippet: 'curl -X POST "https://api.transcriptout.com/auth/register-cli" -H "Content-Type: application/json" -d ''{ "email" : "user@example.com"
}'' 2 Trade the code for a key The session token goes in the Authorization header, the code in the body. Back comes a normal sk_ key
for a normal account, with dashboard, free credits and the welcome email included. verify.sh Copy 1 2 3 4 curl -X POST "https://api.'
/auth/verify-cli:
get:
operationId: get_auth_verify_cli
tags:
- Auth
summary: Trade the email code and session token for an sk_ API key.
x-source: https://transcriptout.com/mcp
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
description: Bearer token with the access_token from register-cli.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetAuthVerifyCliResponse'
x-evidence:
kind: documentation
/mcp:
post:
operationId: post_mcp
tags:
- Mcp
summary: Streamable HTTP with stateless JSON-RPC over initialize, tools/list, tools/call and ping.
x-source: https://transcriptout.com/mcp
responses:
'201':
description: Success (status as documented)
x-evidence:
kind: documentation
/v1/channel/latest:
get:
operationId: get_v1_channel_latest
tags:
- Channel
summary: A channel's latest videos
x-source: https://transcriptout.com/docs
parameters:
- name: name
in: query
required: true
schema:
type: string
description: '@handle, channel name, UC… channel id, or channel URL.'
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1ChannelLatestResponse'
x-evidence:
kind: documentation
/v1/channel/search:
get:
operationId: get_v1_channel_search
tags:
- Channel
summary: Search inside a channel
x-source: https://transcriptout.com/docs
parameters:
- name: name
in: query
required: true
schema:
type: string
description: '@handle, channel name, UC… channel id, or channel URL.'
- name: q
in: query
required: true
schema:
type: string
description: Query, 1–200 chars.
- name: limit
in: query
required: false
schema:
type: integer
description: Results per page, 1–100.
- name: next_page_token
in: query
required: false
schema:
type: string
description: Token from a previous response. Replaces id and q when paginating.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1ChannelSearchResponse'
x-evidence:
kind: documentation
/v1/channel/videos:
get:
operationId: get_v1_channel_videos
tags:
- Channel
summary: GET /v1/channel/videos
x-source: https://transcriptout.com/docs
parameters:
- name: limit
in: query
required: false
schema:
type: string
- name: name
in: query
required: false
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1ChannelVideosResponse'
x-evidence:
kind: code-example
language: curl
snippet: 'curl "https://api.transcriptout.com/v1/channel/videos?name=@Fireship&limit=50" -H "Authorization: Bearer sk_your_key_here" '
post:
operationId: post_v1_channel_videos
tags:
- Channel
summary: POST /v1/channel/videos
x-source: https://transcriptout.com/docs
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1ChannelVideosRequest'
responses:
'201':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1ChannelVideosResponse'
x-evidence:
kind: code-example
language: curl
snippet: 'curl -G "https://api.transcriptout.com/v1/channel/videos" --data-urlencode "next_page_token=2b7e41d9c8305a6f" -H "Authorization:
Bearer sk_your_key_here" The token replaces the original query parameters, with no need to repeat id or q . The one endpoint without
tokens is /v1/playlist/search , which reports scanned and truncated instead. Video field formats Identical across every endpoint that
re'
/v1/playlist/search:
get:
operationId: get_v1_playlist_search
tags:
- Playlist
summary: Search inside a playlist by a substring of the title.
x-source: https://transcriptout.com/docs
parameters:
- name: id
in: query
required: true
schema:
type: string
description: PL… playlist id, or a URL with a list= parameter.
- name: q
in: query
required: true
schema:
type: string
description: Substring to match in the title, case-insensitive.
- name: limit
in: query
required: false
schema:
type: integer
description: Maximum matches to return, 1–100.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1PlaylistSearchResponse'
x-evidence:
kind: documentation
/v1/playlist/videos:
get:
operationId: get_v1_playlist_videos
tags:
- Playlist
summary: List playlist videos
x-source: https://transcriptout.com/docs
parameters:
- name: id
in: query
required: true
schema:
type: string
description: PL… playlist id, or a URL with a list= parameter. Optional if you pass next_page_token.
- name: limit
in: query
required: false
schema:
type: integer
description: Page size, up to 100, or up to 500 in ids_only mode.
- name: next_page_token
in: query
required: false
schema:
type: string
description: Token from a previous response.
- name: ids_only
in: query
required: false
schema:
type: boolean
description: Return video_ids[] instead of full objects.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1PlaylistVideosResponse'
x-evidence:
kind: documentation
/v1/search:
get:
operationId: get_v1_search
tags:
- Search
summary: Search YouTube
x-source: https://transcriptout.com/docs
parameters:
- name: q
in: query
required: true
schema:
type: string
description: Query, 1–200 chars. Optional if you pass next_page_token instead.
- name: type
in: query
required: false
schema:
type: string
description: video | channel
- name: limit
in: query
required: false
schema:
type: integer
description: Results per page, 1–50.
- name: next_page_token
in: query
required: false
schema:
type: string
description: Token from a previous response.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1SearchResponse'
x-evidence:
kind: documentation
/v1/transcript:
get:
operationId: get_v1_transcript
tags:
- Transcript
summary: GET /v1/transcript
x-source: https://transcriptout.com/docs
parameters:
- name: format
in: query
required: false
schema:
type: string
- name: video
in: query
required: false
schema:
type: string
responses:
'200':
description: Success (shape read from the example response on the page)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1TranscriptResponse'
x-evidence:
kind: code-example
language: curl
snippet: "curl \"https://api.transcriptout.com/v1/transcript?video=dQw4w9WgXcQ&format=text\" -H \"Authorization: Bearer sk_your_key_here\"\
\ 3 Read the envelope Check ok, then read data. On failure, branch on code, never on the wording of detail. response.json Copy 1 2 3\
\ 4 5 6 7 8 9 10 { \n \"ok\" : true , \n \"request_id\" : \"req_a1b2c3d4e5f6\" , \n \"data\" : { \n \"video_id\" : \"dQw4w9WgXcQ\" ,\
\ \n \"language\" : \"en\" , \n \"kin"
/v1/transcripts:
post:
operationId: post_v1_transcripts
tags:
- Transcripts
summary: Get transcripts in bulk
x-source: https://transcriptout.com/docs
parameters:
- name: videos
in: query
required: true
schema:
type: string
description: Video ids or YouTube URLs, up to 4,000 per job.
- name: lang
in: query
required: false
schema:
type: string
description: One language for the whole job.
- name: format
in: query
required: false
schema:
type: string
description: json | text | srt | vtt | srv3
- name: kind
in: query
required: false
schema:
type: string
description: manual | auto
- name: segment
in: query
required: false
schema:
type: integer
description: Max characters per segment, 20–5000.
- name: video_metadata
in: query
required: false
schema:
type: boolean
description: Add the video metadata to each item.
- name: Idempotency-Key
in: header
required: false
schema:
type: string
description: Optional retry key kept for 24 hours.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1TranscriptsRequest'
responses:
'202':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1TranscriptsResponse'
x-evidence:
kind: documentation
/v1/transcripts/17ef4c30218c47bc98bb5ac072d564e4/cancel:
get:
operationId: get_v1_transcripts_17ef4c30218c47bc98bb5ac072d564e4_cancel
tags:
- Transcripts
summary: Cancel a batch job and refund the videos it never started.
x-source: https://transcriptout.com/docs
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1Transcripts17Ef4C30218C47Bc98Bb5Ac072D564E4CancelRespon'
x-evidence:
kind: documentation
/v1/transcripts/{jobId}:
get:
operationId: get_v1_transcripts_jobId
tags:
- Transcripts
summary: Check a batch job
x-source: https://transcriptout.com/docs
parameters:
- name: jobId
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1TranscriptsJobidResponse'
x-evidence:
kind: documentation
/v1/transcripts/{jobId}/cancel:
post:
operationId: post_v1_transcripts_jobId_cancel
tags:
- Transcripts
summary: Cancel a batch job
x-source: https://transcriptout.com/docs
parameters:
- name: jobId
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/PostV1TranscriptsJobidCancelResponse'
x-evidence:
kind: documentation
/v1/transcripts/{jobId}/results:
get:
operationId: get_v1_transcripts_jobId_results
tags:
- Transcripts
summary: Read batch results
x-source: https://transcriptout.com/docs
parameters:
- name: jobId
in: path
required: true
schema:
type: string
- name: limit
in: query
required: false
schema:
type: integer
description: Results per page, 1–500.
- name: next_page_token
in: query
required: false
schema:
type: string
description: The token from the previous page.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1TranscriptsJobidResultsResponse'
x-evidence:
kind: documentation
/v1/transcripts/{jobId}/results/{videoId}:
get:
operationId: get_v1_transcripts_jobId_results_videoId
tags:
- Transcripts
summary: One video out of the job, by id.
x-source: https://transcriptout.com/docs
parameters:
- name: jobId
in: path
required: true
schema:
type: string
- name: videoId
in: path
required: true
schema:
type: string
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1TranscriptsJobidResultsVideoidResponse'
x-evidence:
kind: documentation
/v1/video:
get:
operationId: get_v1_video
tags:
- Video
summary: Get video info
x-source: https://transcriptout.com/docs
parameters:
- name: id
in: query
required: true
schema:
type: string
description: Video id or any YouTube URL.
responses:
'200':
description: Success (status as documented)
content:
application/json:
schema:
$ref: '#/components/schemas/GetV1VideoResponse'
x-evidence:
kind: documentation
components:
schemas:
GetAuthRegisterCliResponse:
type: object
properties:
access_token:
type: string
description: A short-lived session token for step two.
PostAuthRegisterCliRequest:
type: object
properties:
email:
type: string
GetAuthVerifyCliResponse:
type: object
properties:
key:
type: string
description: A normal sk_ API key for a regular account.
GetV1ChannelLatestResponse:
type: object
properties:
channel:
type: string
description: The identifier you passed in.
channel_id:
type: string
description: Resolved UC… id.
count:
type: integer
description: Number of entries, normally 15.
videos:
type: array
description: video_id, title, published (ISO 8601), thumbnails.
video_ids:
type: array
description: The same ids as a flat array, for convenience.
GetV1ChannelSearchResponse:
type: object
properties:
channel:
type: string
description: The identifier you passed in.
query:
type: string
description: The query.
title:
type: string
description: Channel name.
count:
type: integer
description: Items on this page.
videos:
type: array
description: Same video shape as /v1/channel/videos.
next_page_token:
type: string
description: Token for the next page.
has_more:
type: boolean
description: Whether another page exists.
GetV1ChannelVideosResponse:
type: object
properties:
ok:
type: boolean
request_id:
type: string
data:
type: object
properties:
video_id:
type: string
language:
type: string
kind:
type: string
transcript:
type: array
items:
type: object
properties:
text:
type: string
start:
type: number
duration:
type: number
available_langs:
type: array
items:
type: object
properties:
code:
type: string
kind:
type: string
name:
type: string
PostV1ChannelVideosRequest:
type: object
properties:
videos:
type: array
items:
type: string
format:
type: string
PostV1ChannelVideosResponse:
type: object
properties:
ok:
type: boolean
request_id:
type: string
data:
type: object
properties:
video_id:
type: string
language:
type: string
kind:
type: string
transcript:
type: array
items:
type: object
properties:
text:
type: string
start:
type: number
duration:
type: number
available_langs:
type: array
items:
type: object
properties:
code:
type: string
kind:
type: string
name:
type: string
GetV1PlaylistSearchResponse:
type: object
properties:
ok:
type: boolean
request_id:
type: string
data:
type: object
data.playlist:
type: string
data.query:
type: string
data.title:
type: string
data.count:
type: integer
data.scanned:
type: integer
data.truncated:
type: boolean
data.videos:
type: array
GetV1PlaylistVideosResponse:
type: object
properties:
playlist:
type: string
description: The identifier you passed in.
title:
type: string
description: Playlist title.
count:
type: integer
description: Items on this page.
videos:
type: array
description: Same video shape as /v1/channel/videos. Replaced by video_ids with ids_only.
next_page_token:
type: string
description: Token for the next page.
has_more:
type: boolean
description: Whether another page exists.
GetV1SearchResponse:
type: object
properties:
query:
type: string
description: The query these results answer.
type:
type: string
description: video or channel.
count:
type: integer
description: Number of results on this page.
results:
type: array
description: Videos or channels with metadata.
next_page_token:
type: string
description: Token for the next page, null when there's none.
has_more:
type: boolean
description: Whether another page exists.
estimated_results:
type: integer
description: YouTube's rough total. Always null for type=channel.
GetV1TranscriptResponse:
type: object
properties:
ok:
type: boolean
request_id:
type: string
data:
type: object
properties:
video_id:
type: string
language:
type: string
kind:
type: string
transcript:
type: string
PostV1TranscriptsRequest:
type: object
properties:
videos:
type: string
description: Video ids or YouTube URLs, up to 4,000 per job.
lang:
type: string
description: One language for the whole job.
format:
type: string
description: json | text | srt | vtt | srv3
kind:
type: string
description: manual | auto
segment:
type: integer
description: Max characters per segment, 20–5000.
video_metadata:
type: boolean
description: Add the video metadata to each item.
required:
- videos
PostV1TranscriptsResponse:
type: object
properties:
job_id:
type: string
description: Use it to poll the job and to read its results.
status:
type: string
description: queued → running → done, or cancelled.
count:
type: integer
description: How many videos the job holds, after duplicates.
lang:
type: string
description: The language it will fetch, echoed back.
format:
type: string
description: The format the results will come in, echoed back.
credits:
type: object
description: '{ charged, refunded }'
GetV1Transcripts17Ef4C30218C47Bc98Bb5Ac072D564E4CancelRespon:
type: object
properties:
ok:
type: boolean
request_id:
type: string
data:
type: object
data.job_id:
type: string
data.status:
type: string
data.lang:
type: string
data.format:
type: string
data.count:
type: integer
data.done:
type: integer
data.ready:
type: integer
data.failed:
type: integer
data.pending:
type: integer
data.credits:
type: object
data.created_at:
type: string
data.finished_at:
type: string
GetV1TranscriptsJobidResponse:
type: object
properties:
job_id:
type: string
description: The job this is about, the same id you asked for.
status:
type: string
description: queued → running → done, or cancelled.
lang:
type: string
description: The language the job was submitted with.
format:
type: string
description: The format the job was submitted with.
count:
type: integer
description: Videos in the job.
done:
type: integer
description: How many have an answer, ready or failed.
ready:
type: integer
description: How many came back with a transcript.
failed:
type: integer
description: How many ended in an error.
pending:
type: integer
description: Still to go.
credits:
type: object
description: '{ charged, refunded }'
created_at:
type: string
description: When the job was accepted, ISO-8601.
finished_at:
type: string
description: Null until the job ends.
PostV1TranscriptsJobidCancelResponse:
type: object
properties:
job_id:
type: string
description: The job that was stopped.
status:
type: string
description: cancelled, once it has been.
lang:
type: string
description: The language the job was submitted with.
format:
type: string
description: The format the job was submitted with.
count:
type: integer
description: Videos the job held.
done:
type: integer
description: What it managed to fetch.
ready:
type: integer
description: How many of those came back with a transcript.
failed:
type: integer
description: How many ended in an error before the stop.
pending:
type: integer
description: What it never reached.
credits:
type: object
description: '{ charged, refunded }'
created_at:
type: string
description: When the job was accepted, ISO-8601.
finished_at:
type: string
description: When it was stopped.
GetV1TranscriptsJobidResultsResponse:
type: object
properties:
job_id:
type: string
description: The job this page belongs to.
status:
type: string
description: The job status.
lang:
type: string
description: The language the job was submitted with.
format:
type: string
description: The format the job was submitted with.
results:
type: array
description: The page, in the order the results landed.
count:
type: integer
description: How many results are on this page.
has_more:
type: boolean
description: Whether another page exists right now.
next_page_token:
type: string
description: Pass it back to get the next page.
GetV1TranscriptsJobidResultsVideoidResponse:
type: object
properties:
status:
type: string
description: ready or error
video_id:
type: string
description: The video id.
cache:
type: string
description: HIT or MISS
GetV1VideoResponse:
type: object
properties:
video_id:
type: string
description: Resolved video id.
title:
type: string
description: Video title.
channel:
type: string
description: Channel name.
channel_id:
type: string
description: Channel id (UC…).
duration:
type: string
description: M:SS or H:MM:SS
view_count:
type: string
description: View count as YouTube renders it.
keywords:
type: array
description: Tags the author set, may be empty.
thumbnails:
type: array
description: 'Five sizes: { url, width, height }.'
is_live:
type: boolean
description: Whether this is (or was) a live broadcast.
available_langs:
type: array
description: 'Every transcript track: { code, kind, name }.'
securitySchemes:
bearer:
type: http
scheme: bearer
security:
- bearer: []
tags:
- name: Auth
- name: Channel
- name: Mcp
- name: Playlist
- name: Search
- name: Transcript
- name: Transcripts
- name: Video