# Update platform settings

Update multiple platform-wide settings in a single operation. Each setting must be provided as a complete object with all required fields. Partial updates are not supported to ensure system stability and prevent configuration errors. Requires authentication. Write access is checked per setting: ADMIN settings require the AdminSettings.Manage RBAC permission.

Endpoint: PUT /api/v1/settings
Version: 1.0
Security: 

## Request fields (application/json):

  - `wellesley.access` (object)

  - `wellesley.access.visibility` (string, required)
    Whether the server is visible to the public
    Enum: "PUBLIC", "PRIVATE"

  - `wellesley.admin.ai.agents.budgets` (object)
    Budget limits in USD cents for AI agent executions.

  - `wellesley.admin.ai.agents.budgets.dailyBudgetCents` (integer)
    Daily budget in USD cents (null = unlimited)
    Example: "1000"

  - `wellesley.admin.ai.agents.budgets.monthlyBudgetCents` (integer)
    Monthly budget in USD cents (null = unlimited)
    Example: "10000"

  - `wellesley.uploads.policy.audio` (object)

  - `wellesley.uploads.policy.audio.extensions` (array)
    Allowed audio file extensions
    Example: ["mp4"]

  - `wellesley.uploads.policy.audio.keepOriginal` (boolean)
    Whether to keep the original audio file

  - `wellesley.uploads.policy.audio.maxSize` (integer)
    Maximum allowed audio file size in bytes

  - `wellesley.branding` (object)

  - `wellesley.branding.color` (string, required)
    Color theme of the homepage in HEX format

  - `wellesley.branding.description` (string, required)
    Server description shown on the homepage

  - `wellesley.branding.displayName` (string, required)
    Display name shown on the homepage

  - `wellesley.branding.image` (string, required)
    Image URL shown on the homepage

  - `wellesley.branding.imageThumbnail` (string, required)
    Thumbnail of the image URL shown on the homepage

  - `wellesley.branding.shortDescription` (string, required)
    Short description shown on the homepage

  - `wellesley.admin.captcha` (object)

  - `wellesley.admin.captcha.secretKey` (string)
    hCaptcha Account secret key

  - `wellesley.admin.captcha.siteKey` (string)
    Sitekey if the same account is used on several sites

  - `wellesley.captcha` (object)

  - `wellesley.captcha.siteKey` (string)
    Sitekey if the same account is used on several sites

  - `wellesley.confirmationCode` (object)

  - `wellesley.confirmationCode.codeExpirationMinutes` (integer)
    Expiration time for confirmation code

  - `wellesley.confirmationCode.counterExpirationMinutes` (integer)
    Time duration after which the counter for unsuccessful attempts will be reset

  - `wellesley.confirmationCode.limitCheckAttempts` (integer)
    Maximum number of attempts to check confirmation code

  - `wellesley.confirmationCode.limitStoreAttempts` (integer)
    Maximum number of attempts to request confirmation code

  - `wellesley.uploads.policy.doc` (object)

  - `wellesley.uploads.policy.doc.extensions` (array)
    Allowed doc file extensions
    Example: ["mp4"]

  - `wellesley.uploads.policy.doc.maxSize` (integer)
    Maximum allowed doc file size in bytes

  - `wellesley.instance.domainBlocks` (object)

  - `wellesley.instance.domainBlocks.domainBlocksAccess` (string, required)
    Who can see domains that are blocked by this instance
    Enum: "NONE", "USER", "ALL"

  - `wellesley.instance.domainBlocks.domainBlocksReasonAccess` (string, required)
    Who can see reasons for domain blocks by this instance
    Enum: "NONE", "USER", "ALL"

  - `wellesley.admin.embedding_model` (object)

  - `wellesley.admin.embedding_model.enabled` (boolean)
    Whether embeddings are enabled

  - `wellesley.admin.embedding_model.modelId` (string)
    Embedding model ID to use for content embeddings
    Example: "mdl_01k..."

  - `wellesley.admin.embedding_model.vectorDimensions` (integer)
    Vector dimensions (set automatically from model)

  - `wellesley.uploads.policy.emoji` (object)

  - `wellesley.uploads.policy.emoji.maxImageSize` (integer)
    Maximum allowed single emoji image size in bytes

  - `wellesley.uploads.policy.emoji.maxZipSize` (integer)
    Maximum allowed ZIP size in bytes for emoji import

  - `wellesley.admin.fasp_remote` (object)

  - `wellesley.admin.fasp_remote.adminToken` (string)
    Admin token for authenticating with the FASP server

  - `wellesley.admin.fasp_remote.baseUrl` (object)
    Base URL of the FASP server

  - `wellesley.admin.fasp_remote.baseUrl.scheme` (string)

  - `wellesley.admin.fasp_remote.baseUrl.fragment` (string)

  - `wellesley.admin.fasp_remote.baseUrl.authority` (string)

  - `wellesley.admin.fasp_remote.baseUrl.userInfo` (string)

  - `wellesley.admin.fasp_remote.baseUrl.host` (string)

  - `wellesley.admin.fasp_remote.baseUrl.port` (integer)

  - `wellesley.admin.fasp_remote.baseUrl.path` (string)

  - `wellesley.admin.fasp_remote.baseUrl.query` (string)

  - `wellesley.admin.fasp_remote.baseUrl.schemeSpecificPart` (string)

  - `wellesley.admin.fasp_remote.baseUrl.hash` (integer)

  - `wellesley.admin.fasp_remote.baseUrl.decodedUserInfo` (string)

  - `wellesley.admin.fasp_remote.baseUrl.decodedAuthority` (string)

  - `wellesley.admin.fasp_remote.baseUrl.decodedPath` (string)

  - `wellesley.admin.fasp_remote.baseUrl.decodedQuery` (string)

  - `wellesley.admin.fasp_remote.baseUrl.decodedFragment` (string)

  - `wellesley.admin.fasp_remote.baseUrl.decodedSchemeSpecificPart` (string)

  - `wellesley.admin.fasp_remote.baseUrl.string` (string)

  - `wellesley.admin.fasp_remote.configuredAt` (string)
    Timestamp when this configuration was set

  - `wellesley.admin.fasp_remote.isConfigured` (boolean)

  - `wellesley.admin.fasp_remote.serverName` (string)
    Friendly name for the FASP server

  - `wellesley.admin.federation.mode` (object)

  - `wellesley.admin.federation.mode.mode` (string)
    Enum: "OPEN", "LIMITED", "CLOSED"

  - `wellesley.uploads.policy.image` (object)

  - `wellesley.uploads.policy.image.extensions` (array)
    Allowed image file extensions
    Example: ["mp4"]

  - `wellesley.uploads.policy.image.keepOriginal` (boolean)
    Whether to keep the original image file

  - `wellesley.uploads.policy.image.maxMatrix` (integer)
    Maximum allowed image matrix resolution (width * height)

  - `wellesley.uploads.policy.image.maxResolution` (integer)
    Maximum allowed image resolution in pixels at the longest side

  - `wellesley.uploads.policy.image.maxSize` (integer)
    Maximum allowed image file size in bytes

  - `wellesley.uploads.policy.image.resolutions` (array)
    List of resolutions to convert the image to

  - `wellesley.instance.admin` (object)

  - `wellesley.instance.admin.email` (string, required)
    Email of the server admin

  - `wellesley.instance.admin.name` (string, required)
    Name of the server admin

  - `wellesley.instance.admin.username` (string, required)
    Username of the server admin

  - `wellesley.instance.contacts` (object)

  - `wellesley.instance.contacts.email` (string, required)
    Contact email for the server

  - `wellesley.instance.contacts.username` (string, required)
    Contact username for the server

  - `wellesley.instance.legal` (object)

  - `wellesley.instance.legal.privacyPolicy` (string, required)
    Privacy policy text

  - `wellesley.instance.legal.termsOfUse` (string, required)
    Terms of use text

  - `wellesley.admin.language` (object)

  - `wellesley.admin.language.key` (string)
    Language detection key, depends on type

  - `wellesley.admin.language.service` (string)
    Language detection service type
    Enum: "internal", "detectlanguage", "languagelayer", "deepl"

  - `wellesley.admin.mediacache` (object)

  - `wellesley.admin.mediacache.enabled` (boolean)
    Whether media cache is enabled or not

  - `wellesley.admin.mediacache.limitPerRun` (integer)

  - `wellesley.admin.mediacache.maxFileSize` (integer)
    Maximum size of a single cached media file in bytes

  - `wellesley.admin.mediacache.maxTotalSize` (integer)
    Maximum total size of cached media in bytes

  - `wellesley.admin.mediacache.singleRun` (boolean)

  - `wellesley.posts` (object)

  - `wellesley.posts.default_markdown` (boolean)
    Whether posts are created in markdown format by default when not explicitly specified

  - `wellesley.posts.max_characters` (integer, required)
    Maximum post size in characters

  - `wellesley.posts.max_media_attachments` (integer, required)
    Maximum number of attachments in post

  - `wellesley.posts.max_pins` (integer, required)
    Maximum number of pinned posts

  - `wellesley.registration` (object)

  - `wellesley.registration.ask_for_info` (boolean, required)
    Whether reason to join should be provided when signing up

  - `wellesley.registration.captcha` (boolean, required)
    Whether captcha is shown to new users when signing up

  - `wellesley.registration.invites` (boolean, required)
    Whether existing users can invite other users to join

  - `wellesley.registration.message` (string, required)
    Message shown to guests when registration is closed

  - `wellesley.registration.mode` (string, required)
    Registration mode on this instance
    Enum: "OPEN", "APPROVAL", "EMAIL_DOMAIN_ALLOWLIST", "CLOSED"

  - `wellesley.admin.link_service` (object)

  - `wellesley.admin.link_service.url` (object)

  - `wellesley.admin.link_service.url.scheme` (string)

  - `wellesley.admin.link_service.url.fragment` (string)

  - `wellesley.admin.link_service.url.authority` (string)

  - `wellesley.admin.link_service.url.userInfo` (string)

  - `wellesley.admin.link_service.url.host` (string)

  - `wellesley.admin.link_service.url.port` (integer)

  - `wellesley.admin.link_service.url.path` (string)

  - `wellesley.admin.link_service.url.query` (string)

  - `wellesley.admin.link_service.url.schemeSpecificPart` (string)

  - `wellesley.admin.link_service.url.hash` (integer)

  - `wellesley.admin.link_service.url.decodedUserInfo` (string)

  - `wellesley.admin.link_service.url.decodedAuthority` (string)

  - `wellesley.admin.link_service.url.decodedPath` (string)

  - `wellesley.admin.link_service.url.decodedQuery` (string)

  - `wellesley.admin.link_service.url.decodedFragment` (string)

  - `wellesley.admin.link_service.url.decodedSchemeSpecificPart` (string)

  - `wellesley.admin.link_service.url.string` (string)

  - `wellesley.admin.sms` (object)

  - `wellesley.admin.sms.countries` (array)
    List of supported countries
    Example: "[US,CA]"

  - `wellesley.admin.sms.enabled` (boolean)
    Enable SMS service

  - `wellesley.admin.sms.provider` (string)
    SMS service provider to use

  - `wellesley.admin.sms.aws` (object)

  - `wellesley.admin.sms.aws.accessKey` (string)

  - `wellesley.admin.sms.aws.fromUS` (string)

  - `wellesley.admin.sms.aws.region` (string)

  - `wellesley.admin.sms.aws.secretKey` (string)

  - `wellesley.admin.sms.aws.senderId` (string)

  - `wellesley.admin.sms.sinch` (object)

  - `wellesley.admin.sms.sinch.accessKey` (string)

  - `wellesley.admin.sms.sinch.accessSecret` (string)

  - `wellesley.admin.sms.sinch.fromUS` (string)

  - `wellesley.admin.sms.sinch.projectId` (string)

  - `wellesley.admin.sms.twilio` (object)

  - `wellesley.admin.sms.twilio.accountSid` (string)

  - `wellesley.admin.sms.twilio.authToken` (string)

  - `wellesley.admin.sms.twilio.serviceSid` (string)

  - `wellesley.translation` (object)

  - `wellesley.translation.enabled` (boolean)
    Whether translation is enabled on this server or not

  - `wellesley.admin.translation` (object)

  - `wellesley.admin.translation.key` (string)
    Translation service key, depends on type

  - `wellesley.admin.translation.service` (string)
    Translation service type
    Enum: "none", "deepl"

  - `wellesley.admin.uploads` (object)

  - `wellesley.admin.uploads.baseUrl` (object)

  - `wellesley.admin.uploads.baseUrl.scheme` (string)

  - `wellesley.admin.uploads.baseUrl.fragment` (string)

  - `wellesley.admin.uploads.baseUrl.authority` (string)

  - `wellesley.admin.uploads.baseUrl.userInfo` (string)

  - `wellesley.admin.uploads.baseUrl.host` (string)

  - `wellesley.admin.uploads.baseUrl.port` (integer)

  - `wellesley.admin.uploads.baseUrl.path` (string)

  - `wellesley.admin.uploads.baseUrl.query` (string)

  - `wellesley.admin.uploads.baseUrl.schemeSpecificPart` (string)

  - `wellesley.admin.uploads.baseUrl.hash` (integer)

  - `wellesley.admin.uploads.baseUrl.decodedUserInfo` (string)

  - `wellesley.admin.uploads.baseUrl.decodedAuthority` (string)

  - `wellesley.admin.uploads.baseUrl.decodedPath` (string)

  - `wellesley.admin.uploads.baseUrl.decodedQuery` (string)

  - `wellesley.admin.uploads.baseUrl.decodedFragment` (string)

  - `wellesley.admin.uploads.baseUrl.decodedSchemeSpecificPart` (string)

  - `wellesley.admin.uploads.baseUrl.string` (string)

  - `wellesley.admin.uploads.cdn` (object)

  - `wellesley.admin.uploads.cdn.media` (string)

  - `wellesley.admin.uploads.cdn.static` (string)

  - `wellesley.admin.uploads.domain` (string)

  - `wellesley.admin.uploads.local` (object)

  - `wellesley.admin.uploads.local.basePath` (string)

  - `wellesley.admin.uploads.localBasePath` (object)

  - `wellesley.admin.uploads.provider` (object)

  - `wellesley.admin.uploads.s3` (object)

  - `wellesley.admin.uploads.s3.accessKey` (string)

  - `wellesley.admin.uploads.s3.buckets` (object)

  - `wellesley.admin.uploads.s3.buckets.media` (string)

  - `wellesley.admin.uploads.s3.buckets.static` (string)

  - `wellesley.admin.uploads.s3.endpoint` (string)

  - `wellesley.admin.uploads.s3.presignedUrlExpiration` (integer)

  - `wellesley.admin.uploads.s3.region` (string)

  - `wellesley.admin.uploads.s3.s3Region` (object)

  - `wellesley.admin.uploads.s3.s3Region.isGlobalRegion` (boolean)

  - `wellesley.admin.uploads.s3.s3Region.id` (string)

  - `wellesley.admin.uploads.s3.secretKey` (string)

  - `wellesley.admin.uploads.scheme` (string)
    Enum: "http", "https"

  - `wellesley.admin.uploads.uploadsBasePath` (object)

  - `wellesley.username.release` (object)

  - `wellesley.username.release.enabled` (boolean)
    Whether username release is enabled

  - `wellesley.username.release.releasePeriodDays` (integer)
    Days after which deleted local users are completely purged, releasing their usernames

  - `wellesley.uploads.policy.video` (object)

  - `wellesley.uploads.policy.video.extensions` (array)
    Allowed video file extensions
    Example: ["mp4"]

  - `wellesley.uploads.policy.video.keepOriginal` (boolean)
    Whether to keep the original video file

  - `wellesley.uploads.policy.video.maxDuration` (integer)
    Maximum allowed video duration in seconds

  - `wellesley.uploads.policy.video.maxMatrix` (integer)
    Maximum allowed video matrix resolution (width * height)

  - `wellesley.uploads.policy.video.maxResolution` (integer)
    Maximum allowed video resolution in pixels at the longest side

  - `wellesley.uploads.policy.video.maxSize` (integer)
    Maximum allowed video file size in bytes

  - `wellesley.uploads.policy.video.resolutions` (array)
    List of resolutions to convert the video to

  - `wellesley.uploads.policy.video.streamingThreshold` (integer)
    Threshold in seconds to convert video to m3u8

## Response 400 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 401 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 403 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 500 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation


## Response 200 fields
