Start free

Leap API

Veo 3.1 APIGoogle's model, through Leap

Google's highest-quality video model, with sound. One Leap key and one balance run it and every other model, priced per call in dollars.

  • One key for every model
  • Every call quoted first
  • A failed call costs nothing
curl https://api.tryleap.ai/v1/generations \  -H "x-api-key: $LEAP_API_KEY" \  -H "content-type: application/json" \  -H "prefer: wait=60" \  -d '{    "model": "google/veo-3.1",    "input": {      "prompt": "A heron lands on a still lake at dawn",      "aspect_ratio": "16:9",      "duration": 4,      "audio": false    }  }' # Video often outlasts the wait and answers "queued" or "running".# Put its "id" in GENERATION_ID and read it again until it is done:# curl https://api.tryleap.ai/v1/generations/$GENERATION_ID -H "x-api-key: $LEAP_API_KEY"

Set LEAP_API_KEY and send it. With prefer: wait=60 the answer holds the result when the call finishes within a minute; a longer one is read again by its ID.

Model ID
google/veo-3.1
Price per call
$0.88 to $3.52
This call
A 4-second clip without sound costs $0.88.
Free to start
The $2 welcome credit covers two calls like it.

What it makes

Made with Veo 3.1

Real Veo 3.1 runs on Leap. Each one passed Leap's media quality check before it was shown.

  • Nine years, made on Leap

    “Static camera, then a very slow push-in. The seated older man looks up at his brother and says in a low, rough voice with a Puerto Rican New York accent: "Nine years, Tito. And you walk in here like it's Sunday." The standing man swallows, rain dripping off his coat, and answers quietly: "I'm not asking for nothing. Just let me sit down." The seated man holds his gaze for a long moment, then slowly slides over on the red vinyl bench to make room. Sound: rain on the window, a refrigerator hum, a train rumbling past outside, a spoon clinking. No music.”

  • KOLO, shot 5, made on Leap

    “She holds the plain terracotta espresso maker in both hands the whole time; it stays exactly the same smooth cylinder with a chrome plunger and no handle. She says in a soft Galway accent: "My grandson sent me this. I'm a tea woman." She presses the plunger, sips from the little clear cup, pauses, and says: "Oh. Oh, that's very good. Don't tell him." Static camera on the counter. Sound: kitchen ambience, a clock ticking. No music.”

  • KOLO, shot 3, made on Leap

    “He whispers to the camera so he won't wake the kids: "Kids are still asleep. Real espresso, no fire, no cord." He pumps it, takes a sip from the little cup, closes his eyes and whispers: "Yeah. That's the one." Handheld selfie. Sound: birdsong, lake lapping, his whisper. No music.”

  • Nine years, a real run on Leap

    Nine years

  • The umbrella gives up first, a real run on Leap

    The umbrella gives up first

  • Sister, pull over, a real run on Leap

    Sister, pull over

The answer

What comes back

A generation. Check status first: succeeded has the file in output, a signed link that works for 24 hours, so download what you keep. failed has error and failure_cause, and costs nothing. usage.cost_usd is what the call was charged.

200 OK, trimmed
{  "id": "gen_...",  "object": "generation",  "model": "google/veo-3.1",  "status": "succeeded",  "output": [    {      "type": "video",      "url": "https://api.tryleap.ai/files/..."    }  ],  "error": null,  "usage": {    "cost_usd": "0.88"  }}

Your own photo

Start from an image

Upload the image to POST /v1/files and pass the ID it returns in first_frame. Inputs take file IDs, not URLs. Files and uploads covers video and sound.

curl, with jq
# Upload the photo (PNG, JPEG or WebP, up to 4 MB) and keep its ID.FILE_ID=$(curl -s "https://api.tryleap.ai/v1/files?filename=photo.jpg" \  -H "x-api-key: $LEAP_API_KEY" \  -H "content-type: image/jpeg" \  --data-binary @photo.jpg | jq -r .id) # Then run the model with it.jq -n --arg file "$FILE_ID" '{  "model": "google/veo-3.1",  "input": {    "prompt": "A heron lands on a still lake at dawn",    "aspect_ratio": "16:9",    "duration": 4,    "audio": false,    "first_frame": $file  }}' \  | curl https://api.tryleap.ai/v1/generations \    -H "x-api-key: $LEAP_API_KEY" \    -H "content-type: application/json" \    -H "prefer: wait=60" \    -d @- # Still "queued" or "running" after the wait? Read it again by its "id".

Inputs

What Veo 3.1 takes

Only prompt is needed; everything else has a default. The same schema is public, with no key, at api.tryleap.ai/v1/public/models/google/veo-3.1.

Promptprompt
Text, up to 4,000 characters, required
First framefirst_frame
An imageAn image the video starts from. It is cropped to the video's shape.
Aspect ratioaspect_ratio
16:9, 9:16. Default: 16:9
Durationduration
4, 6, 8 s. Default: 8 s
Resolutionresolution
720p, 1080p. Default: 1080p
Soundaudio
On or off. Default: onGenerate dialogue, effects and music with the video.

Pricing

Price per call

An 8-second clip with sound costs $3.52. That is more than the $2 welcome credit, which covers two of the cheapest call, a 4-second clip without sound at $0.88. Prices are the provider's list price plus 10%, read from the catalog, and a quote gives the exact price of any input for free.

Veo 3.1 and its family

A free quote
curl https://api.tryleap.ai/v1/quotes \  -H "x-api-key: $LEAP_API_KEY" \  -H "content-type: application/json" \  -d '{    "model": "google/veo-3.1",    "input": {      "prompt": "A heron lands on a still lake at dawn",      "aspect_ratio": "16:9",      "duration": 4,      "audio": false    }  }'

How it works

How the Veo 3.1 API works

Every model takes the same request, a model ID and its input, and results, prices, failures and limits work the same way for all of them.

  • Wait for it, or hear when it ends

    prefer: wait=60 holds the request until the result is ready, for up to a minute. A longer run is read again by its ID, or a signed webhook tells your server when it ends.

    prefer: wait=60 / "webhook": "https://..."

    In the docs
  • Failed calls cost nothing

    The price is held when a call starts and charged only if it succeeds. A failed or refused call comes back with its failure_cause, and the hold is released.

    "status": "failed" / "failure_cause": "provider_refused"

    In the docs
  • The price before the call

    POST /v1/quotes takes the same body as a generation and returns its exact price, with the input checked, for free. Every result carries what it was charged.

    POST https://api.tryleap.ai/v1/quotes / "cost_usd"

    In the docs
  • Rate limits

    600 requests a minute per API key and 300 per IP address. A 429 carries Retry-After with the seconds to wait.

    RateLimit-Remaining / Retry-After

    In the docs
  • Safe retries

    Send an idempotency key and a retry after a dropped connection returns the same generation instead of starting a second one.

    idempotency-key: <uuid>

    In the docs
  • Batches

    POST /v1/batches starts up to 50 calls in one request, priced and held together, so either all start or none do.

    POST https://api.tryleap.ai/v1/batches

    In the docs

MCP

Or let your agent call it.

Leap's MCP server lets Claude Code, Claude, VS Code and other MCP clients run Veo 3.1, read its inputs and fetch the result, on your balance. Signing in happens in the browser, so there is no key to paste.

Add Leap to Claude Code
claude mcp add --transport http leap https://app.tryleap.ai/api/mcp

Claude Code signs you in through the browser the first time it calls Leap.

Teach your coding agent the Leap API
curl -fsSL https://www.tryleap.ai/install.sh | sh

Installs the Leap skill for every coding agent it finds: which endpoint to call, how to read a model's inputs, when to wait and when to poll.

Questions

Veo 3.1 API questions

How much does the Veo 3.1 API cost?
An 8-second clip with sound costs $3.52. By length and sound, a call costs $0.88 to $3.52. That is the provider's list price plus 10%, the same as in the studio. POST /v1/quotes prices any input for free before you run it.
Can I try the Veo 3.1 API for free?
Yes. Sign up with a Gmail, Outlook or work address and your workspace starts with $2 of credit, no card needed. An 8-second clip with sound costs $3.52. That is more than the $2 welcome credit, which covers two of the cheapest call, a 4-second clip without sound at $0.88.
Do I pay for calls that fail?
No. The price is held when a call starts and charged only if it succeeds. A call that fails, or that the model's safety filter refuses, comes back with status "failed" and a failure_cause, and the hold is released. Before a workspace's first top-up, video calls wait for one after 6 have ended without a charge; images keep running.
Is this Google's own API?
No. Leap is a separate service: it sends your call to Google's model and gives you what it makes, so you need no Google account. One Leap key runs Veo 3.1 and every other model in the catalog, from one balance.
What are the rate limits?
600 requests a minute per API key and 300 a minute per IP address. A batch starts up to 50 calls in one request. A 429 says how long to wait in its Retry-After header.
Can an AI agent call it?
Yes. Leap's MCP server lets Claude Code, Claude, VS Code and other MCP clients find Veo 3.1, read its inputs, run it and fetch the result on your balance. The client signs you in through the browser, so there is no key to paste.

Build with Veo 3.1.

Start with $2 of credit, no card. The same key runs every model on Leap.

Get an API key