Developers
video97 exposes its AI media tools as an MCP server and a REST API. Generate images, video, voice-over and music, transcribe audio and search the web — from Claude, Codex or any script. Every call uses your own api14 key, so you pay api14 directly and your key is never stored on video97.
These are the stateless, api14-backed tools. The in-editor tools (cutting, timeline, layout) run in your browser with your project and are not part of this API.
Authentication
Send your api14 key as a bearer token on every request. Get a key at api14.com.
Authorization: Bearer sk-api14-YOUR_KEYThe key is forwarded to api14 on that one request and never written to video97’s database or logs.
MCP server
Endpoint: https://video97.com/api/mcp (Model Context Protocol over HTTP, JSON-RPC). Add it to any MCP client — for example Claude Desktop’s claude_desktop_config.json:
{
"mcpServers": {
"video97": {
"url": "https://video97.com/api/mcp",
"headers": { "Authorization": "Bearer sk-api14-YOUR_KEY" }
}
}
}The client calls initialize, then tools/list and tools/call. Start with list_models to see the model ids your key can use, then pass one to the other tools.
REST API
Base URL: https://video97.com/api/v1. Requests and responses are JSON; generated files come back as base64 in a media array.
curl https://video97.com/api/v1/images \
-H "Authorization: Bearer sk-api14-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "model": "qwen/qwen-image-2.1-turbo", "prompt": "a red bicycle on a beach at sunrise", "n": 1 }'Tools and endpoints
The same tools are available over MCP (by name) and REST (by path):
list_models
GET /api/v1/modelsList the api14 models available to your key, by kind: text, image, video, speech, transcription, music, embedding. Free, no generation.
- kindall | image | video
- Which catalog (default all / text models)
generate_image
POST /api/v1/imagesCreate one or more images from a text prompt with an api14 image model. Returns the images (base64 PNG).
- model*string
- api14 image model id, e.g. qwen/qwen-image-2.1-turbo
- prompt*string
- What to draw
- ninteger
- How many images (default 1)
- aspect_ratiostring
- e.g. 1:1, 16:9, 9:16
generate_speech
POST /api/v1/audio/speechTurn text into speech (voice-over) with an api14 TTS model. Returns the audio (base64). For Gemini TTS use a Gemini voice (e.g. Sulafat, Puck); otherwise a standard voice (e.g. alloy).
- model*string
- api14 speech model id, e.g. google/gemini-3.8-flash-tts
- input*string
- The words to speak
- voice*string
- Voice name
- instructionsstring
- How to say it (tone, pace)
generate_music
POST /api/v1/audio/musicCreate an instrumental music track from a description (mood, genre, instruments, length) with an api14 music model (e.g. google/lyria-3-pro-preview). Returns the audio (base64).
- model*string
- prompt*string
- The music to make
create_video
POST /api/v1/videosStart an AI video generation job (asynchronous). Returns a job id; poll it with get_video. Videos usually take a minute or more.
- model*string
- api14 video model id, e.g. alibaba/wan-3.0
- prompt*string
- durationinteger
- resolutionstring
- e.g. 720p, 1080p
- aspect_ratiostring
get_video
GET /api/v1/videos/{id}Check an AI video job started with create_video. While it runs, returns its status. When it is completed, returns the video (base64 MP4).
- id*string
- The job id from create_video
transcribe
POST /api/v1/audio/transcriptionsTranscribe speech from an audio clip (base64) to text with timestamps, using an api14 transcription model. Send the audio as base64 (audio_b64) with its format; no URL is fetched.
- model*string
- api14 transcription model id, e.g. openai/gpt-4o-mini-transcribe
- audio_b64*string
- The audio file, base64-encoded (up to ~20 MB)
- formatstring
- Audio format: wav, mp3, m4a, ogg, webm, flac (default wav)
- languagestring
- ISO language code, e.g. en, tr (optional)
web_search
POST /api/v1/web-searchAnswer a question from the live web (api14 web plugin): a short factual answer with the source links it is based on.
- model*string
- api14 text model id to answer with
- query*string
- The question to look up
- resultsinteger
- How many web results to read (default 3)
* required. Model ids come from list_models; video generation is asynchronous (create_video then get_video).
Questions? Contact.