Get a YouTube video transcript
Returns the caption track YouTube already holds for one of the connected channel's own videos, as plain text plus timed cues. Use it instead of downloading and transcribing the video yourself.
Auto-generated (ASR) tracks are included: YouTube serves them to the channel owner, which is what the connected account is. Uploaded tracks win over auto-generated ones when both exist for a language.
Caching: we store the transcript on first read and serve it from there afterwards, so you do not need to cache it yourself. A cached read costs no YouTube quota and does not call YouTube at all. source tells you which happened (youtube on the first read, cache after). Pass refresh=true only when the captions actually changed on YouTube, since that re-downloads.
Notes:
- Only videos owned by this connected channel. Anything else returns 404.
contentDetails.captionin YouTube's own API readsfalseon videos that DO have a serving auto-generated track, so it is not a usable availability signal. Call this endpoint and handle the 404.- YouTube generates auto-captions only for videos with recognisable speech, and can take a few hours after upload to publish them.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Path Parameters
The connected YouTube account.
Query Parameters
The YouTube video id (the platformPostId on a synced external post).
BCP-47 language tag as YouTube labels the track. en also matches an en-GB track. Omit to take the best available track.
json returns timed cues; srt returns the raw SubRip body instead. text is present either way.
"json"Value in
- "json"
- "srt"
Re-download from YouTube instead of serving the stored copy. Spends 200 quota units.
falseResponse Body
application/json
application/json
application/json
application/json
{ "accountId": "68a1f2c3d4e5f6a7b8c9d0e1", "videoId": "sdw1FML60tM", "language": "en", "trackId": "AUieDaanCEjmJQdL7wfZbe1QDQTbseX-hToYw99pmOJitlJz868", "trackKind": "asr", "source": "cache", "fetchedAt": "2026-08-27T21:09:54.000Z", "text": "Hey, this is Mickey. I'm the founder of this portfolio of three websites which are mainly monetized via AdSense.", "cues": [ { "start": 1.6, "end": 8.88, "text": "Hey, this is Mickey. I'm the founder of" }, { "start": 5.04, "end": 12.8, "text": "this portfolio of three websites" } ], "availableTracks": [ { "trackId": "AUieDaanCEjmJQdL7wfZbe1QDQTbseX-hToYw99pmOJitlJz868", "language": "en", "trackKind": "asr", "name": "" } ]}Set default YouTube playlist
Sets the default playlist used when publishing videos for this account. When a post does not specify a playlistId, the default playlist is not automatically used (it is stored for client-side convenience).
Get Shopify OAuth connect URL
Initiate the Shopify OAuth flow for a store. Shopify is a connect-only platform: the connected account does not publish social posts, it powers the Blogs API (`/v1/accounts/{accountId}/blogs`). Returns an `authUrl` to redirect the merchant to; after they approve the install, Shopify redirects their browser to Zernio's callback, the account is created on the profile (platform `shopify`), and the browser is redirected to `redirect_url` (or the Zernio dashboard when omitted). Requested scopes are `read_content` and `write_content` (content only; no customer or order data). Connecting the same profile to a store again refreshes the stored token in place.