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

> ## Agent Instructions
> Keep the API key in an env var (RENDOBAR_API_KEY), never in chat or committed code.
> Job types change, so fetch the live catalog from GET https://api.rendobar.com/jobs/types rather than relying on memory.
> The full integration prompt for coding agents is at https://rendobar.com/prompts/integrate.md.

# Compose pricing and validation

> See what a compose render costs, one price per minute of output video on every plan with a 15-second minimum, and check a timeline for free before you render.

Compose bills per second of the video you get back, not per second of compute. The rate is \$0.04 per minute of output video, on every plan and for every video your plan can render. You can check the price before you render.

Each render bills at least 15 seconds, which is 1 cent. You pay from your [credit balance](/docs/docs/concepts/credits). The \$5 signup credit covers 125 minutes of compose output.

| Render | Price |
| - | - |
| 10 s (bills the 15 s minimum) | \$0.01 |
| 30 s | \$0.02 |
| 2 min | \$0.08 |
| 10 min | \$0.40 |

Frame size and animated graphics do not change the price. A 2-minute render costs the same at 720p or 4K. Animated text and 3D turns render up to 1080p at 30 fps, and adding them does not change the price.

## What each plan renders

Plans differ in what they can render. The per-minute price is the same.

| Plan | Renders up to |
| - | - |
| Free (pay-as-you-go) | 1080p at 30 fps, animated graphics included |
| Pro | 1440p at 30 fps. Animated graphics up to 1080p at 30 fps |
| Studio | 4K at 60 fps. Animated graphics up to 1080p at 30 fps |
| Enterprise | Animated graphics above 1080p or 30 fps, at a contract rate. Email `hello@rendobar.com` |

Animated graphics are:

* text that enters or leaves a letter, word or line at a time
* text with a `blur` or `scale` entrance, or any exit
* clips turned in 3D with `rotateX` or `rotateY`

A `fade` or a slide of a whole title, a Lottie animation and a 2D transform do not count. Frame size counts by pixels, so a portrait 1080x1920 video counts as 1080p.

Pro costs \$9 a month and includes \$5 of monthly credit. Studio costs \$29 a month and includes \$20 of monthly credit. Their compose discount is a 25% bonus on every credit purchase, so \$25 buys \$31.25 of credit. See [credits and billing](/docs/docs/concepts/credits#plans).

A video above your plan returns `403 PLAN_LIMIT` at submit, before anything renders or is charged. `upgradeTo` in `error.details` names the plan that can render it, or is `null` when only an enterprise plan can. Only video outputs (`mp4`, `webm`, `gif`) are checked. A `jpg`, `png` or `mp3` output renders on every plan.

`GET /account/capabilities` returns your plan's limits: `composeMaxPixels` and `composeMaxFps` for a plain edit, and `composeAnimatedMaxPixels` and `composeAnimatedMaxFps` for one with animated graphics.

## Failed renders

You pay nothing for a render that fails on Rendobar's side, or for a job that never started.

If the failure may come from your input, such as the render tool exiting on a bad file, you pay for the compute the job used at 2x. `GET /jobs/{id}` returns the job's `cost` once it is billed, so you can see what a failed render was charged.

## Check a timeline before you render

`POST /compose/validate` parses a timeline the same way a render does, for free. Call it from your code before you submit. Agents can use the MCP tool `validate_compose`.

```ts SDK theme={null}
const check = await client.compose.validate(params);
if (!check.valid) console.error(check.problems);
else console.log(check.price); // { perMinuteUsd: 0.04, minSeconds: 15 }
```

```bash cURL theme={null}
curl -X POST https://api.rendobar.com/compose/validate \
  -H "Authorization: Bearer rb_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "params": { "schemaVersion": 1, "output": { "format": "mp4", "size": "1080p" }, "timeline": { "tracks": [{ "clips": [{ "asset": { "type": "video", "src": "https://example.com/a.mp4" } }] }] } } }'
```

The response contains:

| Field | Holds |
| - | - |
| `valid` | Whether the timeline would be accepted |
| `problems` | What is wrong, each with the path of its field. A plan limit appears at `["output"]`, with `upgradeTo` set to `"pro"` or `"studio"`, or `null` when only an enterprise plan renders it. |
| `params` | The timeline as the engine reads it, with every default filled in |
| `upgraded` | Anything written for an older API version and upgraded to the current shape. Old timelines keep rendering. |
| `warnings` | Settings the render will ignore or adjust, such as a transition longer than a clip, or a font that falls back |
| `price` | `{ "perMinuteUsd": 0.04, "minSeconds": 15 }` |

The charge is the video's length in minutes times `perMinuteUsd`, counted by the second, and never less than `minSeconds`.

`GET /compose/effects` lists every built-in effect with its settings. `GET /compose/effects/engine` lists every filter an `engine` entry can name. Build from these live lists instead of a copy. In the SDK, use `client.compose.effects()` and `client.compose.engineEffects()`.

All other job types, [FFmpeg](/docs/docs/jobs/ffmpeg) included, bill per second of compute. See [how a job is priced](/docs/docs/concepts/credits#how-is-a-job-priced).

## See also

* [Output](/docs/docs/jobs/compose/output): formats, size presets, frame rate and quality
* [Credits and billing](/docs/docs/concepts/credits): balance, credit packs, and when the debit lands
* [Plan limits](/docs/docs/support/limits): render time, file-size and compose frame caps per plan


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