---
title: "Validate Protocol Endpoint"
method: POST
path: "/protocols/validate"
tags: ["protocols"]
---

# Validate Protocol Endpoint

`POST /protocols/validate`

## Request

- Base URL: `https://api.ionworks.com`
- URL: `https://api.ionworks.com/protocols/validate`
- Auth: none declared

Validate a protocol dictionary.

Runs the full backend validation and returns the result plus advisory lint
findings. A protocol can be valid and still carry warnings: operator and
end-type mistakes no longer reject it, since one imported from a real
cycler file may legitimately contain them. They come back in ``warnings``
so the author sees the problem without being blocked.

Parameters
----------
body : ValidateProtocolRequest
    Request containing the protocol dict to validate

Returns
-------
dict
    ``{"valid": true, "warnings": [...]}`` on success, or
    ``{"valid": false, "error": "..."}`` on failure. ``warnings`` is
    omitted when there are none.

## Request body

- ValidateProtocolRequest: Request body for validating a protocol.
  - `protocol` union, required: Protocol as a YAML-format dictionary with 'steps' and optional 'global', 'safety_limits', or a YAML string.
    - object
    - string

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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