---
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 — What renders but not as written, and where: a setting the render ignores, like a video codec on an mp3, or a font family it cannot supply and draws in Inter instead. 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 — What renders but not as written, and where: a setting the render ignores, like a video codec on an mp3, or a font family it cannot supply and draws in Inter instead. 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-27** `421a5a241a64` — 1 breaking, 1 info
  - added `subschema #1, subschema #2` to the `data` response property `oneOf` list for the response status `200`
  - removed `subschema #1, subschema #2` from the `data` response property `oneOf` list for the response status `200`
- **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/421a5a241a64?raw)
