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

# Change customer-facing AI tone, personality and instructions

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



## OpenAPI

````yaml /openapi.json put /settings/ai/system-prompt
openapi: 3.0.3
info:
  title: Visito M2M API
  version: 1.0.0
  description: >-
    Tenant-scoped server-to-server API for channels, conversations, commerce,
    custom AI tools, and WhatsApp templates. Send operations are asynchronous
    and return queued acknowledgements. Expansion adds conversation controls,
    knowledge, sales opportunities, delivery status, reporting, and signed
    webhooks.
servers:
  - url: https://platform-api.visitoai.com/m2m/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Channels
  - name: Conversations
  - name: Commerce
  - name: Custom tools
  - name: WhatsApp templates
  - name: Properties
  - name: Knowledge
  - name: Sales CRM
  - name: Delivery
  - name: Reporting
  - name: Webhooks
paths:
  /settings/ai/system-prompt:
    put:
      summary: Change customer-facing AI tone, personality and instructions
      description: >-
        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.
      operationId: update_ai_settings
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiSettingsInput'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiSettings'
        '400':
          description: Invalid request
        '403':
          description: Missing permission
        '404':
          description: Resource not found
        '409':
          description: Conflict; read state and reconcile
components:
  schemas:
    AiSettingsInput:
      type: object
      additionalProperties: false
      properties:
        baseStyle:
          type: string
          enum:
            - default
            - professional
            - friendly
            - candid
            - quirky
            - efficient
            - cynical
        emoji:
          type: string
          enum:
            - 'yes'
            - 'no'
        messageLength:
          type: string
          enum:
            - default
            - short
            - long
        conversationOpenness:
          type: string
          enum:
            - strict
            - open
        assistantName:
          type: string
          maxLength: 60
          nullable: true
        customInstructions:
          type: string
          maxLength: 6000
          nullable: true
        replyAutoFreezeMinutes:
          type: integer
          minimum: 0
          maximum: 120
        expectedUpdatedAt:
          type: string
          maxLength: 64
          description: >-
            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.
          nullable: true
      required:
        - baseStyle
        - emoji
        - messageLength
        - conversationOpenness
        - assistantName
        - customInstructions
        - expectedUpdatedAt
    AiSettings:
      type: object
      additionalProperties: false
      properties:
        baseStyle:
          type: string
          enum:
            - default
            - professional
            - friendly
            - candid
            - quirky
            - efficient
            - cynical
        emoji:
          type: string
          enum:
            - 'yes'
            - 'no'
        messageLength:
          type: string
          enum:
            - default
            - short
            - long
        conversationOpenness:
          type: string
          enum:
            - strict
            - open
        assistantName:
          type: string
          maxLength: 60
          nullable: true
        customInstructions:
          type: string
          maxLength: 6000
          nullable: true
        replyAutoFreezeMinutes:
          type: integer
          minimum: 0
          maximum: 120
        compiledSystemPrompt:
          type: string
          maxLength: 20000
          description: >-
            Dashboard personalization preview only. The response runtime
            separately compiles runtimePersonalization fields and appends core,
            knowledge and tool instructions.
        runtimePersonalization:
          type: object
          additionalProperties: false
          properties:
            baseStyle:
              type: string
              maxLength: 6000
            emoji:
              type: string
              maxLength: 6000
            messageLength:
              type: string
              maxLength: 6000
            conversationOpenness:
              type: string
              maxLength: 6000
            assistantName:
              type: string
              maxLength: 6000
              nullable: true
            customInstructions:
              type: string
              maxLength: 6000
            configured:
              type: boolean
            verbose:
              type: string
              enum:
                - 'yes'
                - 'no'
          required:
            - configured
        updatedAt:
          type: string
          maxLength: 128
      required:
        - baseStyle
        - emoji
        - messageLength
        - conversationOpenness
        - assistantName
        - compiledSystemPrompt
        - runtimePersonalization
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Visito M2M API key
      description: Server-side tenant-scoped credential created from Build > API Keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.