Tools

Video to Markdown API

Submit any video file. Get back a readable Markdown document with the full transcript, duration, dimensions, and metadata.

Try it below:

FILEDrop a file or click to upload

Production-ready

Private by design

Security-first

Scalable

Production-ready

Private by design

Security-first

Scalable

Production-ready

Private by design

Security-first

Scalable

Turn video files into Markdown

Upload a video file or submit a URL, get Markdown back.

# New hire onboarding engineering

**Kind:** video
**Created:** 2026-07-24T14:30:00.000Z
**MIME Type:** video/mp4
**Size:** 184549376 bytes
**Chunks:** 48

## Media

**Duration:** 1426.8s
**Width:** 1920
**Height:** 1080
**Transcript:**
Welcome to the engineering onboarding series. This video covers your local development setup, how we handle deployments, and where to find documentation for each service.

Let's start with your dev environment. You'll need Node 20 or later and Docker Desktop. Clone the monorepo from GitHub and run the bootstrap script. It pulls all service dependencies and spins up the local stack.

The bootstrap takes about three minutes the first time. Once it's done you should see all six services running in Docker. Hit localhost 3000 to confirm the dashboard loads.

For deployments, we use GitHub Actions. Every merge to main triggers a build, runs the test suite, and deploys to staging automatically. Production deploys require a manual approval step in the Actions UI.

Let me walk you through the repo structure. The monorepo is organised by service. Each service has its own directory with a Dockerfile, a local docker-compose override, and a README that covers the service's API surface. Start with the gateway service, that's the entry point for all client requests.

The gateway handles authentication, rate limiting, and request routing. It forwards requests to the appropriate downstream service based on the URL path. If you need to add a new route, the gateway README has a step-by-step guide.

For testing, we use Vitest for unit tests and Playwright for end-to-end. Every PR runs the full test suite before it can be merged. If your tests touch the database, use the test fixtures in the shared package rather than seeding data manually.

Documentation lives in two places. Service-level docs are in each service's README. Architecture decisions, team processes, and onboarding guides are in the Notion wiki. Your manager should have shared access to both during your first week.

One thing to keep in mind: we rotate on-call weekly. You won't be on the rotation for your first month, but after that you'll take a week every six to eight weeks. The runbook for common incidents is in the wiki under Operations.

That covers the basics. If you get stuck, the engineering Slack channel is the fastest way to get help. Don't hesitate to ask questions. Everyone went through this same setup.

What is Exabase's video to Markdown API?

Submit a video file to the Exabase Extract API and get a Markdown document back instead of JSON. The same extraction pipeline runs: audio track extraction, transcription, metadata parsing, and thumbnail generation. The difference is the output. Pass ?format=markdown when retrieving the result and you get a human-readable Markdown document with the full transcript instead of a JSON object.

The Markdown output includes video duration, frame dimensions, MIME type, file size, and the complete transcript as continuous text. MP4, MOV, AVI, WebM, MKV, and other major formats are supported. No FFmpeg, no speech-to-text model, no GPU.

What you get back

The Markdown response is a single text document. Duration and frame dimensions appear in the metadata block. The full transcript follows as continuous prose. The result is ready to feed directly into an LLM context window, store as a readable summary, or use as source material for content repurposing.

You can also configure webhooks with webhookFormat: "markdown" so completed jobs POST the Markdown document directly to your server.

One multi-modal API

The same POST /v2/extract endpoint handles every content type Exabase supports, and the ?format=markdown parameter works across all of them. For video, you get duration, dimensions, and the full transcript. For audio, you get duration and the transcript. For PDFs, you get document metadata and text. For images, you get dimensions and OCR text. For web pages, you get the title, site name, and content.

The submission flow is identical across all types: one endpoint, one SDK method, one webhook configuration. The Extract docs cover each content type in detail.

What you can build with it

Feed video transcripts directly into your agent's context window as readable text. Build a video search platform where transcripts are stored as readable Markdown. Power a learning copilot that transcribes lecture recordings and makes them searchable.

Store transcribed video as Resources in a Base and the transcript becomes searchable through Deep Search. Workers can process new recordings as they arrive.

Beyond Markdown

The Extract API also returns JSON (the default) with timestamped chunks for seek-to-source UIs and subtitle generation. Use Markdown for LLM context and human review, JSON for structured processing with timestamps. The Video to JSON tool page covers the JSON output.

How do I use it?

  1. Get your API key

Free, no credit card:

Sign up at exabase.io and copy your API key from the dashboard.

  1. Submit a video file

Using the SDK (Node.js):

import { Exabase } from "@exabase/sdk";
import { createReadStream } from "fs";

const api = new Exabase({
  apiKey: process.env.EXABASE_API_KEY,
});

const job = await api.extract.createFromFile({
  file: createReadStream("./onboarding-walkthrough.mp4"),
  name: "New hire onboarding — engineering",
});

console.log(job.id);    // extraction job id
console.log(job.state); // "pending"
  1. Get Markdown back

Poll the job until state reaches completed, then request the Markdown format.

curl 'https://api.exabase.io/v2/extract/<jobId>?format=markdown' \
  -H 'X-Api-Key: <EXABASE_API_KEY>'

One API call. No FFmpeg, no speech-to-text model, no Markdown conversion.

Example output

# New hire onboarding engineering

**Kind:** video
**Created:** 2026-07-24T14:30:00.000Z
**MIME Type:** video/mp4
**Size:** 184549376 bytes
**Chunks:** 48

## Media

**Duration:** 1426.8s
**Width:** 1920
**Height:** 1080
**Transcript:**
Welcome to the engineering onboarding series. This video covers your
local development setup, how we handle deployments, and where to find
documentation for each service

API quick reference

Endpoint

Method

Description

/v2/extract

POST

Submit extraction job

/v2/extract

GET

List extraction jobs

/v2/extract/{jobId}

GET

Poll for result

/v2/extract/{jobId}/chunks

GET

Fetch timestamped chunks (JSON only)

/v2/extract-settings

PUT

Configure webhook

Auth: X-Api-Key header on all requests.

File retention: Stored files are retained for 1 day from job creation. Download or copy anything you need before they expire.

Need file extraction or full page content?

Exabase offers a full set of tools to extract content from any media, document or website.

All your data extraction needs in one place.

Why Exabase

Use cases

FAQs

What is Exabase?

Exabase is infrastructure for AI agents. It gives your agents memory, versioned file storage, AI deep search, and context automation through a set of APIs. Store what your agent learns, search inside any content type, and keep knowledge bases current automatically. Built for production use. Give your agent precise context and cut your token spend by up to 81%.

Who uses Exabase?

Developers and teams building AI agents, copilots, and RAG applications. If your agent needs to remember things between sessions, store and retrieve files, search across documents and media, or stay up to date without manual maintenance, Exabase handles that infrastructure so you can focus on your product.

How fast is processing?

Processing time depends on the file length, resolution, and format. Processing is asynchronous, so your application is not blocked while extraction runs. Poll for results or configure a webhook to be notified on completion.

How do I get Markdown instead of JSON?

Add ?format=markdown to the GET /v2/extract/{jobId} request. For webhooks, set webhookFormat: "markdown".

Does the Markdown output include timestamps?

The Markdown includes the full transcript as continuous text and the total duration. For per-segment timestamps, use the JSON format and fetch chunks.

Can I still get JSON?

Yes. JSON is the default. Both formats are available from the same extraction job.

How is this different from Video to JSON?

Same pipeline, different output. Video to JSON returns structured JSON with timestamped chunks. Video to Markdown returns a readable document.

What video formats are supported?

MP4, MOV, AVI, WebM, MKV, and other major formats.

Does it transcribe on-screen text?

No. The API transcribes the audio track. On-screen text is not extracted separately.

Do I have to poll for results?

No. Configure a webhook with webhookFormat: "markdown" to receive the document on completion.

How long are files retained?

Stored files are retained for 1 day from job creation, then permanently deleted. Download or copy anything you need before the retention window expires.

Is there an SDK?

Yes. The @exabase/sdk package for Node.js/TypeScript handles file streaming, job polling, and chunk retrieval. Install with npm install @exabase/sdk. Or call the REST API directly from any language.

What other content types support Markdown output?

All of them. See the PDF to Markdown, Audio to Markdown, Image to Markdown, and Website to Markdown tool pages.

Deciding?

Ask your favourite AI about Exabase:

Cut your token spend and give your agent precise context.

Get started in minutes.

Cut your token spend and give your agent precise context.

Get started in minutes.