> ## 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.

# Update notification preferences

> Replace the authenticated user's notification opt-ins

`PUT /api/v2/notification-preferences`

Sets the notification opt-in preferences for the authenticated user. This **replaces** all existing opt-ins — send the full desired set on every call.

## Request

```bash curl theme={null}
curl -X PUT https://api.interchange.io/api/v2/notification-preferences \
  -H "Authorization: Bearer $SCOPE3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "optIns": [
      { "notificationType": "campaign.unhealthy", "channel": "email" },
      { "notificationType": "campaign.completed", "channel": "in_app" },
      { "notificationType": "creative.rejected", "channel": "email" }
    ]
  }'
```

## Parameters

| Field                       | Type  | Required | Notes                                                                                                                                                                |
| --------------------------- | ----- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `optIns`                    | array | Yes      | Full replacement set of opt-ins (max 200). Send an empty array to clear all                                                                                          |
| `optIns[].notificationType` | enum  | Yes      | Event type to opt into — e.g. `campaign.created`, `campaign.unhealthy`, `creative.approved`, `media_buy.updated`, `optimization.suggestion_received`, `system.error` |
| `optIns[].channel`          | enum  | Yes      | `email` or `in_app`                                                                                                                                                  |

## Response

```json theme={null}
{
  "optIns": [
    { "notificationType": "campaign.unhealthy", "channel": "email" },
    { "notificationType": "campaign.completed", "channel": "in_app" },
    { "notificationType": "creative.rejected", "channel": "email" }
  ]
}
```

The response echoes the opt-ins now in effect.

## Errors

* `400 VALIDATION_ERROR` — unknown `notificationType`, invalid `channel`, or more than 200 opt-ins.
* `401 UNAUTHORIZED` — missing or invalid bearer token.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Account tasks" href="/v2/buyer/account/tasks" icon="list-check">
    All account operations
  </Card>

  <Card title="Get notification preferences" href="/v2/buyer/account/tasks/get-notification-preferences" icon="bell">
    Your current opt-ins
  </Card>
</CardGroup>
