# Approve a request

> Page: https://docs.plotwork.dev/api/post-orgs-org-approvals-id-approve. Index of every page: https://docs.plotwork.dev/llms.txt

A new diagram is shown to the library, a new version takes the diagram's place, or the public link is made, with every check run again.

`POST /orgs/{org}/approvals/{id}/approve`

## TL;DR

| Question | Answer |
|---|---|
| What does it do? | Approve a request. |
| What does it take? | A JSON body of type [`DecideApprovalBody`](https://docs.plotwork.dev/api/schemas.md#decideapprovalbody). |
| What does it return? | Status 200 with a body of type [`ApprovalRequest`](https://docs.plotwork.dev/api/schemas.md#approvalrequest). |
| What can go wrong? | `400` the body is not valid; `401` not signed in; `403` the caller does not approve, or asked for it themselves (orgs.forbidden); a share the plan has no room for (hosting.quota_exceeded); or the request came from an origin that may not make changes; `404` no such organisation or pending request, or the request is about a diagram in a folder the caller may not use; `409` another approver decided it a moment ago, or the label no longer allows a public link (orgs.share_classified); `429` too many requests; `503` organisations are not set up on this server. Every failure uses the one error envelope. |

## What it does

A new diagram is shown to the library, a new version takes the diagram's place, or the public link is made, with every check run again. An optional comment is emailed to the publisher. Another approver than the one who asked.

## Path parameters

| Field | Type | Required | Description |
|---|---|---|---|
| `org` | `string` | yes | The organisation's id or its slug. |
| `id` | `string` | yes |  |

## Request body

The body has the type [`DecideApprovalBody`](https://docs.plotwork.dev/api/schemas.md#decideapprovalbody).

| Field | Type | Required | Description |
|---|---|---|---|
| `comment` | `string \| null` | no | An optional comment for the publisher, at most 500 characters. It is emailed to them and kept in the organisation's audit log. at least 1 character; at most 500 characters. |

## Responses

| Status | Meaning | Body |
|---|---|---|
| 200 | The request as decided. | [`ApprovalRequest`](https://docs.plotwork.dev/api/schemas.md#approvalrequest) |
| 400 | The body is not valid. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 401 | Not signed in. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 403 | The caller does not approve, or asked for it themselves (orgs.forbidden); a share the plan has no room for (hosting.quota_exceeded); or the request came from an origin that may not make changes. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 404 | No such organisation or pending request, or the request is about a diagram in a folder the caller may not use. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 409 | Another approver decided it a moment ago, or the label no longer allows a public link (orgs.share_classified). | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 429 | Too many requests. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |
| 503 | Organisations are not set up on this server. | [`ErrorResponse`](https://docs.plotwork.dev/api/schemas.md#errorresponse) |

## Response body

A 200 answer has the type [`ApprovalRequest`](https://docs.plotwork.dev/api/schemas.md#approvalrequest).

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | `string` | yes |  |
| `kind` | `"publish" \| "change" \| "share"` | yes |  |
| `status` | `"pending" \| "approved" \| "rejected" \| "expired"` | yes |  |
| `diagram` | `object \| null` | yes | The diagram as the library has it now, or null once it is gone (a rejected new diagram). |
| `diagram.id` | `string` | yes |  |
| `diagram.name` | `string \| null` | yes |  |
| `diagram.folder` | `string \| null` | yes |  |
| `diagram.classification` | `Classification` | yes | A diagram's classification label: `public`, `internal` (the default, and what a diagram published before labels reads as) or `confidential`. Confidential is never shared publicly; under "Share only diagrams labelled Public" only public is. |
| `diagram.theme` | `"light" \| "dark" \| "auto"` | yes |  |
| `requestedBy` | `object \| null` | yes | Who asked, or null for an organisation key and once the account is gone. |
| `requestedBy.userId` | `string` | yes |  |
| `requestedBy.email` | `string` | yes |  |
| `requestedAt` | `integer` | yes |  |
| `expiresAt` | `integer` | yes |  |
| `secretFindings` | `integer` | yes | How many things that look like a secret the scan found when the request was made, under the organisation's scanning options. minimum 0. |
| `reviewedBy` | `object \| null` | yes |  |
| `reviewedBy.userId` | `string` | yes |  |
| `reviewedBy.email` | `string` | yes |  |
| `reviewedAt` | `integer \| null` | yes |  |
| `comment` | `string \| null` | yes | The approver's comment, when they gave one. |

## See also

| Doc | Why |
|---|---|
| [API reference](https://docs.plotwork.dev/api/reference.md) | Every endpoint, and the error envelope |
| [Schemas](https://docs.plotwork.dev/api/schemas.md) | Every request and response type |
| [Tool reference](https://docs.plotwork.dev/mcp/tools.md) | The operations as callable tools |
