{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://apievangelist.com/schemas/redoc/redoc-configuration.json",
  "title": "ReDoc Configuration",
  "description": "Configuration options for ReDoc, the open-source API documentation renderer for OpenAPI specifications. These options control the functional behavior, appearance, and theme of the rendered documentation.",
  "type": "object",
  "properties": {
    "disableSearch": {
      "type": "boolean",
      "description": "Disables search indexing and hides the search box from the API documentation page.",
      "default": false
    },
    "minCharacterLengthToInitSearch": {
      "type": "integer",
      "description": "Sets the minimum number of characters that need to be typed into the search dialog to initiate the search.",
      "default": 3,
      "minimum": 1
    },
    "hideDownloadButtons": {
      "type": "boolean",
      "description": "Hides the Download button for saving the API definition source file. This setting does not make the API definition private; it just hides the button.",
      "default": false
    },
    "hideLoading": {
      "type": "boolean",
      "description": "Hides the loading animation. Does not apply to CLI or Workflows-rendered docs.",
      "default": false
    },
    "hideSchemaTitles": {
      "type": "boolean",
      "description": "Hides the schema title next to the type.",
      "default": false
    },
    "jsonSamplesExpandLevel": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 0,
          "description": "A numeric level to expand JSON payload samples to."
        },
        {
          "type": "string",
          "enum": ["all"],
          "description": "Expand all levels of JSON payload samples."
        }
      ],
      "description": "Sets the default expand level for JSON payload samples (response and request body). The default value is 2. Use 'all' to expand all levels.",
      "default": 2
    },
    "maxDisplayedEnumValues": {
      "type": "integer",
      "description": "Displays only the specified number of enum values. Remaining values are hidden in an expandable area. If not set, all values are displayed.",
      "minimum": 1
    },
    "onlyRequiredInSamples": {
      "type": "boolean",
      "description": "Shows only required fields in request samples.",
      "default": false
    },
    "sortRequiredPropsFirst": {
      "type": "boolean",
      "description": "Shows required properties in schemas first, ordered in the same order as in the required array.",
      "default": false
    },
    "schemasExpansionLevel": {
      "oneOf": [
        {
          "type": "integer",
          "minimum": 0,
          "description": "A numeric level to auto-expand schemas to."
        },
        {
          "type": "string",
          "enum": ["all"],
          "description": "Expand all schemas regardless of their level."
        }
      ],
      "description": "Specifies whether to automatically expand schemas in Reference docs. Set to 'all' to expand all schemas, or a number to expand schemas up to that level. Default is 0 (no expansion).",
      "default": 0
    },
    "scrollYOffset": {
      "oneOf": [
        {
          "type": "number",
          "description": "A fixed number of pixels to be used as the vertical scroll offset."
        },
        {
          "type": "string",
          "description": "A CSS selector for an element whose bottom edge defines the scroll offset."
        }
      ],
      "description": "Specifies a vertical scroll-offset. Useful when fixed positioned elements (such as navbars or headers) are at the top of the page."
    },
    "showExtensions": {
      "oneOf": [
        {
          "type": "boolean",
          "description": "When true, shows all specification extensions (x- fields). Extensions used by Redoc are ignored."
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "An array of extension names to selectively display."
        }
      ],
      "description": "Shows specification extensions (x- fields). Can be a boolean or an array of extension names.",
      "default": false
    },
    "sanitize": {
      "type": "boolean",
      "description": "If set to true, the API definition is considered untrusted and all HTML/Markdown is sanitized to prevent XSS.",
      "default": false
    },
    "downloadUrls": {
      "type": "array",
      "description": "Set the URLs used to download the OpenAPI description or other documentation-related files from the API documentation page.",
      "items": {
        "$ref": "#/$defs/DownloadUrl"
      }
    },
    "schemaDefinitionsTagName": {
      "type": "string",
      "description": "If a value is set, all schemas are rendered with the designated tag name and displayed in the sidebar navigation.",
      "minLength": 1
    },
    "generatedSamplesMaxDepth": {
      "type": "integer",
      "description": "Controls how many schema levels are automatically generated for payload samples.",
      "default": 8,
      "minimum": 1
    },
    "hidePropertiesPrefix": {
      "type": "boolean",
      "description": "Enables hiding of parent names for nested properties within the documentation in complex data structures.",
      "default": true
    },
    "expandDefaultServerVariables": {
      "type": "boolean",
      "description": "Enables or disables expanding default server variables.",
      "default": false
    },
    "expandResponses": {
      "oneOf": [
        {
          "type": "string",
          "pattern": "^(all|[0-9]+(,[0-9]+)*)$",
          "description": "Comma-separated HTTP response codes to expand, or 'all' to expand all responses."
        }
      ],
      "description": "Controls which responses to expand by default. Specify response codes as a comma-separated list (e.g. '200,201') or use 'all' to expand all."
    },
    "expandSingleSchemaField": {
      "type": "boolean",
      "description": "Automatically expands the single field in a schema.",
      "default": false
    },
    "hideHostname": {
      "type": "boolean",
      "description": "If set to true, the protocol and hostname are not shown in the operation definition.",
      "default": false
    },
    "hideRequestPayloadSample": {
      "type": "boolean",
      "description": "Hides request payload examples.",
      "default": false
    },
    "hideOneOfDescription": {
      "type": "boolean",
      "description": "If set to true, the description for oneOf/anyOf objects is not shown in the schema.",
      "default": false
    },
    "hideSchemaPattern": {
      "type": "boolean",
      "description": "If set to true, the pattern is not shown in the schema.",
      "default": false
    },
    "hideSecuritySection": {
      "type": "boolean",
      "description": "Hides the Security panel section.",
      "default": false
    },
    "hideSingleRequestSampleTab": {
      "type": "boolean",
      "description": "Hides the request sample tab for requests with only one sample.",
      "default": false
    },
    "menuToggle": {
      "type": "boolean",
      "description": "If set to true, selecting an expanded item in the sidebar twice collapses it.",
      "default": true
    },
    "nativeScrollbars": {
      "type": "boolean",
      "description": "If set to true, the sidebar uses the native scrollbar instead of perfect-scroll. A scrolling performance optimization for large API definitions.",
      "default": false
    },
    "pathInMiddlePanel": {
      "type": "boolean",
      "description": "Shows the path link and HTTP verb in the middle panel instead of the right panel.",
      "default": false
    },
    "payloadSampleIdx": {
      "type": "integer",
      "description": "If set, the payload sample is inserted at the specified index. Indexes start from 0.",
      "minimum": 0
    },
    "showObjectSchemaExamples": {
      "type": "boolean",
      "description": "Shows object schema example in the properties.",
      "default": false
    },
    "showWebhookVerb": {
      "type": "boolean",
      "description": "When set to true, shows the HTTP request method for webhooks in operations and in the sidebar.",
      "default": false
    },
    "simpleOneOfTypeLabel": {
      "type": "boolean",
      "description": "Shows only unique oneOf types in the label without titles.",
      "default": false
    },
    "sortEnumValuesAlphabetically": {
      "type": "boolean",
      "description": "When set to true, sorts all enum values in all schemas alphabetically.",
      "default": false
    },
    "sortOperationsAlphabetically": {
      "type": "boolean",
      "description": "When set to true, sorts operations in the navigation sidebar and in the middle panel alphabetically.",
      "default": false
    },
    "sortPropsAlphabetically": {
      "type": "boolean",
      "description": "When set to true, sorts properties in all schemas alphabetically.",
      "default": false
    },
    "sortTagsAlphabetically": {
      "type": "boolean",
      "description": "When set to true, sorts tags in the navigation sidebar and in the middle panel alphabetically.",
      "default": false
    },
    "untrustedSpec": {
      "type": "boolean",
      "description": "If set to true, the API definition is considered untrusted and all HTML/Markdown is sanitized to prevent XSS.",
      "default": false
    },
    "theme": {
      "$ref": "#/$defs/ThemeOptions",
      "description": "Theme and visual styling options for the API documentation page."
    }
  },
  "additionalProperties": false,
  "$defs": {
    "DownloadUrl": {
      "type": "object",
      "description": "A URL entry for downloading an OpenAPI description or related documentation file.",
      "required": ["url"],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "description": "The URL pointing to the downloadable file."
        },
        "title": {
          "type": "string",
          "description": "A human-readable label for the download link."
        }
      },
      "additionalProperties": false
    },
    "ThemeOptions": {
      "type": "object",
      "description": "Visual theme configuration for the Redoc documentation renderer.",
      "properties": {
        "spacing": {
          "$ref": "#/$defs/SpacingOptions",
          "description": "Spacing and padding settings used in the layout."
        },
        "breakpoints": {
          "$ref": "#/$defs/BreakpointOptions",
          "description": "Breakpoints for switching between three-panel, two-panel, and mobile view layouts."
        },
        "colors": {
          "$ref": "#/$defs/ColorOptions",
          "description": "Color settings including tonal offset and primary/secondary palette."
        },
        "typography": {
          "$ref": "#/$defs/TypographyOptions",
          "description": "Typography settings including font family, size, weight, and line height."
        },
        "sidebar": {
          "$ref": "#/$defs/SidebarOptions",
          "description": "Sidebar width, background color, text color, and item styling."
        },
        "logo": {
          "$ref": "#/$defs/LogoOptions",
          "description": "Logo display settings including max dimensions and padding."
        },
        "rightPanel": {
          "$ref": "#/$defs/RightPanelOptions",
          "description": "Right panel background color, width, text color, and server display options."
        },
        "fab": {
          "$ref": "#/$defs/FabOptions",
          "description": "Floating action button (FAB) styling."
        }
      },
      "additionalProperties": false
    },
    "SpacingOptions": {
      "type": "object",
      "description": "Spacing configuration for the Redoc layout.",
      "properties": {
        "unit": {
          "type": "integer",
          "description": "Main spacing unit (in pixels) used in auto-computed theme values.",
          "default": 5
        },
        "sectionHorizontal": {
          "type": "integer",
          "description": "Horizontal section padding in pixels. Defaults to spacing.unit * 8.",
          "default": 40
        },
        "sectionVertical": {
          "type": "integer",
          "description": "Vertical section padding in pixels. Defaults to spacing.unit * 8.",
          "default": 40
        }
      },
      "additionalProperties": false
    },
    "BreakpointOptions": {
      "type": "object",
      "description": "Responsive breakpoints for layout switching.",
      "properties": {
        "small": {
          "type": "string",
          "description": "Breakpoint for switching to mobile view.",
          "default": "50rem"
        },
        "medium": {
          "type": "string",
          "description": "Breakpoint for switching to two-panel view.",
          "default": "85rem"
        },
        "large": {
          "type": "string",
          "description": "Breakpoint for switching to three-panel view.",
          "default": "105rem"
        }
      },
      "additionalProperties": false
    },
    "ColorOptions": {
      "type": "object",
      "description": "Color palette settings for the Redoc theme.",
      "properties": {
        "tonalOffset": {
          "type": "number",
          "description": "Default tonal offset used in color computations.",
          "default": 0.3,
          "minimum": 0,
          "maximum": 1
        }
      },
      "additionalProperties": false
    },
    "TypographyOptions": {
      "type": "object",
      "description": "Typography settings for the Redoc documentation.",
      "properties": {
        "fontSize": {
          "type": "string",
          "description": "Base font size for body text.",
          "default": "14px"
        },
        "lineHeight": {
          "type": "string",
          "description": "Base line height for body text.",
          "default": "1.5em"
        },
        "fontWeightRegular": {
          "type": "string",
          "description": "Font weight for regular text.",
          "default": "400"
        },
        "fontWeightBold": {
          "type": "string",
          "description": "Font weight for bold text.",
          "default": "600"
        },
        "fontWeightLight": {
          "type": "string",
          "description": "Font weight for light text.",
          "default": "300"
        },
        "fontFamily": {
          "type": "string",
          "description": "Font family for body text.",
          "default": "Roboto, sans-serif"
        },
        "smoothing": {
          "type": "string",
          "description": "Font smoothing setting.",
          "default": "antialiased"
        },
        "optimizeSpeed": {
          "type": "boolean",
          "description": "Whether to optimize text rendering for speed.",
          "default": true
        },
        "headings": {
          "$ref": "#/$defs/HeadingTypographyOptions",
          "description": "Typography settings specific to headings."
        },
        "code": {
          "$ref": "#/$defs/CodeTypographyOptions",
          "description": "Typography settings for inline code blocks."
        },
        "links": {
          "$ref": "#/$defs/LinkTypographyOptions",
          "description": "Typography settings for hyperlinks."
        }
      },
      "additionalProperties": false
    },
    "HeadingTypographyOptions": {
      "type": "object",
      "description": "Typography settings for headings.",
      "properties": {
        "fontFamily": {
          "type": "string",
          "description": "Font family for headings.",
          "default": "Montserrat, sans-serif"
        },
        "fontWeight": {
          "type": "string",
          "description": "Font weight for headings.",
          "default": "400"
        },
        "lineHeight": {
          "type": "string",
          "description": "Line height for headings.",
          "default": "1.6em"
        }
      },
      "additionalProperties": false
    },
    "CodeTypographyOptions": {
      "type": "object",
      "description": "Typography settings for inline code.",
      "properties": {
        "fontSize": {
          "type": "string",
          "description": "Font size for inline code.",
          "default": "13px"
        },
        "fontFamily": {
          "type": "string",
          "description": "Font family for inline code.",
          "default": "Courier, monospace"
        },
        "fontWeight": {
          "type": "string",
          "description": "Font weight for inline code."
        },
        "color": {
          "type": "string",
          "description": "Text color for inline code.",
          "default": "#e53935"
        },
        "backgroundColor": {
          "type": "string",
          "description": "Background color for inline code.",
          "default": "rgba(38, 50, 56, 0.05)"
        },
        "wrap": {
          "type": "boolean",
          "description": "Whether to break word for inline blocks (otherwise they can overflow).",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "LinkTypographyOptions": {
      "type": "object",
      "description": "Typography and color settings for hyperlinks.",
      "properties": {
        "color": {
          "type": "string",
          "description": "Link text color. Defaults to the primary color."
        },
        "visited": {
          "type": "string",
          "description": "Visited link color. Defaults to the link color."
        },
        "hover": {
          "type": "string",
          "description": "Hover link color. Defaults to a lightened version of the link color."
        },
        "textDecoration": {
          "type": "string",
          "description": "CSS text-decoration for links.",
          "default": "auto"
        },
        "hoverTextDecoration": {
          "type": "string",
          "description": "CSS text-decoration for links on hover.",
          "default": "auto"
        }
      },
      "additionalProperties": false
    },
    "SidebarOptions": {
      "type": "object",
      "description": "Styling and layout options for the navigation sidebar.",
      "properties": {
        "width": {
          "type": "string",
          "description": "Width of the sidebar.",
          "default": "260px"
        },
        "backgroundColor": {
          "type": "string",
          "description": "Background color of the sidebar.",
          "default": "#fafafa"
        },
        "textColor": {
          "type": "string",
          "description": "Text color in the sidebar.",
          "default": "#333333"
        },
        "activeTextColor": {
          "type": "string",
          "description": "Text color for the active sidebar item. Defaults to the primary color."
        },
        "groupItems": {
          "$ref": "#/$defs/SidebarItemOptions",
          "description": "Styling for group heading items in the sidebar."
        },
        "level1Items": {
          "$ref": "#/$defs/SidebarItemOptions",
          "description": "Styling for level 1 sidebar items such as tags and section headings."
        },
        "arrow": {
          "$ref": "#/$defs/SidebarArrowOptions",
          "description": "Styling for the sidebar expand/collapse arrow."
        }
      },
      "additionalProperties": false
    },
    "SidebarItemOptions": {
      "type": "object",
      "description": "Styling for a category of sidebar items.",
      "properties": {
        "activeBackgroundColor": {
          "type": "string",
          "description": "Background color for the active state of this sidebar item group."
        },
        "activeTextColor": {
          "type": "string",
          "description": "Text color for the active state of this sidebar item group."
        },
        "textTransform": {
          "type": "string",
          "description": "CSS text-transform for sidebar item labels.",
          "enum": ["uppercase", "lowercase", "capitalize", "none"],
          "default": "none"
        }
      },
      "additionalProperties": false
    },
    "SidebarArrowOptions": {
      "type": "object",
      "description": "Styling for the sidebar navigation arrow icon.",
      "properties": {
        "size": {
          "type": "string",
          "description": "Size of the arrow icon.",
          "default": "1.5em"
        },
        "color": {
          "type": "string",
          "description": "Color of the arrow icon. Defaults to the sidebar text color."
        }
      },
      "additionalProperties": false
    },
    "LogoOptions": {
      "type": "object",
      "description": "Display settings for the logo shown above the sidebar.",
      "properties": {
        "maxHeight": {
          "type": "string",
          "description": "Maximum height of the logo image. Defaults to the sidebar width."
        },
        "maxWidth": {
          "type": "string",
          "description": "Maximum width of the logo image. Defaults to the sidebar width."
        },
        "gutter": {
          "type": "string",
          "description": "Padding around the logo image.",
          "default": "2px"
        }
      },
      "additionalProperties": false
    },
    "RightPanelOptions": {
      "type": "object",
      "description": "Styling options for the right panel, which shows request and response examples.",
      "properties": {
        "backgroundColor": {
          "type": "string",
          "description": "Background color of the right panel.",
          "default": "#263238"
        },
        "width": {
          "type": "string",
          "description": "Width of the right panel as a percentage or CSS value.",
          "default": "40%"
        },
        "textColor": {
          "type": "string",
          "description": "Text color in the right panel.",
          "default": "#ffffff"
        },
        "servers": {
          "$ref": "#/$defs/RightPanelServersOptions",
          "description": "Server selector overlay styling in the right panel."
        }
      },
      "additionalProperties": false
    },
    "RightPanelServersOptions": {
      "type": "object",
      "description": "Styling for the server selector display in the right panel.",
      "properties": {
        "overlay": {
          "type": "object",
          "description": "Overlay styling for the server selector.",
          "properties": {
            "backgroundColor": {
              "type": "string",
              "description": "Background color of the server selector overlay.",
              "default": "#fafafa"
            },
            "textColor": {
              "type": "string",
              "description": "Text color in the server selector overlay.",
              "default": "#263238"
            }
          },
          "additionalProperties": false
        },
        "url": {
          "type": "object",
          "description": "URL display styling in the server selector.",
          "properties": {
            "backgroundColor": {
              "type": "string",
              "description": "Background color for the server URL display.",
              "default": "#fff"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "FabOptions": {
      "type": "object",
      "description": "Styling options for the floating action button.",
      "properties": {
        "backgroundColor": {
          "type": "string",
          "description": "Background color of the floating action button.",
          "default": "#263238"
        },
        "color": {
          "type": "string",
          "description": "Icon color of the floating action button.",
          "default": "#ffffff"
        }
      },
      "additionalProperties": false
    }
  }
}
