# Delete an formation

> Deletes the formation stack and all its managed resources in reverse dependency order.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Delete an formation"}
>
</Heading>

<MethodEndpoint
  method={"delete"}
  path={"/api/v1/formations/{formation_id}"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Deletes the formation stack and all its managed resources in reverse dependency order.

A resource the platform refuses to delete on its own — most often an agent that has generation or trace history — fails the teardown with `409 FORMATION_DELETE_FAILED`, naming every blocking resource in `error.meta.failures`. Resolve the blockers (for an agent, `DELETE /api/v1/agents/{agent_id}?force=true` also removes its generations and traces, and `deletion_policy: retain` exempts it from teardown entirely) and delete the formation again.

A refusal the platform can foresee is found by a pre-flight, before the first delete: nothing is removed, and the formation stays `active` and intact for the retry. An unforeseeable error surfaces mid-teardown instead, where resources deleted before the blocker stay deleted and the formation is left in `delete_failed`. The error message states which happened.

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

<ParamsDetails
  {...require("./delete-formation.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./delete-formation.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./delete-formation.StatusCodes.json")}
>
  
</StatusCodes>
