Cavuno · Schema

PatchSettingsBody

Job Board SoftwareArtificial IntelligenceCommunity PlatformsMonetization

Properties

Name Type Description
name string Display name of the board.
slug string URL slug of the board. Lowercase alphanumeric and hyphens; reserved values (e.g. `admin`, `api`) are rejected.
primaryDomainId string Identifier of the custom domain to use as the primary public URL.
logoMediaId string Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_logo`.
heroMediaId string Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_hero`.
passwordProtectionEnabled boolean Whether the board sits behind a password gate. Use `POST /v1/settings/password-protection` to set the actual password before enabling.
jobAlertsEnabled boolean Whether candidates can subscribe to email alerts for new jobs.
jobRecommendationsEnabled boolean Whether signed-in candidates can see personalized job recommendations. Absent board config defaults to `true`.
recommendedTalentEnabled boolean Whether employers can see recommended talent matches for their jobs. Absent board config defaults to `false`.
candidatesEnabled boolean Whether candidate profiles are enabled on the board.
employersEnabled boolean Whether employer self-serve flows are enabled.
blogEnabled boolean Whether the public blog is exposed.
impressumEnabled boolean Deprecated: current headless sites publish the Impressum page when they have Impressum content of their own and ignore this setting. Still accepted and returned, honoured by hosted boards, and reporte
requireApprovalFreeJobs boolean Whether jobs posted by employers from the free tier require admin approval before they appear on the public board.
postingRequiresMembership boolean When true, only companies with an active plan assignment can post jobs. Absent means anyone can post.
requireApprovalAggregatedJobs boolean Whether aggregated jobs (e.g. those sourced or imported from upstream sources) require admin approval before they appear on the public board.
registrationWallEnabled boolean Whether visitors must sign in to view jobs.
nativeApplicationsEnabled boolean Whether the board's built-in ATS receives applications. When `false` (external-applications-only board), posting surfaces require an external `applicationUrl` and `POST /boards/:identifier/jobs/:jobSl
countryGatingMode string Apply country gate mode. The default is sponsored_only; all_jobs also gates ordinary external and native starter applies.
applicantMessagingEnabled boolean Whether applicant↔employer messaging is enabled. When `false`, the `me/conversations` route family rejects with `messaging_disabled` and new-message emails are suppressed. Absent means `true`.
applyUrlAttribution object
talentDirectoryEnabled boolean Legacy shorthand for the talent directory. `true` maps to `talentDirectoryVisibility: "public"`; `false` maps to `"off"`. Prefer the tri-state field. Providing both with conflicting values returns `se
talentDirectoryVisibility string Talent directory access mode: `off` (hidden), `public` (anyone), or `employers_only` (approved employers). Canonical field; supersedes `talentDirectoryEnabled`.
defaultCandidateProfileVisibility string Visibility a candidate profile is created with at signup: `hidden` (not listed), `logged_in_only` (signed-in visitors), or `public`. Defaults to `hidden`, which matches what an unset value already mea
experienceVerificationEnabled boolean Whether the board team verifies candidate experience. Each experience entry gets a verification status covering its company name and website; changing either removes it. Decide items with `POST /v1/ca
educationVerificationEnabled boolean Whether the board team verifies candidate education. Each education entry gets a verification status covering its school name and website; changing either removes it. Decide items with `POST /v1/candi
requireCookieConsent boolean Whether the public board shows a cookie consent banner before non-essential tracking runs.
cookieBannerTitle string Title shown on the cookie consent banner. 1–200 characters.
cookieBannerDescription string Body copy shown on the cookie consent banner. 1–500 characters.
cookieBannerRejectLabel string Reject-button label on the cookie consent banner. 1–80 characters.
cookieBannerAcceptLabel string Accept-button label on the cookie consent banner. 1–80 characters.
cookieBannerManageLabel string Preferences/manage-button label on the cookie consent banner. 1–80 characters.
showCavunoBranding boolean Whether the Cavuno-branded footer is displayed on the public board. Plan-gated; lower-tier plans cannot disable this.
defaultJobDurationDays integer Default expiry, in days, applied to newly published jobs when no `expiresAt` is supplied.
contactEmail object Public contact email shown on the board. Pass `null` to clear.
companyLegalName object Legal name of the entity operating the board. Pass `null` to clear.
companyAddress object Postal address of the entity operating the board. Pass `null` to clear.
companyWebsiteUrl object Public company website URL. Pass `null` to clear.
companyXHandle object Company X (Twitter) handle or profile URL. Pass `null` to clear.
companyFacebookUrl object Company Facebook page URL. Pass `null` to clear.
companyLinkedinUrl object Company LinkedIn page URL. Pass `null` to clear.
companyInstagramUrl object Company Instagram handle or profile URL. Pass `null` to clear.
companyTiktokUrl object Company TikTok handle or profile URL, stored as `https://www.tiktok.com/@handle`. Pass `null` to clear.
companyYoutubeUrl object Company YouTube channel: an `@handle` or a channel URL (`/@handle`, `/channel/UC…`, `/c/name`, `/user/name`); video links are refused. Pass `null` to clear.
ga4MeasurementId stringnull Google Analytics 4 measurement ID (for example `G-XXXXXXXXXX`) loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
gtmContainerId stringnull Google Tag Manager container ID (for example `GTM-XXXXXXX`) loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
metaPixelId stringnull Meta Pixel ID loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinPartnerId stringnull LinkedIn Insight Tag partner ID loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinConversionSignUpId stringnull LinkedIn conversion ID fired when a visitor signs up. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinConversionLoginId stringnull LinkedIn conversion ID fired when a visitor signs in. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinConversionApplyClickId stringnull LinkedIn conversion ID fired when a visitor clicks Apply. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinConversionApplySubmitId stringnull LinkedIn conversion ID fired when a visitor submits an application. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
linkedinConversionJobAlertSubscribeId stringnull LinkedIn conversion ID fired when a visitor subscribes to job alerts. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear.
talentNavLabel string Label shown for the talent directory in the public navigation. 1–50 characters.
passwordProtectionMessage object Deprecated: no longer shown on the password gate. Gate copy now lives on the board's builder-designed coming-soon page. Still accepted and returned for compatibility; it will be removed with the hoste
signInMethods object
employerCompanyDeletionEnabled boolean Whether employers can delete their company from the board. Absent board config defaults to `true`.
talentAccessModel string `paid_messaging`: employers browse full candidate profiles and spend credits only to message. `paid_unlocks_and_messaging`: employers spend credits to unlock a profile before messaging. Changing the m
language string Board language. On a hosted board the new language applies immediately. On a site built with the AI website builder the language lives in the site code: a change starts a translation of your site that
interfaceLocales array Sites built with the AI website builder only: the whole set of secondary languages the site serves besides `language`, up to 3 (a set already larger may shrink but not grow). A change starts a transla
salaryCurrency string ISO 4217 code the board’s salary pages and salary amounts are shown in. A currency without a current exchange rate is refused with 400.
themeConfig object
emailPoweredByText string “Powered by” text in the footer of the board’s emails, up to 80 characters. Must contain the word `Cavuno` (linked to cavuno.com) while `showCavunoBranding` is on.
emailManagePreferencesLabel string Label of the manage-preferences link in marketing email footers, up to 60 characters. An empty string resets it to `Manage preferences`.
emailUnsubscribeLabel string Label of the unsubscribe link in marketing email footers, up to 60 characters. An empty string resets it to `Unsubscribe`.
customLinks array Custom links shown in email footers, in order (up to 50). Replaces the whole list. Rows with neither a label nor a URL are dropped; a row needs both, and an unsafe URL is refused. Refused with 409 whi
View JSON Schema on GitHub

JSON Schema

cavuno-com-patch-settings-body-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/cavuno-com/json-schema/cavuno-com-patch-settings-body-schema.json",
  "title": "PatchSettingsBody",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/cavuno-com-openapi.json#/components/schemas/PatchSettingsBody",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Display name of the board."
    },
    "slug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "URL slug of the board. Lowercase alphanumeric and hyphens; reserved values (e.g. `admin`, `api`) are rejected."
    },
    "primaryDomainId": {
      "type": "string",
      "description": "Identifier of the custom domain to use as the primary public URL."
    },
    "logoMediaId": {
      "type": "string",
      "description": "Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_logo`."
    },
    "heroMediaId": {
      "type": "string",
      "description": "Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_hero`."
    },
    "passwordProtectionEnabled": {
      "type": "boolean",
      "description": "Whether the board sits behind a password gate. Use `POST /v1/settings/password-protection` to set the actual password before enabling."
    },
    "jobAlertsEnabled": {
      "type": "boolean",
      "description": "Whether candidates can subscribe to email alerts for new jobs."
    },
    "jobRecommendationsEnabled": {
      "type": "boolean",
      "description": "Whether signed-in candidates can see personalized job recommendations. Absent board config defaults to `true`."
    },
    "recommendedTalentEnabled": {
      "type": "boolean",
      "description": "Whether employers can see recommended talent matches for their jobs. Absent board config defaults to `false`."
    },
    "candidatesEnabled": {
      "type": "boolean",
      "description": "Whether candidate profiles are enabled on the board."
    },
    "employersEnabled": {
      "type": "boolean",
      "description": "Whether employer self-serve flows are enabled."
    },
    "blogEnabled": {
      "type": "boolean",
      "description": "Whether the public blog is exposed."
    },
    "impressumEnabled": {
      "type": "boolean",
      "deprecated": true,
      "description": "Deprecated: current headless sites publish the Impressum page when they have Impressum content of their own and ignore this setting. Still accepted and returned, honoured by hosted boards, and reported as `features.impressum` on the board context for older sites."
    },
    "requireApprovalFreeJobs": {
      "type": "boolean",
      "description": "Whether jobs posted by employers from the free tier require admin approval before they appear on the public board."
    },
    "postingRequiresMembership": {
      "type": "boolean",
      "description": "When true, only companies with an active plan assignment can post jobs. Absent means anyone can post."
    },
    "requireApprovalAggregatedJobs": {
      "type": "boolean",
      "description": "Whether aggregated jobs (e.g. those sourced or imported from upstream sources) require admin approval before they appear on the public board."
    },
    "registrationWallEnabled": {
      "type": "boolean",
      "description": "Whether visitors must sign in to view jobs."
    },
    "nativeApplicationsEnabled": {
      "type": "boolean",
      "description": "Whether the board's built-in ATS receives applications. When `false` (external-applications-only board), posting surfaces require an external `applicationUrl` and `POST /boards/:identifier/jobs/:jobSlug/apply` rejects with `applications_native_disabled`. Turning this off UNPUBLISHES every published native-apply job (those with no external `applicationUrl`) back to draft via an asynchronous batched drain. Expect published job counts to shrink over the following seconds. Nothing is deleted, and re-enabling does NOT republish the drafted jobs. Absent means `true`."
    },
    "countryGatingMode": {
      "type": "string",
      "enum": [
        "sponsored_only",
        "all_jobs"
      ],
      "description": "Apply country gate mode. The default is sponsored_only; all_jobs also gates ordinary external and native starter applies."
    },
    "applicantMessagingEnabled": {
      "type": "boolean",
      "description": "Whether applicant↔employer messaging is enabled. When `false`, the `me/conversations` route family rejects with `messaging_disabled` and new-message emails are suppressed. Absent means `true`."
    },
    "applyUrlAttribution": {
      "allOf": [
        {
          "$ref": "#/$defs/ApplyUrlAttribution"
        },
        {
          "description": "Query parameters appended to outbound apply URLs. `{ \"mode\": \"off\" }` appends nothing — use it for boards whose upstream application host rejects unexpected query parameters. `{ \"mode\": \"append\", \"params\": [...] }` sets the parameters explicitly; each `valueTemplate` may contain the `{{boardHost}}`, `{{boardSlug}}` and `{{boardName}}` tokens. An `append` policy with an empty `params` array is stored as `off`. Absent board config means the default `ref={{boardHost}}`. Individual import feeds can override this per feed."
        }
      ]
    },
    "talentDirectoryEnabled": {
      "type": "boolean",
      "description": "Legacy shorthand for the talent directory. `true` maps to `talentDirectoryVisibility: \"public\"`; `false` maps to `\"off\"`. Prefer the tri-state field. Providing both with conflicting values returns `settings_conflicting_fields`."
    },
    "talentDirectoryVisibility": {
      "type": "string",
      "enum": [
        "off",
        "public",
        "employers_only"
      ],
      "description": "Talent directory access mode: `off` (hidden), `public` (anyone), or `employers_only` (approved employers). Canonical field; supersedes `talentDirectoryEnabled`."
    },
    "defaultCandidateProfileVisibility": {
      "type": "string",
      "enum": [
        "hidden",
        "logged_in_only",
        "public"
      ],
      "description": "Visibility a candidate profile is created with at signup: `hidden` (not listed), `logged_in_only` (signed-in visitors), or `public`. Defaults to `hidden`, which matches what an unset value already means — the talent directory lists only `public` and `logged_in_only` profiles. Applies at signup ONLY: it never rewrites an existing profile, and a candidate can change their own afterwards. Composes with `talentDirectoryVisibility`, which controls who may browse the directory at all."
    },
    "experienceVerificationEnabled": {
      "type": "boolean",
      "description": "Whether the board team verifies candidate experience. Each experience entry gets a verification status covering its company name and website; changing either removes it. Decide items with `POST /v1/candidates/{id}/verifications/{itemKey}/decisions`."
    },
    "educationVerificationEnabled": {
      "type": "boolean",
      "description": "Whether the board team verifies candidate education. Each education entry gets a verification status covering its school name and website; changing either removes it. Decide items with `POST /v1/candidates/{id}/verifications/{itemKey}/decisions`."
    },
    "requireCookieConsent": {
      "type": "boolean",
      "description": "Whether the public board shows a cookie consent banner before non-essential tracking runs."
    },
    "cookieBannerTitle": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Title shown on the cookie consent banner. 1–200 characters."
    },
    "cookieBannerDescription": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "Body copy shown on the cookie consent banner. 1–500 characters."
    },
    "cookieBannerRejectLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Reject-button label on the cookie consent banner. 1–80 characters."
    },
    "cookieBannerAcceptLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Accept-button label on the cookie consent banner. 1–80 characters."
    },
    "cookieBannerManageLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Preferences/manage-button label on the cookie consent banner. 1–80 characters."
    },
    "showCavunoBranding": {
      "type": "boolean",
      "description": "Whether the Cavuno-branded footer is displayed on the public board. Plan-gated; lower-tier plans cannot disable this."
    },
    "defaultJobDurationDays": {
      "type": "integer",
      "minimum": 0,
      "exclusiveMinimum": true,
      "description": "Default expiry, in days, applied to newly published jobs when no `expiresAt` is supplied."
    },
    "contactEmail": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 320,
          "format": "email"
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Public contact email shown on the board. Pass `null` to clear."
    },
    "companyLegalName": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 200
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Legal name of the entity operating the board. Pass `null` to clear."
    },
    "companyAddress": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Postal address of the entity operating the board. Pass `null` to clear."
    },
    "companyWebsiteUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Public company website URL. Pass `null` to clear."
    },
    "companyXHandle": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company X (Twitter) handle or profile URL. Pass `null` to clear."
    },
    "companyFacebookUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company Facebook page URL. Pass `null` to clear."
    },
    "companyLinkedinUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company LinkedIn page URL. Pass `null` to clear."
    },
    "companyInstagramUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company Instagram handle or profile URL. Pass `null` to clear."
    },
    "companyTiktokUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company TikTok handle or profile URL, stored as `https://www.tiktok.com/@handle`. Pass `null` to clear."
    },
    "companyYoutubeUrl": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "description": "Company YouTube channel: an `@handle` or a channel URL (`/@handle`, `/channel/UC…`, `/c/name`, `/user/name`); video links are refused. Pass `null` to clear."
    },
    "ga4MeasurementId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "Google Analytics 4 measurement ID (for example `G-XXXXXXXXXX`) loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "gtmContainerId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "Google Tag Manager container ID (for example `GTM-XXXXXXX`) loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "metaPixelId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "Meta Pixel ID loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinPartnerId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn Insight Tag partner ID loaded on the public board. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinConversionSignUpId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn conversion ID fired when a visitor signs up. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinConversionLoginId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn conversion ID fired when a visitor signs in. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinConversionApplyClickId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn conversion ID fired when a visitor clicks Apply. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinConversionApplySubmitId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn conversion ID fired when a visitor submits an application. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "linkedinConversionJobAlertSubscribeId": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 120,
      "pattern": "^[A-Za-z0-9_-]*$",
      "description": "LinkedIn conversion ID fired when a visitor subscribes to job alerts. Letters, digits, `-` and `_`, up to 120 characters. Pass `null` or an empty string to clear."
    },
    "talentNavLabel": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50,
      "description": "Label shown for the talent directory in the public navigation. 1–50 characters."
    },
    "passwordProtectionMessage": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "string",
          "enum": [
            ""
          ]
        },
        {
          "nullable": true
        }
      ],
      "deprecated": true,
      "description": "Deprecated: no longer shown on the password gate. Gate copy now lives on the board's builder-designed coming-soon page. Still accepted and returned for compatibility; it will be removed with the hosted board. Up to 500 characters. Pass `null` to clear."
    },
    "signInMethods": {
      "$ref": "#/$defs/SignInMethodsPatch"
    },
    "employerCompanyDeletionEnabled": {
      "type": "boolean",
      "description": "Whether employers can delete their company from the board. Absent board config defaults to `true`."
    },
    "talentAccessModel": {
      "type": "string",
      "enum": [
        "paid_messaging",
        "paid_unlocks_and_messaging"
      ],
      "description": "`paid_messaging`: employers browse full candidate profiles and spend credits only to message. `paid_unlocks_and_messaging`: employers spend credits to unlock a profile before messaging. Changing the model, or first setting `paid_messaging`, is refused with 409 `settings_talent_access_model_locked` while an active plan includes candidate database credits; archive those plans first."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "de",
        "fr",
        "es",
        "pt",
        "nl",
        "it",
        "sv",
        "da",
        "nb",
        "fi",
        "pl",
        "cs",
        "ja",
        "ko",
        "zh",
        "hi",
        "tr",
        "ru"
      ],
      "description": "Board language. On a hosted board the new language applies immediately. On a site built with the AI website builder the language lives in the site code: a change starts a translation of your site that is published when it is ready (usually a few minutes), so `config.language` keeps the current value and the response carries the pending `languageChange`. Sending the current language changes nothing."
    },
    "interfaceLocales": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "en",
          "de",
          "fr",
          "es",
          "pt",
          "nl",
          "it",
          "sv",
          "da",
          "nb",
          "fi",
          "pl",
          "cs",
          "ja",
          "ko",
          "zh",
          "hi",
          "tr",
          "ru"
        ]
      },
      "maxItems": 19,
      "description": "Sites built with the AI website builder only: the whole set of secondary languages the site serves besides `language`, up to 3 (a set already larger may shrink but not grow). A change starts a translation that is published when it is ready, reported in `languageChange`; `config.interfaceLocales` updates once it is live. Sending the current set changes nothing. Refused with 409 `settings_language_change_refused` on a hosted board, before the site's first publish, or while another language change is in progress — including a language change in the same request."
    },
    "salaryCurrency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "description": "ISO 4217 code the board’s salary pages and salary amounts are shown in. A currency without a current exchange rate is refused with 400."
    },
    "themeConfig": {
      "$ref": "#/$defs/BoardThemeConfig"
    },
    "emailPoweredByText": {
      "type": "string",
      "maxLength": 80,
      "description": "“Powered by” text in the footer of the board’s emails, up to 80 characters. Must contain the word `Cavuno` (linked to cavuno.com) while `showCavunoBranding` is on."
    },
    "emailManagePreferencesLabel": {
      "type": "string",
      "maxLength": 60,
      "description": "Label of the manage-preferences link in marketing email footers, up to 60 characters. An empty string resets it to `Manage preferences`."
    },
    "emailUnsubscribeLabel": {
      "type": "string",
      "maxLength": 60,
      "description": "Label of the unsubscribe link in marketing email footers, up to 60 characters. An empty string resets it to `Unsubscribe`."
    },
    "customLinks": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/SettingsCustomLink"
      },
      "maxItems": 50,
      "description": "Custom links shown in email footers, in order (up to 50). Replaces the whole list. Rows with neither a label nor a URL are dropped; a row needs both, and an unsafe URL is refused. Refused with 409 while the site is moving to the AI website builder; sending the current list changes nothing."
    }
  },
  "additionalProperties": false,
  "$defs": {
    "ApplyUrlAttribution": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "off"
              ]
            }
          },
          "required": [
            "mode"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "append"
              ]
            },
            "params": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/ApplyUrlParamTemplate"
              },
              "maxItems": 8
            }
          },
          "required": [
            "mode",
            "params"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Query parameters appended to outbound apply URLs. Absent means the default `ref={{boardHost}}`."
    },
    "ApplyUrlParamTemplate": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$"
        },
        "valueTemplate": {
          "type": "string",
          "maxLength": 200
        }
      },
      "required": [
        "key",
        "valueTemplate"
      ],
      "additionalProperties": false
    },
    "BoardThemeConfig": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "light",
            "dark",
            "system"
          ]
        },
        "designSystem": {
          "type": "object",
          "properties": {
            "schemeId": {
              "type": "string",
              "enum": [
                "obsidian",
                "slate",
                "sand",
                "coral",
                "indigo",
                "emerald",
                "charcoal",
                "custom"
              ]
            },
            "colors": {
              "type": "object",
              "properties": {
                "light": {
                  "type": "object",
                  "properties": {
                    "brandColor": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonPrimary": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonPrimaryText": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonDanger": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "background": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "surfaceBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "mutedBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "highlightBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "text": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textSubtle": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textMuted": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textDisabled": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textError": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "border": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "contrastBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "contrastText": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    }
                  },
                  "required": [
                    "brandColor",
                    "buttonPrimary",
                    "buttonPrimaryText",
                    "buttonDanger",
                    "background",
                    "surfaceBackground",
                    "mutedBackground",
                    "highlightBackground",
                    "text",
                    "textMuted",
                    "textError",
                    "border",
                    "contrastBackground",
                    "contrastText"
                  ]
                },
                "dark": {
                  "type": "object",
                  "properties": {
                    "brandColor": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonPrimary": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonPrimaryText": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "buttonDanger": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "background": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "surfaceBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "mutedBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "highlightBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "text": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textSubtle": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textMuted": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textDisabled": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "textError": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "border": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "contrastBackground": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    },
                    "contrastText": {
                      "type": "string",
                      "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$"
                    }
                  },
                  "required": [
                    "brandColor",
                    "buttonPrimary",
                    "buttonPrimaryText",
                    "buttonDanger",
                    "background",
                    "surfaceBackground",
                    "mutedBackground",
                    "highlightBackground",
                    "text",
                    "textMuted",
                    "textError",
                    "border",
                    "contrastBackground",
                    "contrastText"
                  ]
                }
              },
              "required": [
                "light",
                "dark"
              ]
            },
            "typography": {
              "type": "object",
              "properties": {
                "fontSans": {
                  "type": "string",
                  "enum": [
                    "be-vietnam-pro",
                    "inter",
                    "plus-jakarta-sans",
                    "dm-sans",
                    "public-sans",
                    "figtree",
                    "work-sans",
                    "open-sans",
                    "poppins",
                    "hind",
                    "lexend",
                    "fira-sans",
                    "manrope",
                    "source-sans-pro",
                    "outfit",
                    "space-grotesk",
                    "geist",
                    "source-serif-4",
                    "lora",
                    "crimson-pro"
                  ]
                },
                "fontHeading": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "enum": [
                    "be-vietnam-pro",
                    "inter",
                    "plus-jakarta-sans",
                    "dm-sans",
                    "public-sans",
                    "figtree",
                    "work-sans",
                    "open-sans",
                    "poppins",
                    "hind",
                    "lexend",
                    "fira-sans",
                    "manrope",
                    "source-sans-pro",
                    "outfit",
                    "space-grotesk",
                    "geist",
                    "source-serif-4",
                    "lora",
                    "crimson-pro"
                  ]
                }
              },
              "required": [
                "fontSans",
                "fontHeading"
              ]
            }
          },
          "required": [
            "schemeId",
            "colors",
            "typography"
          ]
        }
      },
      "required": [
        "mode",
        "designSystem"
      ],
      "description": "Board theme: color mode, light and dark color tokens (hex), and fonts. Replaces the whole t

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://artifacts.apis.io/cavuno-com/json-schema/cavuno-com-patch-settings-body-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/cavuno-com-patch-settings-body"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.