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

# Save notification preferences

> Save your personal email subscription using a Clerk-verified address, selected websites and categories.

`save_notification_preferences`

Save your personal email subscription using a Clerk-verified address, selected websites and categories. Uses optimistic revision checks. Cannot clear provider suppression.

<Note>Available in the deployed MCP and HTTP bundle. Confirm access and inputs with your connected catalog. Workspace scopes and enabled providers still apply.</Note>

| Access                               | Behavior                                                   |
| ------------------------------------ | ---------------------------------------------------------- |
| `events:read`, `notifications:write` | Writes or admits work; can change or remove existing state |

This operation changes saved state. Review its inputs and retry behavior before calling.

## Example request

Connect through [MCP](/guides/connect-mcp), [CLI](/guides/connect-cli), or [HTTP](/guides/connect-http). Replace example identifiers with records from your workspace.

<CodeGroup>
  ```json MCP theme={null}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "save_notification_preferences",
      "arguments": {
        "expectedRevision": 1,
        "enabled": true,
        "email": "owner@example.com",
        "frequency": "weekly",
        "timezone": "UTC",
        "hour": 9,
        "weekday": 3,
        "categories": [
          "placements",
          "destinations"
        ],
        "projectIds": null
      }
    }
  }
  ```

  ```bash CLI theme={null}
  agentlinkops call save_notification_preferences --args '{"expectedRevision":1,"enabled":true,"email":"owner@example.com","frequency":"weekly","timezone":"UTC","hour":9,"weekday":3,"categories":["placements","destinations"],"projectIds":null}'
  ```

  ```bash HTTP theme={null}
  curl "$AGENTLINKOPS_API_URL/v1/commands/save_notification_preferences" \
    -H "Authorization: Bearer $AGENTLINKOPS_API_KEY" \
    -H 'Content-Type: application/json' \
    --data '{"expectedRevision":1,"enabled":true,"email":"owner@example.com","frequency":"weekly","timezone":"UTC","hour":9,"weekday":3,"categories":["placements","destinations"],"projectIds":null}'
  ```
</CodeGroup>

## Returned result

Illustrative data validated against the documented response schema. IDs and dates are examples, not a live account capture. MCP returns this data in `structuredContent` and in a text content block; generic HTTP and CLI return the JSON result directly.

```json theme={null}
{
  "revision": 2,
  "email": "owner@example.com",
  "enabled": true,
  "frequency": "weekly",
  "timezone": "UTC",
  "hour": 9,
  "weekday": 3,
  "categories": [
    "placements",
    "destinations"
  ],
  "projectIds": null,
  "suppressedReason": null,
  "nextAt": "2026-09-14T09:00:00.000Z",
  "deliveryAvailable": false
}
```

## Input fields

Omit optional fields when you do not want to supply them. Null is accepted only where listed. Unknown input properties are rejected.

| Field              | Type         | Presence | Meaning and constraints                                                                                                                                                                                                                                |
| ------------------ | ------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `expectedRevision` | integer      | Required | Revision last read by the caller; mismatches reject concurrent updates. minimum: 0; maximum: 9007199254740991                                                                                                                                          |
| `enabled`          | boolean      | Required | The enabled value; allowed values and bounds are specified in this schema.                                                                                                                                                                             |
| `email`            | string       | Required | Email address to bind an invitation to; AgentLinkOps does not send the invitation. format: "email"; maxLength: 254; pattern: "^(?:\[A-Za-z0-9\_'+\\-]+\\.)*\[A-Za-z0-9\_'+\\-]*\[A-Za-z0-9\_+-]@(?:\[A-Za-z0-9]\[A-Za-z0-9\\-]\*\\.)+\[A-Za-z]\{2,}\$" |
| `frequency`        | string       | Required | The frequency value; allowed values and bounds are specified in this schema. values: "immediate", "daily", "weekly"                                                                                                                                    |
| `timezone`         | string       | Required | The timezone value; allowed values and bounds are specified in this schema. minLength: 1; maxLength: 100                                                                                                                                               |
| `hour`             | integer      | Required | The hour value; allowed values and bounds are specified in this schema. minimum: 0; maximum: 23                                                                                                                                                        |
| `weekday`          | integer      | Required | The weekday value; allowed values and bounds are specified in this schema. minimum: 0; maximum: 6                                                                                                                                                      |
| `categories`       | array        | Required | The categories value; allowed values and bounds are specified in this schema. minItems: 1; maxItems: 4                                                                                                                                                 |
| `projectIds`       | array / null | Required | Accessible project IDs. Where nullable, null grants all projects.                                                                                                                                                                                      |

### Validation and omitted values

All fields are required; supply the complete preference set with expectedRevision from the last read. The email must be verified in the Clerk account. projectIds:null means every accessible website; the workspace category requires unrestricted administrator access.

Saving never clears a provider suppression. Pending summaries for an older revision are cancelled before sending.

## Output fields

Fields inside optional or nullable parents apply only when that parent exists. [Common schema conventions](/reference/schemas) explain evidence states, empty lists and extensions.

| Field               | Type          | Presence | Meaning and constraints                                                                                         |
| ------------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `revision`          | number        | Required | Optimistic concurrency revision; supply it as expectedRevision on the next write.                               |
| `email`             | string        | Required |                                                                                                                 |
| `enabled`           | boolean       | Required |                                                                                                                 |
| `frequency`         | string        | Required | values: "immediate", "daily", "weekly"                                                                          |
| `timezone`          | string        | Required |                                                                                                                 |
| `hour`              | number        | Required |                                                                                                                 |
| `weekday`           | number        | Required |                                                                                                                 |
| `categories`        | array         | Required |                                                                                                                 |
| `projectIds`        | array / null  | Required |                                                                                                                 |
| `suppressedReason`  | string / null | Required | Provider bounce, complaint or suppression reason that stopped delivery; null when the recipient is deliverable. |
| `nextAt`            | string / null | Required | UTC timestamp of the next scheduled summary; null while notifications are disabled.                             |
| `deliveryAvailable` | boolean       | Required | True only when this environment has email delivery configured; saved preferences never imply delivery.          |

[Download input schema](/schemas/save_notification_preferences.input.json) · [Download output schema](/schemas/save_notification_preferences.output.json)

## Errors and retries

This command is not annotated idempotent. After a timeout, inspect existing state before repeating a write.

See [error recovery](/reference/errors) for status, scope, cooldown, cursor and retry handling. Unknown observations are result data and do not establish loss.

## HTTP resource routes

This operation has no separate resource alias. Use its generic command route in a matching environment.

## Continue

[test\_notification\_email](/reference/commands/test_notification_email) · [get\_notification\_preferences](/reference/commands/get_notification_preferences)

Follow the [related workflow](/guides/connect-http), inspect [capability status](/capability-status), or return to the [command index](/reference/index).
