> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Approve plan suggestion set

> Accept a whole plan's budget transfer

`POST /api/v2/buyer/plan-suggestion-sets/:planSuggestionSetId/approve`

Approves the entire set — every media buy it moves budget between. There is no
per-media-buy approval: the members are two sides of one transfer, so approving
part of it would either create budget the plan never freed or strand budget it
did. See [plan suggestion sets](/v2/buyer/campaigns/plan-suggestion-sets) for why.

<Warning>
  Only a set in `AWAITING_APPROVAL` can be approved. A set that has since been
  superseded by a newer run, expired because one of its media buys changed, or
  already been decided returns `409` — the decision is refused rather than applied
  to a recommendation that no longer describes your campaign.
</Warning>

## Request

```bash theme={null}
curl -X POST https://api.interchange.io/api/v2/buyer/plan-suggestion-sets/77/approve \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
```

No request body. Approval takes no reason — only
[rejection](/v2/buyer/campaigns/tasks/reject-plan-suggestion-set) does. A body
sent here is ignored rather than rejected.

## Parameters

| Field                 | Type   | Required | Notes                                                                    |
| --------------------- | ------ | -------- | ------------------------------------------------------------------------ |
| `planSuggestionSetId` | string | Yes      | Set id (path parameter) — digits only, no leading zero, up to 18 digits. |

## Response

```json theme={null}
{
  "planSuggestionSetId": "77",
  "status": "APPROVED"
}
```

The approval is recorded against every member suggestion at once, so the set and
its members can never disagree about whether the transfer was accepted.

## Errors

| Status | When                                                                                     |
| ------ | ---------------------------------------------------------------------------------------- |
| `404`  | No such set, or it belongs to another account.                                           |
| `409`  | The set is not in `AWAITING_APPROVAL` — already decided, superseded, expired, or parked. |
| `400`  | Malformed set id.                                                                        |
