# Submit a Draft

`draft` → `awaiting_quorum`, once valid. From then on the version never changes.

## Overview

- By the draft's author only (`403` `POLICY_SET_NOT_AUTHOR`), and only a draft (`409` `POLICY_SET_NOT_DRAFT`).
- Validated first: with an error, `422` `POLICY_SET_INVALID` lists the errors and the set stays a draft.
- `200` with the set: `submittedAt`, and `requiredApprovals` — `1` when another administrator must publish it, else `0` ([Who Publishes](https://docs.aureahub.com/docs/guide-policy-sets.md)).

## Endpoint

### `POST /v1/policy-sets/{setId}/submit`

Authentication: bearer token required.

Submits a valid draft for publication. No body.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `setId` | string | yes | The draft's id |

**Responses**

`422` Not valid

```json
{
  "statusCode": 422,
  "error": "ValidationError",
  "message": "The policy set is not valid",
  "details": {
    "code": "POLICY_SET_INVALID",
    "errors": [
      { "code": "APPROVER_UNKNOWN", "position": 0, "message": "Rule 0 names 1 approver(s) that are not users of the tenant." }
    ]
  }
}
```

---

Web version: https://docs.aureahub.com/#policy-set-submit
