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 header
Authorization: Bearer sk-api14-YOUR_KEY

The 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:

MCP client configuration
{
  "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.

Example request with curl
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/models

List 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/images

Create 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/speech

Turn 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/music

Create 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/videos

Start 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/transcriptions

Transcribe 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-search

Answer 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.