API Reference
Social Media Transcript API
Extract transcripts from supported social media URLs or explicit public downloadable media URLs.
Subclip downloads the media, probes duration, checks credits at 1 credit per source minute, then transcribes and returns text, JSON, or SRT. For current costs, see API credit costs.
OpenAPI-style reference
API endpoints
Download social or public media, transcribe it, and return text, SRT, JSON, or word timestamps.
/api/v1are auto-cleaned and do not count toward the user's storage quota./api/v1/social-transcripts/uploadsCreate public media upload URL
Creates a signed upload URL for public-media transcript jobs.
Parameters
| Field | Type | Required | Details |
|---|---|---|---|
fileName | string | Yes | Source media file name body |
contentType | string | No | Audio or video content type body |
fileSize | number | Yes | Declared size in bytes, max 2GB body |
Examples
Request
{
"fileName": "source.mp4",
"contentType": "video/mp4",
"fileSize": 52428800
}Response
{
"uploadUrl": "https://...",
"sourceObjectKey": "user_.../social-transcripts-api/sources/abc123-source.mp4",
"expiresIn": 900
}Responses
| Status | Description |
|---|---|
200 | Request succeeded |
400 | Invalid request body or unsupported parameter |
401 | Missing, invalid, or revoked API key |
429 | Rate limit exceeded |
500 | Unexpected processing error |
/api/v1/social-transcripts/jobsStart social media transcript
Downloads social or public media, checks credits by duration, transcribes, and returns the requested format.
Parameters
| Field | Type | Required | Details |
|---|---|---|---|
url | string | No | Instagram, Facebook, YouTube, X, TikTok, or public downloadable URL body |
sourceObjectKey | string | No | Uploaded source media key instead of url |
platform | instagram | facebook | youtube | x | tiktok | public | No | Optional except public downloadable URLs must use public |
language | string | Yes | Language code for transcription |
format | text | srt | json | No | Output transcript format |
includeWordTimestamps | boolean | No | Include word-by-word timestamp output |
Examples
Request
{
"url": "https://www.tiktok.com/@creator/video/...",
"platform": "tiktok",
"language": "en",
"format": "srt",
"includeWordTimestamps": true
}Response
{
"projectId": "stproj_...",
"status": "queued",
"runId": "run_...",
"estimatedCredits": 9,
"statusUrl": "/api/v1/.../jobs/stproj_...",
"downloadUrl": "/api/v1/.../jobs/stproj_.../download"
}Responses
| Status | Description |
|---|---|
200 | Request succeeded |
400 | Invalid request body or unsupported parameter |
401 | Missing, invalid, or revoked API key |
429 | Rate limit exceeded |
500 | Unexpected processing error |
/api/v1/social-transcripts/jobs/{projectId}Get social transcript status
Returns transcript output when complete.
Parameters
| Field | Type | Required | Details |
|---|---|---|---|
projectId | string | Yes | Social transcript project ID path |
Examples
Response
{
"projectId": "stproj_...",
"status": "completed",
"outputReady": true,
"format": "srt",
"output": "1\\n00:00:00,000 --> 00:00:02,000\\nHello world"
}Responses
| Status | Description |
|---|---|
200 | Request succeeded |
400 | Invalid request body or unsupported parameter |
401 | Missing, invalid, or revoked API key |
429 | Rate limit exceeded |
500 | Unexpected processing error |
Upload source media to Subclip
This step is optional. It is useful when you do not want to manage S3 storage infrastructure and want Subclip to handle direct client-side uploads.
1. Create an upload URL
curl -X POST https://www.subclip.app/api/v1/social-transcripts/uploads \
-H "Authorization: Bearer $SUBCLIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fileName": "creator-video.mp4",
"contentType": "video/mp4",
"fileSize": 73400320
}'{
"uploadUrl": "https://...",
"method": "PUT",
"sourceObjectKey": "user_.../social-transcripts-api/sources/abc123-creator-video.mp4",
"sourceObjectName": "creator-video.mp4",
"sourceObjectMimeType": "video/mp4",
"expiresIn": 900
}2. Upload the file
curl -X PUT "$SOURCE_UPLOAD_URL" \ -H "Content-Type: video/mp4" \ -H "Content-Length: 73400320" \ --data-binary "@creator-video.mp4"
3. Start the job with sourceObjectKey
curl -X POST https://www.subclip.app/api/v1/social-transcripts/jobs \
-H "Authorization: Bearer $SUBCLIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sourceObjectKey": "user_.../social-transcripts-api/sources/abc123-creator-video.mp4",
"sourceObjectName": "creator-video.mp4",
"sourceObjectMimeType": "video/mp4",
"language": "en",
"format": "text"
}'Start from a public downloadable URL
For a direct media file, public S3 URL, signed S3/R2 URL, or another downloadable HTTP(S) media URL, set platform to public. Without it, the request fails.
curl -X POST https://www.subclip.app/api/v1/social-transcripts/jobs \
-H "Authorization: Bearer $SUBCLIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-bucket.s3.amazonaws.com/source-video.mp4?X-Amz-Signature=...",
"platform": "public",
"language": "en"
}'Supported transcript languages
Pass one of these values in language. The field is required so the transcription model can run with the right language hint.
| Code | Language |
|---|---|
| af | Afrikaans |
| sq | Albanian |
| am | Amharic |
| ar | Arabic |
| hy | Armenian |
| as | Assamese |
| az | Azerbaijani |
| ba | Bashkir |
| eu | Basque |
| be | Belarusian |
| bn | Bengali |
| bs | Bosnian |
| br | Breton |
| bg | Bulgarian |
| ca | Catalan |
| zh | Chinese |
| hr | Croatian |
| cs | Czech |
| da | Danish |
| nl | Dutch |
| en | English |
| et | Estonian |
| fo | Faroese |
| fi | Finnish |
| fr | French |
| gl | Galician |
| ka | Georgian |
| de | German |
| el | Greek |
| gu | Gujarati |
| ht | Haitian Creole |
| ha | Hausa |
| haw | Hawaiian |
| he | Hebrew |
| hi | Hindi |
| hu | Hungarian |
| is | Icelandic |
| id | Indonesian |
| it | Italian |
| ja | Japanese |
| jw | Javanese |
| kn | Kannada |
| kk | Kazakh |
| km | Khmer |
| ko | Korean |
| lo | Lao |
| la | Latin |
| lv | Latvian |
| ln | Lingala |
| lt | Lithuanian |
| lb | Luxembourgish |
| mk | Macedonian |
| mg | Malagasy |
| ms | Malay |
| ml | Malayalam |
| mt | Maltese |
| mi | Maori |
| mr | Marathi |
| mn | Mongolian |
| my | Myanmar |
| ne | Nepali |
| no | Norwegian |
| nn | Nynorsk |
| oc | Occitan |
| ps | Pashto |
| fa | Persian |
| pl | Polish |
| pt | Portuguese |
| pa | Punjabi |
| ro | Romanian |
| ru | Russian |
| sa | Sanskrit |
| sr | Serbian |
| sn | Shona |
| sd | Sindhi |
| si | Sinhala |
| sk | Slovak |
| sl | Slovenian |
| so | Somali |
| es | Spanish |
| su | Sundanese |
| sw | Swahili |
| sv | Swedish |
| tl | Tagalog |
| tg | Tajik |
| ta | Tamil |
| tt | Tatar |
| te | Telugu |
| th | Thai |
| bo | Tibetan |
| tr | Turkish |
| tk | Turkmen |
| uk | Ukrainian |
| ur | Urdu |
| uz | Uzbek |
| vi | Vietnamese |
| cy | Welsh |
| yi | Yiddish |
| yo | Yoruba |
Options
| Field | Required | Notes |
|---|---|---|
| url | Yes, unless sourceObjectKey | Social URL or direct public/signed downloadable media URL |
| sourceObjectKey | Yes, unless url | Object key returned by POST /api/v1/social-transcripts/uploads |
| sourceObjectName | No | Original uploaded source filename |
| sourceObjectMimeType | No | Uploaded source media MIME type |
| platform | Conditional | Optional for supported social URLs, required as public for direct downloadable URLs |
| language | Yes | Spoken language code from the supported transcript languages table |
| format | No | text by default, use text, json, or srt |
| includeWordTimestamps | No | Adds word-level timestamps to the completed status response when available |
Poll status
The transcript is ready when outputReady is true.
curl https://www.subclip.app/api/v1/social-transcripts/jobs/stproj_... \ -H "Authorization: Bearer $SUBCLIP_API_KEY"
Responses
Use format and includeWordTimestamps only when you need structured output or word-level timing.
{
"format": "json",
"includeWordTimestamps": true
}{
"projectId": "stproj_...",
"status": "completed",
"outputReady": true,
"platform": "youtube",
"format": "text",
"durationSeconds": 126,
"creditsUsed": 3,
"text": "Full transcript text..."
}{
"projectId": "stproj_...",
"status": "completed",
"outputReady": true,
"format": "json",
"includeWordTimestamps": true,
"transcript": {
"text": "Full transcript text...",
"segments": [
{
"start": 0,
"end": 2.4,
"text": "First sentence.",
"words": [{ "word": "First", "start": 0, "end": 0.4 }]
}
]
},
"wordTimestamps": [{ "word": "First", "start": 0, "end": 0.4 }]
}
Start from a social URL
Subclip infers
youtube,instagram,facebook,x, andtiktokfrom the URL.curl -X POST https://www.subclip.app/api/v1/social-transcripts/jobs \ -H "Authorization: Bearer $SUBCLIP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.tiktok.com/@creator/video/...", "language": "en" }'{ "projectId": "stproj_...", "status": "queued", "runId": "run_...", "platform": "tiktok", "format": "text", "estimatedCredits": null, "statusUrl": "/api/v1/social-transcripts/jobs/stproj_..." }