> For the complete documentation index, see [llms.txt](https://docs.umbraco.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.umbraco.com/ai-in-umbraco/19.latest/management-api/settings/update.md).

# Update Settings

Update global AI settings.

Updates the global AI settings.

## Request

```http
PUT /umbraco/ai/management/api/v1/settings
```

### Request Body

{% code title="Request" %}

```json
{
    "defaultChatProfileId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "defaultEmbeddingProfileId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "classifierChatProfileId": null,
    "defaultSpeechToTextProfileId": null,
    "defaultImageGenerationProfileId": null,
    "defaultDecisionProfileId": null,
    "defaultExtractionProfileId": null,
    "disclosureNoticeMode": "Always"
}
```

{% endcode %}

### Request Properties

| Property                          | Type   | Required | Description                                                             |
| --------------------------------- | ------ | -------- | ----------------------------------------------------------------------- |
| `defaultChatProfileId`            | GUID   | No       | Default profile for chat operations                                     |
| `defaultEmbeddingProfileId`       | GUID   | No       | Default profile for embedding operations                                |
| `classifierChatProfileId`         | GUID   | No       | Optional profile for classification tasks                               |
| `defaultSpeechToTextProfileId`    | GUID   | No       | Default profile for speech-to-text operations                           |
| `defaultImageGenerationProfileId` | GUID   | No       | Default profile for image generation (experimental)                     |
| `defaultDecisionProfileId`        | GUID   | No       | Default profile for decisions (experimental)                            |
| `defaultExtractionProfileId`      | GUID   | No       | Default profile for extraction (experimental)                           |
| `disclosureNoticeMode`            | string | No       | How the AI-generated notice is shown: `Always`, `Dismissible`, or `Off` |

{% hint style="info" %}
Set a property to `null` to clear the default.
{% endhint %}

{% hint style="warning" %}
The request replaces all settings. If `disclosureNoticeMode` is missing or not a known value, it is saved as `Always`. Include the current value when you only want to change a profile.
{% endhint %}

## Response

### Success

{% code title="200 OK" %}

```json
{
    "defaultChatProfileId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "defaultEmbeddingProfileId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "classifierChatProfileId": null,
    "defaultSpeechToTextProfileId": null,
    "defaultImageGenerationProfileId": null,
    "defaultDecisionProfileId": null,
    "disclosureNoticeMode": "Always"
}
```

{% endcode %}

### Validation Error

Each profile property that is not `null` is checked. The profile must exist and have the capability that matches the property. The first property that fails returns `400 Bad Request`, and nothing is saved.

{% code title="400 Bad Request" %}

```json
{
    "type": "Error",
    "title": "Invalid settings",
    "status": 400,
    "detail": "DefaultDecisionProfileId must reference a profile with the Decision capability, but the specified profile has the Chat capability.",
    "operationStatus": "InvalidSettings"
}
```

{% endcode %}

If the profile does not exist, `detail` reads `<PropertyName> references a profile that does not exist.`

## Examples

{% code title="cURL" %}

```bash
curl -X PUT "https://your-site.com/umbraco/ai/management/api/v1/settings" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "defaultChatProfileId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "defaultEmbeddingProfileId": null
  }'
```

{% endcode %}

{% code title="C#" %}

```csharp
var settings = new
{
    defaultChatProfileId = Guid.Parse("3fa85f64-5717-4562-b3fc-2c963f66afa6"),
    defaultEmbeddingProfileId = (Guid?)null
};

var response = await httpClient.PutAsJsonAsync("/umbraco/ai/management/api/v1/settings", settings);
```

{% endcode %}

## Notes

* Each specified profile must exist and have the capability its property expects. `classifierChatProfileId` expects a Chat profile, `defaultImageGenerationProfileId` expects an Image Generation profile, `defaultDecisionProfileId` expects a Decision profile, and `defaultExtractionProfileId` expects an Extraction profile
* Settings changes take effect immediately for new requests
* `defaultImageGenerationProfileId` is stored whether or not the experimental Image Generation flag is enabled. The backoffice hides its picker while the flag is off, but keeps the saved value
* `defaultDecisionProfileId` is stored whether or not the experimental Decision flag is enabled. The backoffice hides its picker while the flag is off, but keeps the saved value
* `defaultExtractionProfileId` is stored whether or not the experimental Extraction flag is enabled. The backoffice hides its picker while the flag is off, but keeps the saved value


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.umbraco.com/ai-in-umbraco/19.latest/management-api/settings/update.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
