API v1

Programmatic transcription API

Turn any TikTok, Instagram, YouTube, Facebook or X video, or your own audio/video files, into clean text from your own code. REST, Bearer authentication, JSON responses, 90+ languages. Pay as you go with API tokens, or get it included on Business (fair-use up to 2600 min/month).

View the endpoints See pricing
Overview

One API for every platform

The Dokitscript API is the same engine that powers the web app, exposed as a simple HTTP interface. Send a public video URL or upload an audio/video file, poll for the result, and pull back the full transcript with timestamps and segments, ready to drop into your pipeline, CMS or data warehouse.

What you can transcribe

Public videos from TikTok, Instagram (Reels, posts, IGTV), YouTube (Shorts & long-form), Facebook and X / Twitter, plus your own uploaded files (MP3, MP4, WAV, M4A, OGG, WebM, AAC, FLAC, up to 500 MB, sent in one request up to about 100 MB, or through a direct upload address beyond that). Responses are JSON, with the transcript available as plain text, timestamped text, SRT or VTT.

Two ways to use it: buy API tokens (pay as you go, no subscription) or get it included on the Business plan (fair-use up to 2600 min/month). Either way, you generate the keys yourself from your account.
Rather not write the HTTP calls? The same key also opens our MCP server, which hands Claude Code, Claude Desktop, Cursor or VS Code five ready-made transcription tools. See the MCP section below.
Authentication

Bearer API keys

Every request is authenticated with a secret key passed in the Authorization header. Keys are tied to your account; usage is billed to your API token balance (pay as you go) or your Business plan (fair-use up to 2600 min/month).

Where to generate a key: sign in, open your account, and use the API panel. Key creation is open on Starter, Creator, Pro and Business, and to any account holding API tokens. You can create up to 10 active keys and revoke any of them at any time. The secret is shown only once at creation: store it somewhere safe; if you lose it, revoke the key and create a new one.

Header format
Authorization: Bearer dks_live_4a7c92e1b8d3f0a6c5e2b9d7f1a3c8e0b4d6f9a2c7e1b5d3
Keep keys server-side. A key grants full access to your account's transcription quota: never expose it in client-side code, mobile apps or public repositories.
Reference

Endpoints

Base URL: https://dokitscript.com. All endpoints return JSON. Transcription is asynchronous: create a job, poll its status, then fetch the finished transcript.

POST /api/v1/transcribe

Starts a transcription job for a public video URL and returns immediately with a jobId to poll. Does not wait for the transcription to finish.

Body parameters
FieldTypeDescription
url string Required. Public video URL (TikTok, Instagram, YouTube, Facebook or X).
language string Optional. ISO language hint, or "auto" to detect. Defaults to "auto".
format string Optional. Output for the formatted field: timestamps, plain, srt or vtt. Defaults to timestamps.
Example request
curl -X POST https://dokitscript.com/api/v1/transcribe \
  -H "Authorization: Bearer dks_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://www.tiktok.com/@user/video/1234567890", "language": "auto", "format": "timestamps" }'
Response: 202 Accepted
{
  "jobId": "job_a1b2c3d4e5f6",
  "status": "pending",
  "links": {
    "self": "/api/v1/jobs/job_a1b2c3d4e5f6"
  }
}
POST /api/v1/transcribe-file

Transcribes an audio or video file: same async flow as /transcribe. The body is multipart/form-data for files up to about 100 MB, or JSON with a ticketId for files up to 500 MB already sent through POST /api/v1/uploads. Returns a jobId to poll.

Form fields (multipart, up to about 100 MB)
FieldTypeDescription
file file Required. Audio/video file: MP3, MP4, WAV, M4A, OGG, WebM, AAC or FLAC. About 100 MB at most in this form (a network limit in front of the API rejects larger request bodies); for up to 500 MB, use /api/v1/uploads below.
language string Optional. ISO language hint, or "auto" to detect. Defaults to "auto".
format string Optional. Output for the formatted field: timestamps, plain, srt or vtt. Defaults to timestamps.
Example request
curl -X POST https://dokitscript.com/api/v1/transcribe-file \
  -H "Authorization: Bearer dks_live_YOUR_KEY" \
  -F "[email protected]" \
  -F "language=en"
Response: 202 Accepted
{
  "jobId": "job_a1b2c3d4e5f6",
  "status": "pending",
  "links": {
    "self": "/api/v1/jobs/job_a1b2c3d4e5f6"
  }
}

Then poll GET /api/v1/jobs/:jobId and fetch the transcript exactly like the URL flow below.

POST /api/v1/uploads

Sends a large file (up to 500 MB) straight to storage, without going through the API. Three calls: ask for an upload address here, PUT the file to it, then start the transcription with POST /api/v1/transcribe-file and the returned ticketId. This call costs nothing: only the transcription uses your quota. An upload address is valid for 1 hour and accepts that one file only.

JSON body
FieldTypeDescription
fileName string Required. Used to detect the type: MP3, MP4, WAV, M4A, OGG, WebM, AAC or FLAC.
sizeBytes integer Required. The exact size of the file in bytes, up to 500 MB (524288000). The upload address only accepts a file of exactly this size.
contentType string Optional. Detected from the extension when omitted. Send the same value in the Content-Type header of the PUT.
Example: the three calls
curl -X POST https://dokitscript.com/api/v1/uploads \
  -H "Authorization: Bearer dks_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"meeting.mp4","sizeBytes":314572800}'

curl -X PUT "<uploadUrl from the response>" \
  -H "Content-Type: video/mp4" \
  --data-binary @meeting.mp4

curl -X POST https://dokitscript.com/api/v1/transcribe-file \
  -H "Authorization: Bearer dks_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ticketId":"upl_..."}'
Response: 201 Created
{
  "ticketId": "upl_0123456789abcdef01234567",
  "uploadUrl": "https://…",
  "uploadMethod": "PUT",
  "requiredHeaders": { "Content-Type": "video/mp4", "Content-Length": "314572800" },
  "expiresAt": "2026-09-29T17:00:00.000Z"
}

Send no Authorization header on the PUT: the address is already signed. If you start the transcription before the file has arrived, transcribe-file answers 409 FILE_NOT_UPLOADED and the ticket stays valid. Errors: 413 above 500 MB, 429 with 5 uploads already pending, 410 for an expired ticket.

GET /api/v1/jobs/:jobId

Returns the status of a job you created. Poll this until status is done; the response then includes the transcriptId to fetch.

Example request
curl https://dokitscript.com/api/v1/jobs/job_a1b2c3d4e5f6 \
  -H "Authorization: Bearer dks_live_YOUR_KEY"
Response: 200 OK (done)
{
  "jobId": "job_a1b2c3d4e5f6",
  "status": "done",
  "progress": 100,
  "transcriptId": "6630f1a2b3c4d5e6f7a8b9c0",
  "links": {
    "transcript": "/api/v1/transcript/6630f1a2b3c4d5e6f7a8b9c0"
  }
}

While processing, status is pending or processing. On failure it is error.

GET /api/v1/transcript/:id

Returns a finished transcript that belongs to you. Add ?format=timestamps|plain|srt|vtt to control the formatted field (defaults to timestamps).

Example request
curl "https://dokitscript.com/api/v1/transcript/6630f1a2b3c4d5e6f7a8b9c0?format=srt" \
  -H "Authorization: Bearer dks_live_YOUR_KEY"
Response: 200 OK
{
  "id": "6630f1a2b3c4d5e6f7a8b9c0",
  "platform": "tiktok",
  "url": "https://www.tiktok.com/@user/video/1234567890",
  "language": "en",
  "duration": 47,
  "wordCount": 128,
  "fullText": "Here is the full transcript text...",
  "segments": [
    { "start": 0, "end": 3.2, "text": "Here is the..." }
  ],
  "speakers": [],
  "speakerText": null,
  "createdAt": "2026-06-13T10:24:00.000Z",
  "formatted": "1\n00:00:00,000 --> 00:00:03,200\nHere is the..."
}
MCP server

Give your AI assistant the same tools

Beyond the REST endpoints above, Dokitscript runs a remote MCP server (Model Context Protocol). Point Claude Code, Claude Desktop, Cursor or VS Code at it and your assistant can transcribe a link and read your history on its own, with no glue code to write. It authenticates with the same Bearer key as the REST API, so nothing new to set up on your side.

Endpoint
https://dokitscript.com/mcp   // transport: Streamable HTTP (JSON-RPC over POST)
Authorization: Bearer <your API key>

The seven tools your assistant gets

ToolWhat it does
transcribe_url Submits a TikTok, Instagram, YouTube, Facebook, X, LinkedIn or Snapchat Spotlight link and returns an id immediately; the transcription runs in the background.
create_upload Starts the upload of a local audio or video file (up to 500 MB). Returns a single-use upload address, valid for the file's exact size, and a ticket id.
transcribe_file Transcribes a file uploaded with create_upload (pass its ticket id) or a file behind a direct download link. Returns an id immediately; the transcription runs in the background.
get_transcript Fetches a transcript by id in plain text, timestamps, SRT or VTT, or reports progress while it is still running.
list_transcripts Lists the transcriptions on the account, most recent first, with pagination and a platform filter.
search_transcripts Full-text search across the account's transcription history.
ask_question Answers a free-form question about one of your transcripts, with sources. Counts against your monthly AI quota and needs a plan that includes the feature.
Who can connect: any account on Starter, Creator, Pro or Business, and any account holding API tokens. On Starter and Pro, transcriptions run on your token balance, bought separately from your subscription, and each file is capped at 45 minutes. Business includes API and MCP usage in the plan (fair-use up to 2600 min/month) and goes up to 5 hours per file.

Set up the MCP server

Pricing

API tokens: pay as you go

No subscription required. Buy a pack of API tokens and use the API until they run out: tokens never expire. 1 token = 15 minutes of transcription (any started 15-minute block counts as one token), so a 40-minute file uses 3 tokens. Tokens are what fund API and MCP calls on Starter and Pro: those plans open the door, but their subscription minutes stay on the web app. Already on Business? The API is included, fair-use up to 2600 minutes a month, no tokens needed.

PackTokensTranscriptionPrice
Starter50≈ 12.5 hours$14.99
Growth200≈ 50 hours$49.99
Scale1,000≈ 250 hours$249.99
Buy tokens from the API panel in your account (card or crypto). Token transcriptions are capped at 45 minutes per file; Business goes up to 5 hours.
Limits & quotas

Rate limits and usage

The API reuses the same pipeline as the web app. Usage is billed either to your API tokens (1 token per started 15-minute block) or, on Business, counts as fair-use up to 2600 minutes a month, just like the dashboard.

LimitValue
Access Starter, Creator, Pro or Business plan, or any account holding API tokens
Billing 1 token / 15 min on Starter, Creator and Pro · fair-use up to 2600 min/mo included on Business
Max video / audio duration 45 min (tokens) · 5 h (Business)
Rate limit (job creation) 20 requests / minute per key
Active API keys Up to 10 per account
Errors are JSON. Expect 400 (bad request), 401 (missing/invalid key), 402 (out of API tokens), 403 (no API access: no tokens and not on a paid plan), 404 (job or transcript not found), 429 (rate limited) and 503 (API temporarily unavailable). Error bodies look like { "error": "..." }.
Available now

Start building

Open your account, buy a pack of API tokens (or go Business, fair-use up to 2600 min/month), then create a key from the API panel and make your first request. Need help with a large integration or volume pricing? Talk to us.

Open your account