---
title: "Change customer-facing AI tone, personality and instructions"
method: PUT
path: "/settings/ai/system-prompt"
---

# Change customer-facing AI tone, personality and instructions

`PUT /settings/ai/system-prompt`

## Request

- Base URL: `https://platform-api.visitoai.com/m2m/v1`
- URL: `https://platform-api.visitoai.com/m2m/v1/settings/ai/system-prompt`
- Auth: HTTP bearer

Replace the documented personalization fields using a fresh get_ai_settings read and its updatedAt as expectedUpdatedAt (null when absent). Preserve unrelated desired values; all personality fields including customInstructions are required. null/empty customInstructions clears them; assistantName=null clears the name. Optional replyAutoFreezeMinutes (zero to one hundred twenty) changes pauses after operator replies; omission preserves it. A 409 conflict requires reload/reconciliation, not a blind retry. Does not change core safety rules, historical traces, channels, conversation policy, follow-up automation or the managed Business Agent. Read again to verify; future turns use current settings. Required permission: ai_settings:write. Connected business only; no tenant override.

## Request body

- AiSettingsInput
  - `baseStyle` 'default' | 'professional' | 'friendly' | 'candid' | 'quirky' | 'efficient' | 'cynical', required
  - `emoji` 'yes' | 'no', required
  - `messageLength` 'default' | 'short' | 'long', required
  - `conversationOpenness` 'strict' | 'open', required
  - `assistantName` string, nullable, required
  - `customInstructions` string, nullable, required
  - `replyAutoFreezeMinutes` integer
  - `expectedUpdatedAt` string, nullable, required: Copy updatedAt from the immediately preceding settings read; null only when no updatedAt was returned. A stale version returns SETTINGS_CONFLICT (409); reload and reconcile.

## Response `200`

Success

- AiSettings
  - `baseStyle` 'default' | 'professional' | 'friendly' | 'candid' | 'quirky' | 'efficient' | 'cynical', required
  - `emoji` 'yes' | 'no', required
  - `messageLength` 'default' | 'short' | 'long', required
  - `conversationOpenness` 'strict' | 'open', required
  - `assistantName` string, nullable, required
  - `customInstructions` string, nullable
  - `replyAutoFreezeMinutes` integer
  - `compiledSystemPrompt` string, required: Dashboard personalization preview only. The response runtime separately compiles runtimePersonalization fields and appends core, knowledge and tool instructions.
  - `runtimePersonalization` object, required
    - `baseStyle` string
    - `emoji` string
    - `messageLength` string
    - `conversationOpenness` string
    - `assistantName` string, nullable
    - `customInstructions` string
    - `configured` boolean, required
    - `verbose` 'yes' | 'no'
  - `updatedAt` string

## Other responses

- `400`: Invalid request
- `403`: Missing permission
- `404`: Resource not found
- `409`: Conflict; read state and reconcile

---

[API](https://skmtc.dev/visitoai/apis/visito-m2m-api.md) - [All operations](https://skmtc.dev/visitoai/apis/visito-m2m-api/llms.txt) - [OpenAPI document](https://skmtc.dev/visitoai/apis/visito-m2m-api/revisions/98377d35c234?raw)
