> ## Documentation Index
> Fetch the complete documentation index at: https://www.tryleap.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Leap's API is at https://api.tryleap.ai. Send the key in the x-api-key header or as Authorization: Bearer; keys start with leap_.
> Take model IDs and input schemas from GET /v1/models/{creator}/{name}, or from https://api.tryleap.ai/v1/public/models without a key. Never guess an input field: unknown fields are a 400.
> Model inputs take uploaded file IDs (file_...), never URLs. A kept character's ID (chr_..., POST /v1/characters) goes wherever an image file does and keeps the character the same across runs.
> To give a coding agent the whole API, install the Leap skill: curl -fsSL https://www.tryleap.ai/install.sh | sh
> To make media from ChatGPT, Claude or another MCP client without code, connect Leap's MCP server at https://app.tryleap.ai/api/mcp; see https://www.tryleap.ai/docs/mcp.
> The full OpenAPI 3.1 spec is at https://www.tryleap.ai/docs/openapi.json.

# Zapier and Make

> Run Leap models from a Zap or a Make scenario with plain HTTP requests: start a run, and get its result back on a webhook when it ends.

Zapier and Make can call Leap's API with the HTTP steps they already have, so there's nothing to install. The recipe is the same in both: one step starts a run and names a webhook, and a second flow catches the run's event when it ends and passes the file on. Video takes a minute or more, longer than either tool holds a request open, so the webhook is the reliable way back.

You need a [Leap API key](https://www.tryleap.ai/docs/authentication.md) with credit on its workspace. Keys run on paid credit: add \$5 on the [key page](https://app.tryleap.ai/go/api?utm_source=tryleap\&utm_medium=docs\&utm_campaign=%2Fdocs%2Fintegrations%2Fzapier-make\&utm_content=key) before the first run.

## Zapier

Webhooks by Zapier is on Zapier's paid plans.

**1. Make the Zap that catches the result**

Create a Zap whose trigger is **Webhooks by Zapier**, **Catch Hook**, and copy its URL. Add the steps that use the result after it, such as saving the output's link (under data, object, output in the event) to Google Drive or posting it to Slack. Output links work for 24 hours, so save the file rather than the link.

**2. Start the run from your first Zap**

In the Zap that has the prompt (a new spreadsheet row, a form answer), add **Webhooks by Zapier**, **Custom Request**:

| Field | Value |
| - | - |
| Method | `POST` |
| URL | `https://api.tryleap.ai/v1/generations` |
| Headers | `Authorization`: `Bearer leap_...` and `Content-Type`: `application/json` |
| Data | the body below, with your prompt mapped in |

```json theme={"theme":"css-variables"}
{
  "model": "google/veo-3.1-fast",
  "input": { "prompt": "A heron lands on a still lake at dawn", "duration": 4 },
  "webhook": "https://hooks.zapier.com/hooks/catch/..."
}
```

Put the Catch Hook URL from the first step in `webhook`. To make a retried step safe, add the header `Idempotency-Key` with something unique to the row, such as its ID: a retry then returns the same run instead of starting a second one.

**3. Test it**

Run the first Zap's test. The Catch Hook receives a `generation.succeeded` event, or `generation.failed` with the reason (a failed run isn't charged), usually within a few seconds for an image and a minute or two for a clip.

To check that an event really came from Leap, catch it with **Catch Raw Hook** instead: it keeps the headers and the raw body that [verifying the signature](https://www.tryleap.ai/docs/webhooks.md#verify-the-signature) needs.

## Make

**1. Make the scenario that catches the result**

Start a scenario with **Webhooks**, **Custom webhook**, and copy its address. Turn on **Get request headers** if you'll verify signatures. Add the modules that use the result, such as **HTTP**, **Get a file** on `data.object.output[].url`, then Google Drive or Dropbox.

**2. Start the run**

In the scenario that has the prompt, add **HTTP**, **Make a request**:

| Field | Value |
| - | - |
| URL | `https://api.tryleap.ai/v1/generations` |
| Method | `POST` |
| Headers | `Authorization`: `Bearer leap_...` |
| Body | JSON: the same body as for Zapier, with the custom webhook's address in `webhook` |

Store the key in a keychain rather than in the module. Add an `Idempotency-Key` header as above.

## When you don't need the webhook

Most images finish in seconds. For an image model, send `Prefer: wait=20` as a header and leave out `webhook`: the answer then holds the finished run, with the file in `output[0].url`, in the same step. A run still going when the wait ends comes back `queued` or `running`; read it again with `GET https://api.tryleap.ai/v1/generations/{id}`.

## Pick the model

Every model takes the same request; only `model` and `input` change. Each model's inputs are public at `https://api.tryleap.ai/v1/public/models/{id}`, such as [google/nano-banana](https://api.tryleap.ai/v1/public/models/google/nano-banana), and [Models](https://www.tryleap.ai/docs/models.md) explains them. Files go in by ID: upload one with an HTTP step first, as [Files](https://www.tryleap.ai/docs/files.md) shows.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.