Turn any video, audio file, or image into facts a model can read.

One API call. AnalyzeMedia analyzes the file once and returns a small text document with every fact and its time: who is in it, what happens, what is said, what plays. A model reads that in under a second. Watching the video would cost it a minute and 60,000 tokens, every time.

Below: a real 3-minute clip and what the API returned for it. Move the pointer across the timeline.

Your fileberlin-busker.mp4, 3:34, 1280 by 720, 50 MB
A street musician with a guitar on a pedestrian street in Berlin
0:00
0:000:301:001:302:002:303:003:30
Camera movesMomentsPassers-bySpeechMusic
background
song Asong Asong B

Move the pointer across the timeline. Bars are spans, thin marks are instants; green is measured, blue is observed.

What the API returnsberlin-busker.mp4.analyzemedia, 12.6 KB
What the file says at 0:00
moments[0] · t 0.00

A is seen playing guitar and singing on the sidewalk.

About the whole file
File
One handheld take, 3:34, 1280 by 720, 50 MB
People
A, a young woman with a guitar, singing
Camera
Handheld, low jitter, zoom in to 1.56x
Moments
1:34 and 2:49, money in the guitar case
Passers-by
At 0:08, 1:24, and 1:44
Music
Two songs, 112 BPM, C# major
Every value in the file is measured from the bytes or observed by a model, with a time.Open the file

How it works

Three calls with curl. The result is a .analyzemedia file, plain JSON, that you keep next to the original.

1 · Upload

Send the file

Ask for an upload URL, then put the bytes to it. Up to 10 minutes and 300 MB.

POST /v1/uploads
{ "filename": "clip.mp4", "bytes": 50294174 }
2 · Analyze

Say what it is

Start the job with the upload id and one of six types. The API never guesses the type from the content.

POST /v1/analyses
{ "upload_id": "up_…", "type": "video/footage" }
3 · Download

Get the facts

Poll the job or give it a webhook. Then download the file and hand it to any model.

GET /v1/analyses/an_…/result
→ clip.mp4.analyzemedia

Every route, with request and response bodies, is in the route reference.

Why not let the model watch the video?

It can. It just costs a minute and about 60,000 tokens for a 3-minute clip, every time you ask, and it forgets the clip after each question. The following table compares the two approaches, first for the clip above and then for a library of 1,000 clips like it.

Watch the videoRead the file
One clipUpload 50 MB. The model takes more than a minute and about 60,000 tokens.The model reads about 4,000 tokens immediately.
1,000 clipsUpload 50 GB. The model takes a day, for one question.Search a folder of text files, or give the model the summaries.
The second questionThe same cost again. The model kept nothing.No cost. The file is unchanged.
A different modelAnother upload, and possibly a different answer.The same file and the same facts.

The figures assume a 1280 by 720, 30 fps clip and a video model that uses about 300 tokens per second of video. The file is the 12.6 KB result above. Exact numbers vary by model.

The same questions, answered both ways

Each transcript asks once and shows two turns: a model that watched the video, then a model that read the file the API returned. Every second answer comes from the file, with the times it records.

When do people walk in front of the camera?
Watched berlin-busker.mp4 (1m 04s · 60,000 tokens)
A few people pass by early on, and someone crosses again later. I can't give exact times without going through it again.
Read berlin-busker.mp4.analyzemedia (0.4s · 4,000 tokens)
Three times: a cyclist and a pedestrian from 8.0 to 12.5 seconds, a woman in a striped shirt from 84.0 to 85.5, and a woman in a white cardigan from 104.0 to 106.0.
Is the camera steady?
Watched berlin-busker.mp4 (1m 04s · 60,000 tokens)
It looks handheld but fairly steady. There might be some movement near the start.
Read berlin-busker.mp4.analyzemedia (0.4s · 4,000 tokens)
Handheld with low jitter (0.002) and a slow zoom in to 1.56x. Three tilts in the first 13 seconds, no pans.
Is the music a known song?
Watched berlin-busker.mp4 (1m 04s · 60,000 tokens)
I can't identify music from the audio.
Read berlin-busker.mp4.analyzemedia (0.4s · 4,000 tokens)
No. Two songs were measured, both 112.3 BPM in C# major, and neither matched the recognition catalog.
When does someone tip her?
Watched berlin-busker.mp4 (1m 04s · 60,000 tokens)
Somewhere in the middle, and again near the end, I think.
Read berlin-busker.mp4.analyzemedia (0.4s · 4,000 tokens)
At 94.5 seconds a woman in a green dress puts money in the guitar case. At 169 seconds a man in shorts tosses coins in.
How fast is this short cut?
Watched curtain-bangs.mp4 (22s · 18,000 tokens)
It's cut quickly, maybe every couple of seconds. I'd have to count.
Read curtain-bangs.mp4.analyzemedia (0.9s · 13,000 tokens)
43 cuts in 60 seconds, about 43 per minute, with a mean shot of 1.36 seconds. Two scenes in the same studio.
Does the short use captions or a known sound?
Watched curtain-bangs.mp4 (22s · 18,000 tokens)
I didn't notice captions. The music sounds like a stock track, but I can't confirm.
Read curtain-bangs.mp4.analyzemedia (0.9s · 13,000 tokens)
No captions and no overlays. One music track runs the whole 60 seconds: 123 BPM, G major, no vocals, no match in the catalog.

Six file types, one price each

You declare the type when you start a job, and the API returns the fields that type defines. Every job runs the full analysis. There are no tiers.

TypeWhat the API returnsPrice
video/footageOne continuous take as recorded. Describes what the camera captured and how the camera moved.20¢ per minute
video/editA finished video. Describes the scenes, cuts, layouts, captions, overlays, and sound.20¢ per minute
audio/speechA recording of people talking. Includes the transcript, the speakers, the silences, and the levels.6¢ per minute
audio/musicA track or a mix. Identifies the recording and describes its tempo, key, beats, and energy.2¢ per minute
image/sceneA photo or a video frame. Describes the composition, the people, and the objects, with bounding boxes. Has no time.3¢ per image
image/graphicA screenshot, document, slide, or chart. Lists its parts in reading order, with bounding boxes.3¢ per image

A failed job is never charged. The same file analyzed again as the same type is free. Pricing has the minimums, the credit packs, and the limits.

What people build with it

We built AnalyzeMedia to enable agentic video editing. An agent reads the files for a folder of clips and finds the usable segments, the people in frame, the moments when they look at the camera, and the silences. The agent then cuts the video without watching it. The same files support other uses.

The output is an open format

The API returns the analyzemedia format, version 0.1: one JSON file that sits next to the original and describes it. The format is public. Any program can read a file, and any program that can measure and describe media can write one.

Every value says how it was found

Measured from the bytes, or observed by a model. The file records which, field by field. No field holds an opinion.

Bound to the original

The file carries the original's hashes, so a reader knows it describes this file and not a re-encode with the same name.

Documented field by field

What a sidecar is, the six types, and how to write one are in the docs.

Start with $5 of credit

Enough for 25 minutes of video. No card needed to try it. Or drop files on the Mac app and let it call the API for you.