---
title: "Validate compose params"
method: POST
path: "/compose/validate"
tags: ["Compose"]
---

# Validate compose params

`POST /compose/validate`

Check the `params` of a compose job without rendering anything. Free, and nothing is stored. Runs the same checks a submit runs, plus the timeline checks a render would otherwise fail on. The response carries the params as a render would read them: defaults filled in, and a timeline written in an older shape rewritten into the current one.

## Request body

- object
  - `params` object, required — Exactly what you would send as `params` when creating a compose job.

## Response `200`

The verdict. Branch on `valid`.

- object
  - `data` union, required
    - object
      - `valid` true, required
      - `params` object, required
      - `upgraded` string[], required — Constructs from an older timeline shape that were rewritten into the current one. Empty for a current timeline.
      - `warnings` object[], required — Settings the render will ignore, like a video codec on an mp3, and where they are. They do not stop a submit.
        - `path` union[], required — Where in the params the problem is, as keys and indexes. Empty when it concerns the timeline as a whole.
          - union
            - string
            - number
        - `message` string, required — What is wrong and how to fix it.
    - object
      - `valid` false, required
      - `problems` object[], required
        - `path` union[], required — Where in the params the problem is, as keys and indexes. Empty when it concerns the timeline as a whole.
          - union
            - string
            - number
        - `message` string, required — What is wrong and how to fix it.
      - `params` object, nullable, required — Null when the document did not parse.
      - `upgraded` string[], required — Constructs from an older timeline shape that were rewritten into the current one. Empty for a current timeline.
      - `warnings` object[], required — Settings the render will ignore, like a video codec on an mp3, and where they are. They do not stop a submit.
        - `path` union[], required — Where in the params the problem is, as keys and indexes. Empty when it concerns the timeline as a whole.
          - union
            - string
            - number
        - `message` string, required — What is wrong and how to fix it.

## Other responses

- `400` — The body is not JSON with a `params` object
- `401` — Unauthorized

## Changes

- **2026-09-24** `14f92fdd491f` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rendobar/apis/rendobar-api/changes/compose/validate/post.md)

---

[API](https://skmtc.dev/rendobar/apis/rendobar-api.md) · [All operations](https://skmtc.dev/rendobar/apis/rendobar-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rendobar/apis/rendobar-api/revisions/fc5ca5f06d15?raw)
