# Validate an orchestration graph

> Statically validates an orchestration graph without persisting anything. Checks that every node has its required field, node ids are unique, edges reference existing nodes, the graph is acyclic (unless it contains a loop node), and every `input_mapping` `{'var': '...'}` reference resolves to a state key written by an upstream node or seeded by `input_schema`. Returns blocking `errors` and non-blocking `warnings` (e.g. a state key only written on a conditional branch). The same `errors` checks are enforced on create and update, which fail with `400` when any error is present.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Validate an orchestration graph"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/api/v1/orchestrations/validate"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Statically validates an orchestration graph without persisting anything. Checks that every node has its required field, node ids are unique, edges reference existing nodes, the graph is acyclic (unless it contains a loop node), and every `input_mapping` `{"var": "..."}` reference resolves to a state key written by an upstream node or seeded by `input_schema`. Returns blocking `errors` and non-blocking `warnings` (e.g. a state key only written on a conditional branch). The same `errors` checks are enforced on create and update, which fail with `400` when any error is present.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails>
  
</ParamsDetails>

<RequestSchema
  {...require("./validate-orchestration.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./validate-orchestration.StatusCodes.json")}
>
  
</StatusCodes>
